def validate_book(self): if not utils.cint(self.id): throw( "ID needs to be a number, Please check the serial on PR receipt." ) verify_book_query = """ SELECT * FROM `tabGoods Receipt Book` WHERE serial_start <= {0} AND serial_end >= {0} """.format(self.id) rs = frappe.db.sql(verify_book_query, as_dict=True) if len(rs) == 0: throw( _("Invalid serial. Can not find any receipt book for this serial {}" ).format(self.id)) elif utils.cint(rs[0].pr_enabled) == 0: throw( _("Receipt Book ({} - {}) Is Not Marked For PR. Please Contact Book Manager" ).format(rs[0].serial_start, rs[0].serial_end)) elif rs[0].state == "Closed/Received": throw( _("PR Book has been closed, amendment prohibited").format( self.id)) self.debit_account = rs[0].pr_debit
def make_gl_entry(self): if utils.cint(self.cancelled) == 1: return gl_entries = [] company_abbr = frappe.db.get_value("Company", self.company, "abbr") owners_account = self.debit_account sales_account = 'Sales - {}'.format(company_abbr) cost_center = 'Main - {}'.format(company_abbr) assert_dr_or_cr = "debit" if self.transaction_type in ( "Refill", "New Connection") else "credit" sales_dr_or_cr = "debit" if assert_dr_or_cr == "credit" else "credit" if self.total: gl_entries.append( self.get_gl_dict({ "account": owners_account, assert_dr_or_cr: self.total, "remarks": "{qty}x{amount_per_item} [{stock_owner}] [CR {cr_id}({txn_type})]" .format(qty=self.qty, amount_per_item=self.amount_per_item, stock_owner=self.stock_owner, cr_id=self.name, txn_type=self.transaction_type), })) gl_entries.append( self.get_gl_dict({ "account": sales_account, sales_dr_or_cr: self.total, "cost_center": cost_center, "remarks": "{qty}x{amount_per_item} [{stock_owner}] [CR {cr_id}({txn_type})]" .format(qty=self.qty, amount_per_item=self.amount_per_item, stock_owner=self.stock_owner, cr_id=self.name, txn_type=self.transaction_type), })) if gl_entries: make_gl_entries(gl_entries, cancel=(self.docstatus == 2), update_outstanding='Yes', merge_entries=False)
def transfer_stock(self, is_cancelled=None): if utils.cint(self.cancelled) == 1: return if not self.stock_date or self.stock_date.strip() == '': return is_cancelled = is_cancelled if is_cancelled is not None else ( self.docstatus == 2 and "Yes" or "No") stock_owner = utils.get_stock_owner_via_sales_person_tree( self.stock_owner) stock_owner_warehouse = utils.get_or_create_warehouse( stock_owner, self.stock_owner_company) sl_entries = [] if self.transaction_type in ("Refill", "New Connection"): sl_entries.append( self.get_sl_entry({ "item_code": self.item, "actual_qty": -1 * self.qty, "warehouse": stock_owner_warehouse.name, "process": self.transaction_type, "is_cancelled": is_cancelled, "posting_date": self.stock_date, })) # if refill sale or tv-out if self.transaction_type in ('Refill', 'TV Out'): sl_entries.append( self.get_sl_entry({ "item_code": self.item.replace('F', 'E'), "actual_qty": self.qty, "warehouse": stock_owner_warehouse.name, "process": self.transaction_type, "is_cancelled": is_cancelled, "posting_date": self.stock_date, })) make_sl_entries(sl_entries)