mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-27 17:04:47 +00:00
fixup! feat(payment): add advance payment status to advance payment doctypes to better track advance payments
This commit is contained in:
@@ -119,12 +119,16 @@ class PaymentRequest(Document):
|
|||||||
self.reference_doctype in ["Sales Order"] and ref_doc.advance_payment_status == "Not Requested"
|
self.reference_doctype in ["Sales Order"] and ref_doc.advance_payment_status == "Not Requested"
|
||||||
):
|
):
|
||||||
ref_doc.db_set("advance_payment_status", "Requested")
|
ref_doc.db_set("advance_payment_status", "Requested")
|
||||||
|
ref_doc.set_status(update=True)
|
||||||
|
ref_doc.notify_update()
|
||||||
|
|
||||||
if (
|
if (
|
||||||
self.reference_doctype in ["Purchase Order"]
|
self.reference_doctype in ["Purchase Order"]
|
||||||
and ref_doc.advance_payment_status == "Not Initiated"
|
and ref_doc.advance_payment_status == "Not Initiated"
|
||||||
):
|
):
|
||||||
ref_doc.db_set("advance_payment_status", "Initiated")
|
ref_doc.db_set("advance_payment_status", "Initiated")
|
||||||
|
ref_doc.set_status(update=True)
|
||||||
|
ref_doc.notify_update()
|
||||||
|
|
||||||
def request_phone_payment(self):
|
def request_phone_payment(self):
|
||||||
controller = _get_payment_gateway_controller(self.payment_gateway)
|
controller = _get_payment_gateway_controller(self.payment_gateway)
|
||||||
@@ -164,6 +168,39 @@ class PaymentRequest(Document):
|
|||||||
self.check_if_payment_entry_exists()
|
self.check_if_payment_entry_exists()
|
||||||
self.set_as_cancelled()
|
self.set_as_cancelled()
|
||||||
|
|
||||||
|
if self.reference_doctype in ["Sales Order", "Purchase Order"]:
|
||||||
|
|
||||||
|
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
|
||||||
|
if self.reference_doctype in ["Sales Order"] and ref_doc.advance_payment_status == "Requested":
|
||||||
|
peer_pr = frappe.db.count(
|
||||||
|
"Payment Request",
|
||||||
|
{
|
||||||
|
"reference_doctype": self.reference_doctype,
|
||||||
|
"reference_name": self.reference_name,
|
||||||
|
"docstatus": 1,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if not peer_pr:
|
||||||
|
ref_doc.db_set("advance_payment_status", "Not Requested")
|
||||||
|
ref_doc.set_status(update=True)
|
||||||
|
ref_doc.notify_update()
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.reference_doctype in ["Purchase Order"] and ref_doc.advance_payment_status == "Initiated"
|
||||||
|
):
|
||||||
|
peer_pr = frappe.db.count(
|
||||||
|
"Payment Request",
|
||||||
|
{
|
||||||
|
"reference_doctype": self.reference_doctype,
|
||||||
|
"reference_name": self.reference_name,
|
||||||
|
"docstatus": 1,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if not peer_pr:
|
||||||
|
ref_doc.db_set("advance_payment_status", "Not Initiated")
|
||||||
|
ref_doc.set_status(update=True)
|
||||||
|
ref_doc.notify_update()
|
||||||
|
|
||||||
def make_invoice(self):
|
def make_invoice(self):
|
||||||
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
|
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
|
||||||
if hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart":
|
if hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart":
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
frappe.listview_settings['Purchase Order'] = {
|
frappe.listview_settings['Purchase Order'] = {
|
||||||
add_fields: ["base_grand_total", "company", "currency", "supplier",
|
add_fields: ["base_grand_total", "company", "currency", "supplier",
|
||||||
"supplier_name", "per_received", "per_billed", "status"],
|
"supplier_name", "per_received", "per_billed", "status", "advance_payment_status"],
|
||||||
get_indicator: function (doc) {
|
get_indicator: function (doc) {
|
||||||
if (doc.status === "Closed") {
|
if (doc.status === "Closed") {
|
||||||
return [__("Closed"), "green", "status,=,Closed"];
|
return [__("Closed"), "green", "status,=,Closed"];
|
||||||
@@ -8,6 +8,8 @@ frappe.listview_settings['Purchase Order'] = {
|
|||||||
return [__("On Hold"), "orange", "status,=,On Hold"];
|
return [__("On Hold"), "orange", "status,=,On Hold"];
|
||||||
} else if (doc.status === "Delivered") {
|
} else if (doc.status === "Delivered") {
|
||||||
return [__("Delivered"), "green", "status,=,Closed"];
|
return [__("Delivered"), "green", "status,=,Closed"];
|
||||||
|
} else if (doc.advance_payment_status == "Initiated") {
|
||||||
|
return [__("To Pay"), "gray", "advance_payment_status,=,Initiated"];
|
||||||
} else if (flt(doc.per_received, 2) < 100 && doc.status !== "Closed") {
|
} else if (flt(doc.per_received, 2) < 100 && doc.status !== "Closed") {
|
||||||
if (flt(doc.per_billed, 2) < 100) {
|
if (flt(doc.per_billed, 2) < 100) {
|
||||||
return [__("To Receive and Bill"), "orange",
|
return [__("To Receive and Bill"), "orange",
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ frappe.query_reports["Purchase Order Analysis"] = {
|
|||||||
"fieldtype": "MultiSelectList",
|
"fieldtype": "MultiSelectList",
|
||||||
"width": "80",
|
"width": "80",
|
||||||
get_data: function(txt) {
|
get_data: function(txt) {
|
||||||
let status = ["To Bill", "To Receive", "To Receive and Bill", "Completed"]
|
let status = ["To Pay", "To Bill", "To Receive", "To Receive and Bill", "Completed"]
|
||||||
let options = []
|
let options = []
|
||||||
for (let option of status){
|
for (let option of status){
|
||||||
options.push({
|
options.push({
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ status_map = {
|
|||||||
"To Deliver",
|
"To Deliver",
|
||||||
"eval:self.per_delivered < 100 and self.per_billed == 100 and self.docstatus == 1 and not self.skip_delivery_note",
|
"eval:self.per_delivered < 100 and self.per_billed == 100 and self.docstatus == 1 and not self.skip_delivery_note",
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"To Pay",
|
||||||
|
"eval:self.advance_payment_status == 'Requested' and self.docstatus == 1",
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"Completed",
|
"Completed",
|
||||||
"eval:(self.per_delivered == 100 or self.skip_delivery_note) and self.per_billed == 100 and self.docstatus == 1",
|
"eval:(self.per_delivered == 100 or self.skip_delivery_note) and self.per_billed == 100 and self.docstatus == 1",
|
||||||
@@ -63,15 +67,19 @@ status_map = {
|
|||||||
],
|
],
|
||||||
"Purchase Order": [
|
"Purchase Order": [
|
||||||
["Draft", None],
|
["Draft", None],
|
||||||
[
|
|
||||||
"To Receive and Bill",
|
|
||||||
"eval:self.per_received < 100 and self.per_billed < 100 and self.docstatus == 1",
|
|
||||||
],
|
|
||||||
["To Bill", "eval:self.per_received >= 100 and self.per_billed < 100 and self.docstatus == 1"],
|
["To Bill", "eval:self.per_received >= 100 and self.per_billed < 100 and self.docstatus == 1"],
|
||||||
[
|
[
|
||||||
"To Receive",
|
"To Receive",
|
||||||
"eval:self.per_received < 100 and self.per_billed == 100 and self.docstatus == 1",
|
"eval:self.per_received < 100 and self.per_billed == 100 and self.docstatus == 1",
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"To Receive and Bill",
|
||||||
|
"eval:self.per_received < 100 and self.per_billed < 100 and self.docstatus == 1",
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"To Pay",
|
||||||
|
"eval:self.advance_payment_status == 'Initiated' and self.docstatus == 1",
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"Completed",
|
"Completed",
|
||||||
"eval:self.per_received >= 100 and self.per_billed == 100 and self.docstatus == 1",
|
"eval:self.per_received >= 100 and self.per_billed == 100 and self.docstatus == 1",
|
||||||
|
|||||||
@@ -1270,7 +1270,7 @@
|
|||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"oldfieldname": "status",
|
"oldfieldname": "status",
|
||||||
"oldfieldtype": "Select",
|
"oldfieldtype": "Select",
|
||||||
"options": "\nDraft\nOn Hold\nTo Deliver and Bill\nTo Bill\nTo Deliver\nCompleted\nCancelled\nClosed",
|
"options": "\nDraft\nOn Hold\nTo Pay\nTo Deliver and Bill\nTo Bill\nTo Deliver\nCompleted\nCancelled\nClosed",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
frappe.listview_settings['Sales Order'] = {
|
frappe.listview_settings['Sales Order'] = {
|
||||||
add_fields: ["base_grand_total", "customer_name", "currency", "delivery_date",
|
add_fields: ["base_grand_total", "customer_name", "currency", "delivery_date",
|
||||||
"per_delivered", "per_billed", "status", "order_type", "name", "skip_delivery_note"],
|
"per_delivered", "per_billed", "status", "advance_payment_status", "order_type", "name", "skip_delivery_note"],
|
||||||
get_indicator: function (doc) {
|
get_indicator: function (doc) {
|
||||||
if (doc.status === "Closed") {
|
if (doc.status === "Closed") {
|
||||||
// Closed
|
// Closed
|
||||||
@@ -10,6 +10,8 @@ frappe.listview_settings['Sales Order'] = {
|
|||||||
return [__("On Hold"), "orange", "status,=,On Hold"];
|
return [__("On Hold"), "orange", "status,=,On Hold"];
|
||||||
} else if (doc.status === "Completed") {
|
} else if (doc.status === "Completed") {
|
||||||
return [__("Completed"), "green", "status,=,Completed"];
|
return [__("Completed"), "green", "status,=,Completed"];
|
||||||
|
} else if (doc.advance_payment_status === "Requested") {
|
||||||
|
return [__("To Pay"), "gray", "advance_payment_status,=,Requested"];
|
||||||
} else if (!doc.skip_delivery_note && flt(doc.per_delivered, 2) < 100) {
|
} else if (!doc.skip_delivery_note && flt(doc.per_delivered, 2) < 100) {
|
||||||
if (frappe.datetime.get_diff(doc.delivery_date) < 0) {
|
if (frappe.datetime.get_diff(doc.delivery_date) < 0) {
|
||||||
// not delivered & overdue
|
// not delivered & overdue
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ def get_so_with_invoices(filters):
|
|||||||
)
|
)
|
||||||
.where(
|
.where(
|
||||||
(so.docstatus == 1)
|
(so.docstatus == 1)
|
||||||
& (so.status.isin(["To Deliver and Bill", "To Bill"]))
|
& (so.status.isin(["To Deliver and Bill", "To Bill", "To Pay"]))
|
||||||
& (so.payment_terms_template != "NULL")
|
& (so.payment_terms_template != "NULL")
|
||||||
& (so.company == conditions.company)
|
& (so.company == conditions.company)
|
||||||
& (so.transaction_date[conditions.start_date : conditions.end_date])
|
& (so.transaction_date[conditions.start_date : conditions.end_date])
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ frappe.query_reports["Sales Order Analysis"] = {
|
|||||||
"fieldtype": "MultiSelectList",
|
"fieldtype": "MultiSelectList",
|
||||||
"width": "80",
|
"width": "80",
|
||||||
get_data: function(txt) {
|
get_data: function(txt) {
|
||||||
let status = ["To Bill", "To Deliver", "To Deliver and Bill", "Completed"]
|
let status = ["To Pay", "To Bill", "To Deliver", "To Deliver and Bill", "Completed"]
|
||||||
let options = []
|
let options = []
|
||||||
for (let option of status){
|
for (let option of status){
|
||||||
options.push({
|
options.push({
|
||||||
|
|||||||
Reference in New Issue
Block a user