Beispiel #1
0
    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
Beispiel #2
0
    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)
Beispiel #3
0
    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)