Successfully reported this slideshow.
Your SlideShare is downloading. ×

ERPNext_Stock.pptx

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 19 Ad

More Related Content

Similar to ERPNext_Stock.pptx (20)

Advertisement

ERPNext_Stock.pptx

  1. 1. Inventory management module Herry N. Atwar
  2. 2. Directory  Frappe-bench  Apps  Erpnext  Erpnext  Stock  Doctype  Stock_entry Stock movement from one warehouse to another (or from, or to a warehouse). • Stock_entry.js • Stock_entry.json • Stock_entry.py • Stock_entry_list.js • Stock_entry_utils.py
  3. 3. Stock_entry.py  Class StockEntry(StockController) :  Def get_feed  Def onload  Def before_validate  Def validate  Def on_submit  Def on_cancel  Def set_job_card_data  Def validate_work_order_status  Def validate_purpose  Def delete_linked_stock_entry  Def set_transfer_qty  Def update_cost_in_project
  4. 4. Stock_entry.py  Class StockEntry(StockController) :  Def validate_item  Def validate_qty  Def validate_fg_completed_qty  Def validate_difference_account  Def validate_warehouse  Def validate_work_order  Def check_if_operations_completed  Def check_duplicate_entry_for_work_order  Def set_actual_qty  Def get_stock_and_rate  Def calculate_rate_and_amount  Def set_basic_rate
  5. 5. Stock_entry.py  Class StockEntry(StockController) :  Def set_rate_for_outgoing_items  Def get_args_for_incoming_rate  Def get_basic_rate_for_repacked_items  Def get_basic_rate_for_manufactured_item  Def distribute_additional_costs  Def update_valuation_rate  Def set_total_incoming_outgoing_value  Def set_total_amount  Def set_stock_entry_type  Def set_purpose_for_stock_entry  Def validate_duplicate_serial_no  Def validate_bom  Def mark_finished_and_scrap_items
  6. 6. Stock_entry.py  Class StockEntry(StockController) :  Def get_finished_item  Def validate_finished_goods  Def update_stock_ledger  Def get_finished_item_row  Def get_sle_for_source_warehouse  Def get_sle_for_target_warehouse  Def get_gl_entries  Def update_work_order  Def get_item_details  Def set_items_for_stock_in  Def get_items
  7. 7. Stock_entry.py  Class StockEntry(StockController) :  Def get_finished_item  Def validate_finished_goods  Def update_stock_ledger  Def get_finished_item_row  Def get_sle_for_source_warehouse  Def get_sle_for_target_warehouse  Def get_gl_entries  Def update_work_order  Def get_item_details  Def set_items_for_stock_in  Def get_items
  8. 8. Stock_entry.py  Class StockEntry(StockController) :  Def set_scrap_items  Def set_work_order_details  Def load_items_from_bom  Def set_batchwise_finished_goods  Def add_batchwise_finished_good  Def add_finished_goods  Def get_bom_raw_materials  Def get_bom_scrap_material  Def get_scrap_items_from_job_card  Def get_completed_job_card_qty  Def get_used_scrap_items  Def get_unconsumed_raw_materials
  9. 9. Stock_entry.py  Class StockEntry(StockController) :  Def get_transfered_raw_materials  Def get_pending_raw_materials  Def get_pro_order_required_items  Def get_job_card_item_codes  Def add_to_stock_entry_detail  Def validate_with_material_request  Def validate_batch  Def update_puchase_order_supplied_items  Def update_so_in_serial_number  Def validate_reserved_serial_no_consumption  Def update_transferred_qty  Def update_quality_inspection
  10. 10. Stock_entry.py  Class StockEntry(StockController) :  Def set_material_request_transfer_status  Def update_items_for_process_loss  Def set_serial_no_batch_for_finished_good  Def get_serial_nos_for_fg  Def get_available_serial_nos  Def set_missing_values  Def move_sample_to_retention_warehouse  Def make_stock_in_entry  Def set_missing_values  Def update_item
  11. 11. Stock_entry.py  Class StockEntry(StockController) :  Def get_work_order_details  Def get_operating_cost_per_unit  Def get_used_alternative_items  Def get_valuation_rate_for_finished_good_entry  Def get_uom_details  Def get_expired_batch_items  Def get_warehouse_details  Def validate_sample_quantity  Def get_supplied_items
  12. 12. Calculate_rate_and_amount def calculate_rate_and_amount(self, reset_outgoing_rate=True, raise_error_if_no_rate=True): self.set_basic_rate(reset_outgoing_rate, raise_error_if_no_rate) init_landed_taxes_and_totals(self) self.distribute_additional_costs() self.update_valuation_rate() self.set_total_incoming_outgoing_value() self.set_total_amount()
  13. 13. Set_basic_rate def set_basic_rate(self, reset_outgoing_rate=True, raise_error_if_no_rate=True): """ Set rate for outgoing, scrapped and finished items """ # Set rate for outgoing items outgoing_items_cost = self.set_rate_for_outgoing_items(reset_outgoing_rate, raise_error_if_no_rate) finished_item_qty = sum(d.transfer_qty for d in self.items if d.is_finished_item or d.is_process_loss) # Set basic rate for incoming items for d in self.get("items"): if d.s_warehouse or d.set_basic_rate_manually: continue if d.allow_zero_valuation_rate: d.basic_rate = 0.0 elif d.is_finished_item: if self.purpose == "Manufacture": d.basic_rate = self.get_basic_rate_for_manufactured_item( finished_item_qty, outgoing_items_cost) elif self.purpose == "Repack": d.basic_rate = self.get_basic_rate_for_repacked_items(d.transfer_qty, outgoing_items_cost)
  14. 14. Set_basic_rate if not d.basic_rate and not d.allow_zero_valuation_rate: d.basic_rate = get_valuation_rate( d.item_code, d.t_warehouse, self.doctype, self.name, d.allow_zero_valuation_rate, currency=erpnext.get_company_currency(self.company), company=self.company, raise_error_if_no_rate=raise_error_if_no_rate, ) # do not round off basic rate to avoid precision loss d.basic_rate = flt(d.basic_rate) if d.is_process_loss: d.basic_rate = flt(0.0) d.basic_amount = flt(flt(d.transfer_qty) * flt(d.basic_rate), d.precision("basic_amount"))
  15. 15. Distribute_additional_cost def distribute_additional_costs(self): # If no incoming items, set additional costs blank if not any(d.item_code for d in self.items if d.t_warehouse): self.additional_costs = [] self.total_additional_costs = sum(flt(t.base_amount) for t in self.get("additional_costs")) if self.purpose in ("Repack", "Manufacture"): incoming_items_cost = sum(flt(t.basic_amount) for t in self.get("items") if t.is_finished_item) else: incoming_items_cost = sum(flt(t.basic_amount) for t in self.get("items") if t.t_warehouse) if not incoming_items_cost: return
  16. 16. Distribute_additional_cost for d in self.get("items"): if self.purpose in ("Repack", "Manufacture") and not d.is_finished_item: d.additional_cost = 0 continue elif not d.t_warehouse: d.additional_cost = 0 continue d.additional_cost = (flt(d.basic_amount) / incoming_items_cost) * self.total_additional_costs
  17. 17. Update_valuation_rate def update_valuation_rate(self): for d in self.get("items"): if d.transfer_qty: d.amount = flt(flt(d.basic_amount) + flt(d.additional_cost), d.precision("amount")) # Do not round off valuation rate to avoid precision loss d.valuation_rate = flt(d.basic_rate) + (flt(d.additional_cost) / flt(d.transfer_qty))
  18. 18. Set_total_incoming_outgoing_value def set_total_incoming_outgoing_value(self): self.total_incoming_value = self.total_outgoing_value = 0.0 for d in self.get("items"): if d.t_warehouse: self.total_incoming_value += flt(d.amount) if d.s_warehouse: self.total_outgoing_value += flt(d.amount) self.value_difference = self.total_incoming_value - self.total_outgoing_value
  19. 19. Set_total_amount def set_total_amount(self): self.total_amount = None if self.purpose not in ["Manufacture", "Repack"]: self.total_amount = sum([flt(item.amount) for item in self.get("items")])

×