def get_payment_entries(self): order_doctype = "Sales Order" if self.party_type == "Customer" else "Purchase Order" payment_entries = get_advance_payment_entries( self.party_type, self.party, self.receivable_payable_account, order_doctype, against_all_orders=True) return payment_entries
def get_nonreconciled_payment_entries(self): self.check_mandatory_to_fetch() order_doctype = "Sales Order" if self.party_type == "Customer" else "Purchase Order" payment_entries = get_advance_payment_entries(self.party_type, self.party, self.receivable_payable_account, order_doctype, against_all_orders=True, against_account=self.bank_cash_account, limit=self.limit) journal_entries = get_advance_journal_entries(self.party_type, self.party, self.receivable_payable_account, order_doctype, against_all_orders=True, against_account=self.bank_cash_account, limit=self.limit) self.add_payment_entries(payment_entries + journal_entries)
def match_invoice_to_payment(self): added_payments = [] for entry in self.new_transaction_items: if (not entry.party or entry.party_type == "Account"): continue entry.account = self.receivable_account if entry.party_type == "Customer" else self.payable_account amount = abs(entry.amount) payment, matching_invoices = None, [] for inv_entry in self.payment_invoice_items: if (inv_entry.payment_description != frappe.safe_decode( entry.description) or inv_entry.transaction_date != entry.transaction_date): continue if (inv_entry.party != entry.party): continue matching_invoices += [ inv_entry.invoice_type + "|" + inv_entry.invoice ] payment = get_payments_matching_invoice( inv_entry.invoice, entry.amount, entry.transaction_date) doc = frappe.get_doc(inv_entry.invoice_type, inv_entry.invoice) inv_entry.invoice_date = doc.posting_date inv_entry.outstanding_amount = doc.outstanding_amount inv_entry.allocated_amount = min(float(doc.outstanding_amount), amount) amount -= inv_entry.allocated_amount if (amount < 0): break amount = abs(entry.amount) if (payment is None): order_doctype = "Sales Order" if entry.party_type == "Customer" else "Purchase Order" from erpnext.controllers.accounts_controller import get_advance_payment_entries payment_entries = get_advance_payment_entries( entry.party_type, entry.party, entry.account, order_doctype, against_all_orders=True) payment_entries += self.get_matching_payments( entry.party, amount, entry.transaction_date) payment = next( (payment for payment in payment_entries if payment.amount == amount and payment not in added_payments), None) if (payment is None): print("Failed to find payments for {0}:{1}".format( entry.party, amount)) continue added_payments += [payment] entry.reference_type = payment.reference_type entry.reference_name = payment.reference_name entry.mode_of_payment = "Wire Transfer" entry.outstanding_amount = min(amount, 0) if (entry.payment_reference is None): entry.payment_reference = frappe.safe_decode(entry.description) entry.invoices = ",".join(matching_invoices)
def get_payment_entries(self): order_doctype = "Sales Order" if self.party_type == "Customer" else "Purchase Order" condition = self.get_conditions(get_payments=True) payment_entries = get_advance_payment_entries( self.party_type, self.party, self.receivable_payable_account, order_doctype, against_all_orders=True, limit=self.payment_limit, condition=condition) return payment_entries
def match_invoice_to_payment(self): added_payments = [] for entry in self.new_transaction_items: if (not entry.party or entry.party_type == "Account"): continue entry.account = self.receivable_account if entry.party_type == "Customer" else self.payable_account amount = abs(entry.amount) payment, matching_invoices = None, [] for inv_entry in self.payment_invoice_items: if (inv_entry.payment_description != frappe.safe_decode(entry.description) or inv_entry.transaction_date != entry.transaction_date): continue if (inv_entry.party != entry.party): continue matching_invoices += [inv_entry.invoice_type + "|" + inv_entry.invoice] payment = get_payments_matching_invoice(inv_entry.invoice, entry.amount, entry.transaction_date) doc = frappe.get_doc(inv_entry.invoice_type, inv_entry.invoice) inv_entry.invoice_date = doc.posting_date inv_entry.outstanding_amount = doc.outstanding_amount inv_entry.allocated_amount = min(float(doc.outstanding_amount), amount) amount -= inv_entry.allocated_amount if (amount < 0): break amount = abs(entry.amount) if (payment is None): order_doctype = "Sales Order" if entry.party_type=="Customer" else "Purchase Order" from erpnext.controllers.accounts_controller import get_advance_payment_entries payment_entries = get_advance_payment_entries(entry.party_type, entry.party, entry.account, order_doctype, against_all_orders=True) payment_entries += self.get_matching_payments(entry.party, amount, entry.transaction_date) payment = next((payment for payment in payment_entries if payment.amount == amount and payment not in added_payments), None) if (payment is None): print("Failed to find payments for {0}:{1}".format(entry.party, amount)) continue added_payments += [payment] entry.reference_type = payment.reference_type entry.reference_name = payment.reference_name entry.mode_of_payment = "Wire Transfer" entry.outstanding_amount = min(amount, 0) if (entry.payment_reference is None): entry.payment_reference = frappe.safe_decode(entry.description) entry.invoices = ",".join(matching_invoices)
def get_payment_entries(self): order_doctype = "Sales Order" if self.party_type=="Customer" else "Purchase Order" payment_entries = get_advance_payment_entries(self.party_type, self.party, self.receivable_payable_account, order_doctype, against_all_orders=True) return payment_entries