Merge branch 'hotfix'
This commit is contained in:
commit
0f2e3a4e95
@ -2,7 +2,7 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
|
|
||||||
__version__ = '7.1.8'
|
__version__ = '7.1.9'
|
||||||
|
|
||||||
def get_default_company(user=None):
|
def get_default_company(user=None):
|
||||||
'''Get default company for user'''
|
'''Get default company for user'''
|
||||||
|
@ -195,6 +195,7 @@ def update_outstanding_amt(account, party_type, party, against_voucher_type, aga
|
|||||||
if against_voucher_type in ["Sales Invoice", "Purchase Invoice"]:
|
if against_voucher_type in ["Sales Invoice", "Purchase Invoice"]:
|
||||||
ref_doc = frappe.get_doc(against_voucher_type, against_voucher)
|
ref_doc = frappe.get_doc(against_voucher_type, against_voucher)
|
||||||
ref_doc.db_set('outstanding_amount', bal)
|
ref_doc.db_set('outstanding_amount', bal)
|
||||||
|
ref_doc.set_status(update=True)
|
||||||
|
|
||||||
def validate_frozen_account(account, adv_adj=None):
|
def validate_frozen_account(account, adv_adj=None):
|
||||||
frozen_account = frappe.db.get_value("Account", account, "freeze_account")
|
frozen_account = frappe.db.get_value("Account", account, "freeze_account")
|
||||||
|
@ -2771,6 +2771,35 @@
|
|||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"default": "Draft",
|
||||||
|
"fieldname": "status",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"label": "Status",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "\nDraft\nReturn\nDebit Note Issued\nSubmitted\nPaid\nUnpaid\nOverdue\nCancelled",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
@ -3264,7 +3293,7 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2016-11-03 15:54:34.750548",
|
"modified": "2016-11-09 14:18:47.094777",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Purchase Invoice",
|
"name": "Purchase Invoice",
|
||||||
|
@ -65,6 +65,7 @@ class PurchaseInvoice(BuyingController):
|
|||||||
self.validate_fixed_asset()
|
self.validate_fixed_asset()
|
||||||
self.validate_fixed_asset_account()
|
self.validate_fixed_asset_account()
|
||||||
self.create_remarks()
|
self.create_remarks()
|
||||||
|
self.set_status()
|
||||||
|
|
||||||
def validate_cash(self):
|
def validate_cash(self):
|
||||||
if not self.cash_bank_account and flt(self.paid_amount):
|
if not self.cash_bank_account and flt(self.paid_amount):
|
||||||
@ -596,6 +597,7 @@ class PurchaseInvoice(BuyingController):
|
|||||||
self.make_gl_entries_on_cancel()
|
self.make_gl_entries_on_cancel()
|
||||||
self.update_project()
|
self.update_project()
|
||||||
self.update_fixed_asset()
|
self.update_fixed_asset()
|
||||||
|
frappe.db.set(self, 'status', 'Cancelled')
|
||||||
|
|
||||||
def update_project(self):
|
def update_project(self):
|
||||||
project_list = []
|
project_list = []
|
||||||
|
@ -14,6 +14,8 @@ frappe.listview_settings['Purchase Invoice'] = {
|
|||||||
} else {
|
} else {
|
||||||
return [__("Unpaid"), "orange", "outstanding_amount,>,0|due,>=,Today"];
|
return [__("Unpaid"), "orange", "outstanding_amount,>,0|due,>=,Today"];
|
||||||
}
|
}
|
||||||
|
} else if(flt(doc.outstanding_amount) < 0 && doc.docstatus == 1) {
|
||||||
|
return [__("Debit Note Issued"), "darkgrey", "outstanding_amount,<,0"]
|
||||||
}else if(flt(doc.outstanding_amount)==0 && doc.docstatus==1) {
|
}else if(flt(doc.outstanding_amount)==0 && doc.docstatus==1) {
|
||||||
return [__("Paid"), "green", "outstanding_amount,=,0"];
|
return [__("Paid"), "green", "outstanding_amount,=,0"];
|
||||||
}
|
}
|
||||||
|
@ -3065,6 +3065,35 @@
|
|||||||
"unique": 0,
|
"unique": 0,
|
||||||
"width": "50%"
|
"width": "50%"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"default": "Draft",
|
||||||
|
"fieldname": "status",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 1,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"label": "Status",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 1,
|
||||||
|
"options": "\nDraft\nReturn\nCredit Note Issued\nSubmitted\nPaid\nUnpaid\nOverdue\nCancelled",
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 1,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 1,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
@ -4010,7 +4039,7 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2016-11-03 15:55:41.249414",
|
"modified": "2016-11-09 14:18:24.760263",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice",
|
"name": "Sales Invoice",
|
||||||
|
@ -86,6 +86,7 @@ class SalesInvoice(SellingController):
|
|||||||
self.update_packing_list()
|
self.update_packing_list()
|
||||||
self.set_billing_hours_and_amount()
|
self.set_billing_hours_and_amount()
|
||||||
self.update_timesheet_billing_for_project()
|
self.update_timesheet_billing_for_project()
|
||||||
|
self.set_status()
|
||||||
|
|
||||||
def before_save(self):
|
def before_save(self):
|
||||||
set_account_for_mode_of_payment(self)
|
set_account_for_mode_of_payment(self)
|
||||||
@ -158,6 +159,7 @@ class SalesInvoice(SellingController):
|
|||||||
self.update_stock_ledger()
|
self.update_stock_ledger()
|
||||||
|
|
||||||
self.make_gl_entries_on_cancel()
|
self.make_gl_entries_on_cancel()
|
||||||
|
frappe.db.set(self, 'status', 'Cancelled')
|
||||||
|
|
||||||
def update_status_updater_args(self):
|
def update_status_updater_args(self):
|
||||||
if cint(self.update_stock):
|
if cint(self.update_stock):
|
||||||
|
@ -10,9 +10,11 @@ frappe.listview_settings['Sales Invoice'] = {
|
|||||||
return [__("Return"), "darkgrey", "is_return,=,Yes"];
|
return [__("Return"), "darkgrey", "is_return,=,Yes"];
|
||||||
} else if(flt(doc.outstanding_amount)==0) {
|
} else if(flt(doc.outstanding_amount)==0) {
|
||||||
return [__("Paid"), "green", "outstanding_amount,=,0"]
|
return [__("Paid"), "green", "outstanding_amount,=,0"]
|
||||||
} else if (flt(doc.outstanding_amount) > 0 && doc.due_date > frappe.datetime.get_today()) {
|
} else if(flt(doc.outstanding_amount) < 0) {
|
||||||
|
return [__("Credit Note Issued"), "darkgrey", "outstanding_amount,<,0"]
|
||||||
|
}else if (flt(doc.outstanding_amount) > 0 && doc.due_date >= frappe.datetime.get_today()) {
|
||||||
return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"]
|
return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"]
|
||||||
} else if (flt(doc.outstanding_amount) > 0 && doc.due_date <= frappe.datetime.get_today()) {
|
} else if (flt(doc.outstanding_amount) > 0 && doc.due_date < frappe.datetime.get_today()) {
|
||||||
return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"]
|
return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -721,3 +721,12 @@ def get_advance_payment_entries(party_type, party, party_account,
|
|||||||
""".format(party_account_field), (party_account, party_type, party, payment_type), as_dict=1)
|
""".format(party_account_field), (party_account, party_type, party, payment_type), as_dict=1)
|
||||||
|
|
||||||
return list(payment_entries_against_order) + list(unallocated_payment_entries)
|
return list(payment_entries_against_order) + list(unallocated_payment_entries)
|
||||||
|
|
||||||
|
def update_invoice_status():
|
||||||
|
# Daily update the status of the invoices
|
||||||
|
|
||||||
|
frappe.db.sql(""" update `tabSales Invoice` set status = 'Overdue'
|
||||||
|
where due_date < CURDATE() and docstatus = 1 and outstanding_amount > 0""")
|
||||||
|
|
||||||
|
frappe.db.sql(""" update `tabPurchase Invoice` set status = 'Overdue'
|
||||||
|
where due_date < CURDATE() and docstatus = 1 and outstanding_amount > 0""")
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.utils import flt, comma_or
|
from frappe.utils import flt, comma_or, nowdate, getdate
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from erpnext.accounts.party_status import notify_status
|
from erpnext.accounts.party_status import notify_status
|
||||||
@ -41,6 +41,26 @@ status_map = {
|
|||||||
["Cancelled", "eval:self.docstatus==2"],
|
["Cancelled", "eval:self.docstatus==2"],
|
||||||
["Closed", "eval:self.status=='Closed'"],
|
["Closed", "eval:self.status=='Closed'"],
|
||||||
],
|
],
|
||||||
|
"Sales Invoice": [
|
||||||
|
["Draft", None],
|
||||||
|
["Submitted", "eval:self.docstatus==1"],
|
||||||
|
["Return", "eval:self.is_return==1 and self.docstatus==1"],
|
||||||
|
["Credit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1"],
|
||||||
|
["Paid", "eval:self.outstanding_amount==0 and self.docstatus==1 and self.is_return==0"],
|
||||||
|
["Unpaid", "eval:self.outstanding_amount > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.docstatus==1"],
|
||||||
|
["Overdue", "eval:self.outstanding_amount > 0 and getdate(self.due_date) < getdate(nowdate()) and self.docstatus==1"],
|
||||||
|
["Cancelled", "eval:self.docstatus==2"],
|
||||||
|
],
|
||||||
|
"Purchase Invoice": [
|
||||||
|
["Draft", None],
|
||||||
|
["Submitted", "eval:self.docstatus==1"],
|
||||||
|
["Return", "eval:self.is_return==1 and self.docstatus==1"],
|
||||||
|
["Debit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1"],
|
||||||
|
["Paid", "eval:self.outstanding_amount==0 and self.docstatus==1 and self.is_return==0"],
|
||||||
|
["Unpaid", "eval:self.outstanding_amount > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.docstatus==1"],
|
||||||
|
["Overdue", "eval:self.outstanding_amount > 0 and getdate(self.due_date) < getdate(nowdate()) and self.docstatus==1"],
|
||||||
|
["Cancelled", "eval:self.docstatus==2"],
|
||||||
|
],
|
||||||
"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 Receive and Bill", "eval:self.per_received < 100 and self.per_billed < 100 and self.docstatus == 1"],
|
||||||
|
@ -189,6 +189,7 @@ scheduler_events = {
|
|||||||
"erpnext.stock.reorder_item.reorder_item",
|
"erpnext.stock.reorder_item.reorder_item",
|
||||||
"erpnext.setup.doctype.email_digest.email_digest.send",
|
"erpnext.setup.doctype.email_digest.email_digest.send",
|
||||||
"erpnext.support.doctype.issue.issue.auto_close_tickets",
|
"erpnext.support.doctype.issue.issue.auto_close_tickets",
|
||||||
|
"erpnext.controllers.accounts_controller.update_invoice_status",
|
||||||
"erpnext.accounts.doctype.fiscal_year.fiscal_year.auto_create_fiscal_year",
|
"erpnext.accounts.doctype.fiscal_year.fiscal_year.auto_create_fiscal_year",
|
||||||
"erpnext.hr.doctype.employee.employee.send_birthday_reminders",
|
"erpnext.hr.doctype.employee.employee.send_birthday_reminders",
|
||||||
"erpnext.projects.doctype.task.task.set_tasks_as_overdue",
|
"erpnext.projects.doctype.task.task.set_tasks_as_overdue",
|
||||||
|
@ -345,3 +345,5 @@ execute:frappe.db.set_value("Accounts Settings", "Accounts Settings", "unlink_pa
|
|||||||
execute:frappe.db.sql("update `tabStock Entry` set total_amount = null where purpose in('Repack', 'Manufacture')")
|
execute:frappe.db.sql("update `tabStock Entry` set total_amount = null where purpose in('Repack', 'Manufacture')")
|
||||||
erpnext.patches.v7_0.repost_gle_for_pi_with_update_stock #2016-11-01
|
erpnext.patches.v7_0.repost_gle_for_pi_with_update_stock #2016-11-01
|
||||||
erpnext.patches.v7_1.add_account_user_role_for_timesheet
|
erpnext.patches.v7_1.add_account_user_role_for_timesheet
|
||||||
|
erpnext.patches.v7_0.set_base_amount_in_invoice_payment_table
|
||||||
|
erpnext.patches.v7_1.update_invoice_status
|
@ -0,0 +1,23 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
from frappe.utils import flt
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
si_list = frappe.db.sql("""
|
||||||
|
select distinct parent
|
||||||
|
from `tabSales Invoice Payment`
|
||||||
|
where docstatus!=2 and amount != 0 and base_amount = 0
|
||||||
|
""")
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
for d in si_list:
|
||||||
|
si = frappe.get_doc("Sales Invoice", d[0])
|
||||||
|
for p in si.get("payments"):
|
||||||
|
if p.amount and not p.base_amount:
|
||||||
|
base_amount = flt(p.amount*si.conversion_rate, si.precision("base_paid_amount"))
|
||||||
|
frappe.db.set_value("Sales Invoice Payment", p.name, "base_amount", base_amount, update_modified=False)
|
||||||
|
|
||||||
|
count +=1
|
||||||
|
|
||||||
|
if count % 200 == 0:
|
||||||
|
frappe.db.commit()
|
34
erpnext/patches/v7_1/update_invoice_status.py
Normal file
34
erpnext/patches/v7_1/update_invoice_status.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
|
||||||
|
frappe.reload_doc('accounts', 'doctype', 'purchase_invoice')
|
||||||
|
|
||||||
|
frappe.db.sql("""
|
||||||
|
update
|
||||||
|
`tabPurchase Invoice`
|
||||||
|
set
|
||||||
|
status = (Case When outstanding_amount = 0 and docstatus = 1 and is_return = 0 then 'Paid'
|
||||||
|
when due_date < CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Overdue'
|
||||||
|
when due_date >= CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Unpaid'
|
||||||
|
when outstanding_amount < 0 and docstatus =1 then 'Debit Note Issued'
|
||||||
|
when is_return = 1 and docstatus =1 then 'Return'
|
||||||
|
when docstatus = 2 then 'Cancelled'
|
||||||
|
else 'Draft'
|
||||||
|
End)""")
|
||||||
|
|
||||||
|
frappe.db.sql("""
|
||||||
|
update
|
||||||
|
`tabSales Invoice`
|
||||||
|
set status = (Case When outstanding_amount = 0 and docstatus = 1 and is_return = 0 then 'Paid'
|
||||||
|
when due_date < CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Overdue'
|
||||||
|
when due_date >= CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Unpaid'
|
||||||
|
when outstanding_amount < 0 and docstatus =1 then 'Credit Note Issued'
|
||||||
|
when is_return = 1 and docstatus =1 then 'Return'
|
||||||
|
when docstatus = 2 then 'Cancelled'
|
||||||
|
else 'Draft'
|
||||||
|
End)""")
|
Loading…
x
Reference in New Issue
Block a user