[fix]Earlier recurring billing

This commit is contained in:
rohitwaghchaure 2016-03-17 17:30:53 +05:30
parent d61b21cedf
commit 90ff509f6d
6 changed files with 52 additions and 41 deletions

View File

@ -2655,7 +2655,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_on_submit": 1, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"depends_on": "is_recurring", "depends_on": "is_recurring",
@ -2673,7 +2673,7 @@
"permlevel": 0, "permlevel": 0,
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 1, "read_only": 0,
"report_hide": 0, "report_hide": 0,
"reqd": 0, "reqd": 0,
"search_index": 0, "search_index": 0,
@ -2692,7 +2692,7 @@
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"menu_index": 0, "menu_index": 0,
"modified": "2016-03-16 15:02:51.511069", "modified": "2016-03-18 02:03:39.309675",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Purchase Invoice", "name": "Purchase Invoice",

View File

@ -3355,7 +3355,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_on_submit": 1, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"depends_on": "is_recurring", "depends_on": "is_recurring",
@ -3373,7 +3373,7 @@
"permlevel": 0, "permlevel": 0,
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 1, "read_only": 0,
"report_hide": 0, "report_hide": 0,
"reqd": 0, "reqd": 0,
"search_index": 0, "search_index": 0,
@ -3418,7 +3418,7 @@
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"menu_index": 0, "menu_index": 0,
"modified": "2016-03-15 19:02:25.882750", "modified": "2016-03-18 02:03:34.511447",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Sales Invoice", "name": "Sales Invoice",

View File

@ -2657,7 +2657,7 @@
"unique": 0 "unique": 0
}, },
{ {
"allow_on_submit": 1, "allow_on_submit": 0,
"bold": 0, "bold": 0,
"collapsible": 0, "collapsible": 0,
"depends_on": "is_recurring", "depends_on": "is_recurring",
@ -2675,7 +2675,7 @@
"permlevel": 0, "permlevel": 0,
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 1, "read_only": 0,
"report_hide": 0, "report_hide": 0,
"reqd": 0, "reqd": 0,
"search_index": 0, "search_index": 0,
@ -2693,7 +2693,7 @@
"issingle": 0, "issingle": 0,
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"modified": "2016-03-16 15:35:21.382861", "modified": "2016-03-18 02:03:28.445402",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Buying", "module": "Buying",
"name": "Purchase Order", "name": "Purchase Order",

View File

@ -4,7 +4,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe import _, throw from frappe import _, throw
from frappe.utils import today, flt, cint, fmt_money from frappe.utils import today, flt, cint, fmt_money, getdate
from erpnext.setup.utils import get_company_currency, get_exchange_rate from erpnext.setup.utils import get_company_currency, get_exchange_rate
from erpnext.accounts.utils import get_fiscal_year, validate_fiscal_year, get_account_currency from erpnext.accounts.utils import get_fiscal_year, validate_fiscal_year, get_account_currency
from erpnext.utilities.transaction_base import TransactionBase from erpnext.utilities.transaction_base import TransactionBase
@ -31,6 +31,9 @@ class AccountsController(TransactionBase):
self.set_missing_values(for_validate=True) self.set_missing_values(for_validate=True)
self.validate_date_with_fiscal_year() self.validate_date_with_fiscal_year()
if self.meta.get_field('next_date') and self.next_date:
self.validate_recurring_next_date()
if self.meta.get_field("currency"): if self.meta.get_field("currency"):
self.calculate_taxes_and_totals() self.calculate_taxes_and_totals()
if not self.meta.get_field("is_return") or not self.is_return: if not self.meta.get_field("is_return") or not self.is_return:
@ -88,6 +91,14 @@ class AccountsController(TransactionBase):
validate_fiscal_year(self.get(date_field), self.fiscal_year, validate_fiscal_year(self.get(date_field), self.fiscal_year,
self.meta.get_label(date_field), self) self.meta.get_label(date_field), self)
def validate_recurring_next_date(self):
posting_date = self.get("posting_date") or self.get("transaction_date")
if getdate(posting_date) > getdate(self.next_date):
frappe.throw(_("Next Date must be greater than Posting Date"))
if getdate(self.next_date).day != self.repeat_on_day_of_month:
frappe.throw(_("Next Date's day and Repeat on Day of Month must be equal"))
def validate_due_date(self): def validate_due_date(self):
from erpnext.accounts.party import validate_due_date from erpnext.accounts.party import validate_due_date
if self.doctype == "Sales Invoice": if self.doctype == "Sales Invoice":

View File

@ -72,7 +72,7 @@ def manage_recurring_documents(doctype, next_date=None, commit=True):
frappe.throw(exception_message) frappe.throw(exception_message)
def make_new_document(reference_doc, date_field, posting_date): def make_new_document(reference_doc, date_field, posting_date):
new_document = frappe.copy_doc(reference_doc, ignore_no_copy=True) new_document = frappe.copy_doc(reference_doc, ignore_no_copy=False)
mcount = month_map[reference_doc.recurring_type] mcount = month_map[reference_doc.recurring_type]
from_date = get_next_date(reference_doc.from_date, mcount) from_date = get_next_date(reference_doc.from_date, mcount)
@ -89,7 +89,7 @@ def make_new_document(reference_doc, date_field, posting_date):
date_field: posting_date, date_field: posting_date,
"from_date": from_date, "from_date": from_date,
"to_date": to_date, "to_date": to_date,
"next_date": get_next_date(from_date, mcount,cint(reference_doc.repeat_on_day_of_month)) "next_date": get_next_date(reference_doc.next_date, mcount,cint(reference_doc.repeat_on_day_of_month))
}) })
# copy document fields # copy document fields
@ -202,7 +202,7 @@ def set_next_date(doc, posting_date):
if not doc.repeat_on_day_of_month: if not doc.repeat_on_day_of_month:
msgprint(_("Please enter 'Repeat on Day of Month' field value"), raise_exception=1) msgprint(_("Please enter 'Repeat on Day of Month' field value"), raise_exception=1)
next_date = doc.next_date or get_next_date(doc.from_date, month_map[doc.recurring_type], next_date = get_next_date(posting_date, month_map[doc.recurring_type],
cint(doc.repeat_on_day_of_month)) cint(doc.repeat_on_day_of_month))
frappe.db.set(doc, 'next_date', next_date) frappe.db.set(doc, 'next_date', next_date)

View File

@ -2929,32 +2929,6 @@
"set_only_once": 0, "set_only_once": 0,
"unique": 0 "unique": 0
}, },
{
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
"depends_on": "is_recurring",
"description": "",
"fieldname": "to_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "To Date",
"length": 0,
"no_copy": 1,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{ {
"allow_on_submit": 1, "allow_on_submit": 1,
"bold": 0, "bold": 0,
@ -2987,6 +2961,32 @@
"collapsible": 0, "collapsible": 0,
"depends_on": "is_recurring", "depends_on": "is_recurring",
"description": "", "description": "",
"fieldname": "to_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "To Date",
"length": 0,
"no_copy": 1,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"depends_on": "is_recurring",
"description": "",
"fieldname": "next_date", "fieldname": "next_date",
"fieldtype": "Date", "fieldtype": "Date",
"hidden": 0, "hidden": 0,
@ -3000,7 +3000,7 @@
"permlevel": 0, "permlevel": 0,
"print_hide": 1, "print_hide": 1,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 1, "read_only": 0,
"report_hide": 0, "report_hide": 0,
"reqd": 0, "reqd": 0,
"search_index": 0, "search_index": 0,
@ -3018,7 +3018,7 @@
"issingle": 0, "issingle": 0,
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"modified": "2016-03-14 18:36:19.317513", "modified": "2016-03-18 02:03:43.706326",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Selling", "module": "Selling",
"name": "Sales Order", "name": "Sales Order",