diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 49ed12cc24..90f463a38d 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -233,6 +233,41 @@ cur_frm.fields_dict['entries'].grid.get_field('project_name').get_query = functi } + +cur_frm.cscript.is_recurring = function(doc, dt, dn) { + // set default values for recurring invoices + if(doc.is_recurring) { + var owner_email = doc.owner=="Administrator" + ? frappe.user_info("Administrator").email + : doc.owner; + + doc.notification_email_address = $.map([cstr(owner_email), + cstr(doc.contact_email)], function(v) { return v || null; }).join(", "); + doc.repeat_on_day_of_month = frappe.datetime.str_to_obj(doc.posting_date).getDate(); + } + + refresh_many(["notification_email_address", "repeat_on_day_of_month"]); +} + + +cur_frm.cscript.from_date = function(doc, dt, dn) { + // set to_date + if(doc.from_date) { + var recurring_type_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, + 'Yearly': 12}; + + var months = recurring_type_map[doc.recurring_type]; + if(months) { + var to_date = frappe.datetime.add_months(doc.from_date, + months); + doc.to_date = frappe.datetime.add_days(to_date, -1); + refresh_field('to_date'); + } + } +} + + + cur_frm.cscript.select_print_heading = function(doc,cdt,cdn){ if(doc.select_print_heading){ // print heading diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index 9c70892dad..3a45136789 100755 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -1,851 +1,980 @@ { - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2013-05-21 16:16:39", - "docstatus": 0, - "doctype": "DocType", - "fields": [ - { - "fieldname": "supplier_section", - "fieldtype": "Section Break", - "label": "Supplier", - "options": "icon-user", +"allow_import": 1, +"autoname": "naming_series:", +"creation": "2013-05-21 16:16:39", +"docstatus": 0, +"doctype": "DocType", +"fields": [ +{ +"fieldname": "supplier_section", +"fieldtype": "Section Break", +"label": "Supplier", +"options": "icon-user", +"permlevel": 0 +}, +{ +"fieldname": "column_break0", +"fieldtype": "Column Break", +"oldfieldtype": "Column Break", +"permlevel": 0, +"read_only": 0, +"width": "50%" +}, +{ +"fieldname": "naming_series", +"fieldtype": "Select", +"label": "Series", +"no_copy": 1, +"oldfieldname": "naming_series", +"oldfieldtype": "Select", +"options": "PINV-", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"report_hide": 0, +"reqd": 1 +}, +{ +"fieldname": "supplier", +"fieldtype": "Link", +"hidden": 0, +"label": "Supplier", +"oldfieldname": "supplier", +"oldfieldtype": "Link", +"options": "Supplier", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"depends_on": "supplier", +"fieldname": "supplier_name", +"fieldtype": "Data", +"hidden": 0, +"in_list_view": 1, +"label": "Name", +"oldfieldname": "supplier_name", +"oldfieldtype": "Data", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "address_display", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Address", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "contact_display", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Contact", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "contact_mobile", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Mobile No", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "contact_email", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Contact Email", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "column_break1", +"fieldtype": "Column Break", +"oldfieldtype": "Column Break", +"permlevel": 0, +"read_only": 0, +"reqd": 0, +"width": "50%" +}, +{ +"default": "Today", +"fieldname": "posting_date", +"fieldtype": "Date", +"in_filter": 1, +"label": "Date", +"no_copy": 0, +"oldfieldname": "posting_date", +"oldfieldtype": "Date", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"reqd": 1, +"search_index": 1 +}, +{ +"description": "", +"fieldname": "bill_no", +"fieldtype": "Data", +"in_filter": 1, +"label": "Supplier Invoice No", +"oldfieldname": "bill_no", +"oldfieldtype": "Data", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"reqd": 0, +"search_index": 1 +}, +{ +"fieldname": "bill_date", +"fieldtype": "Date", +"in_filter": 1, +"label": "Supplier Invoice Date", +"oldfieldname": "bill_date", +"oldfieldtype": "Date", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"reqd": 0, +"search_index": 1 +}, +{ + "allow_on_submit": 1, + "description": "Start date of current invoice's period", + "fieldname": "from_date", + "fieldtype": "Date", + "label": "From", + "no_copy": 1, "permlevel": 0 }, { - "fieldname": "column_break0", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, - "width": "50%" - }, - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "oldfieldname": "naming_series", - "oldfieldtype": "Select", - "options": "PINV-", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "report_hide": 0, - "reqd": 1 - }, - { - "fieldname": "supplier", - "fieldtype": "Link", - "hidden": 0, - "label": "Supplier", - "oldfieldname": "supplier", - "oldfieldtype": "Link", - "options": "Supplier", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "depends_on": "supplier", - "fieldname": "supplier_name", - "fieldtype": "Data", - "hidden": 0, - "in_list_view": 1, - "label": "Name", - "oldfieldname": "supplier_name", - "oldfieldtype": "Data", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "address_display", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Address", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "contact_display", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Contact", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "contact_mobile", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Mobile No", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "contact_email", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Contact Email", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, - "reqd": 0, - "width": "50%" - }, - { - "default": "Today", - "fieldname": "posting_date", + "allow_on_submit": 1, + "description": "End date of current invoice's period", + "fieldname": "to_date", "fieldtype": "Date", - "in_filter": 1, - "label": "Date", - "no_copy": 0, - "oldfieldname": "posting_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, - "search_index": 1 - }, - { - "description": "", - "fieldname": "bill_no", - "fieldtype": "Data", - "in_filter": 1, - "label": "Supplier Invoice No", - "oldfieldname": "bill_no", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 0, - "search_index": 1 - }, - { - "fieldname": "bill_date", - "fieldtype": "Date", - "in_filter": 1, - "label": "Supplier Invoice Date", - "oldfieldname": "bill_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 0, - "search_index": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Amended From", + "label": "To", "no_copy": 1, - "oldfieldname": "amended_from", - "oldfieldtype": "Link", - "options": "Purchase Invoice", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 + "permlevel": 0 }, { - "fieldname": "company", - "fieldtype": "Link", - "in_filter": 1, - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "search_index": 1 +"fieldname": "amended_from", +"fieldtype": "Link", +"ignore_user_permissions": 1, +"label": "Amended From", +"no_copy": 1, +"oldfieldname": "amended_from", +"oldfieldtype": "Link", +"options": "Purchase Invoice", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "company", +"fieldtype": "Link", +"in_filter": 1, +"label": "Company", +"oldfieldname": "company", +"oldfieldtype": "Link", +"options": "Company", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"search_index": 1 +}, +{ +"fieldname": "currency_price_list", +"fieldtype": "Section Break", +"label": "Currency and Price List", +"options": "icon-tag", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "currency", +"fieldtype": "Link", +"label": "Currency", +"oldfieldname": "currency", +"oldfieldtype": "Select", +"options": "Currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"description": "The rate at which Bill Currency is converted into company's base currency", +"fieldname": "conversion_rate", +"fieldtype": "Float", +"label": "Exchange Rate", +"oldfieldname": "conversion_rate", +"oldfieldtype": "Currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "column_break2", +"fieldtype": "Column Break", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "buying_price_list", +"fieldtype": "Link", +"label": "Price List", +"options": "Price List", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "price_list_currency", +"fieldtype": "Link", +"label": "Price List Currency", +"options": "Currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "plc_conversion_rate", +"fieldtype": "Float", +"label": "Price List Exchange Rate", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "ignore_pricing_rule", +"fieldtype": "Check", +"label": "Ignore Pricing Rule", +"no_copy": 1, +"permlevel": 1, +"print_hide": 1 +}, +{ +"fieldname": "items", +"fieldtype": "Section Break", +"label": "Items", +"oldfieldtype": "Section Break", +"options": "icon-shopping-cart", +"permlevel": 0, +"read_only": 0 +}, +{ +"allow_on_submit": 1, +"fieldname": "entries", +"fieldtype": "Table", +"label": "Entries", +"oldfieldname": "entries", +"oldfieldtype": "Table", +"options": "Purchase Invoice Item", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "section_break_26", +"fieldtype": "Section Break", +"permlevel": 0 +}, +{ +"description": "Will be calculated automatically when you enter the details", +"fieldname": "net_total", +"fieldtype": "Currency", +"label": "Net Total (Company Currency)", +"oldfieldname": "net_total", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "column_break_28", +"fieldtype": "Column Break", +"permlevel": 0 +}, +{ +"fieldname": "net_total_import", +"fieldtype": "Currency", +"label": "Net Total", +"oldfieldname": "net_total_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 0, +"read_only": 1 +}, +{ +"fieldname": "taxes", +"fieldtype": "Section Break", +"label": "Taxes and Charges", +"oldfieldtype": "Section Break", +"options": "icon-money", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "taxes_and_charges", +"fieldtype": "Link", +"label": "Taxes and Charges", +"oldfieldname": "purchase_other_charges", +"oldfieldtype": "Link", +"options": "Purchase Taxes and Charges Master", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "other_charges", +"fieldtype": "Table", +"label": "Purchase Taxes and Charges", +"oldfieldname": "purchase_tax_details", +"oldfieldtype": "Table", +"options": "Purchase Taxes and Charges", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "other_charges_calculation", +"fieldtype": "HTML", +"label": "Taxes and Charges Calculation", +"oldfieldtype": "HTML", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "totals", +"fieldtype": "Section Break", +"label": "Totals", +"oldfieldtype": "Section Break", +"options": "icon-money", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "other_charges_added", +"fieldtype": "Currency", +"label": "Taxes and Charges Added (Company Currency)", +"oldfieldname": "other_charges_added", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "other_charges_deducted", +"fieldtype": "Currency", +"label": "Taxes and Charges Deducted (Company Currency)", +"oldfieldname": "other_charges_deducted", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "grand_total", +"fieldtype": "Currency", +"label": "Grand Total (Company Currency)", +"oldfieldname": "grand_total", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"description": "In Words will be visible once you save the Purchase Invoice.", +"fieldname": "in_words", +"fieldtype": "Data", +"label": "In Words (Company Currency)", +"oldfieldname": "in_words", +"oldfieldtype": "Data", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "column_break8", +"fieldtype": "Column Break", +"oldfieldtype": "Column Break", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"width": "50%" +}, +{ +"fieldname": "other_charges_added_import", +"fieldtype": "Currency", +"label": "Taxes and Charges Added", +"oldfieldname": "other_charges_added_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "other_charges_deducted_import", +"fieldtype": "Currency", +"label": "Taxes and Charges Deducted", +"oldfieldname": "other_charges_deducted_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "grand_total_import", +"fieldtype": "Currency", +"in_list_view": 1, +"label": "Grand Total", +"oldfieldname": "grand_total_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 0, +"read_only": 1 +}, +{ +"fieldname": "in_words_import", +"fieldtype": "Data", +"label": "In Words", +"oldfieldname": "in_words_import", +"oldfieldtype": "Data", +"permlevel": 0, +"print_hide": 0, +"read_only": 1 +}, +{ +"fieldname": "total_amount_to_pay", +"fieldtype": "Currency", +"hidden": 0, +"label": "Total Amount To Pay", +"no_copy": 1, +"oldfieldname": "total_amount_to_pay", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "total_advance", +"fieldtype": "Currency", +"label": "Total Advance", +"no_copy": 1, +"oldfieldname": "total_advance", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "total_tax", +"fieldtype": "Currency", +"label": "Total Tax (Company Currency)", +"oldfieldname": "total_tax", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "outstanding_amount", +"fieldtype": "Currency", +"in_filter": 1, +"in_list_view": 1, +"label": "Outstanding Amount", +"no_copy": 1, +"oldfieldname": "outstanding_amount", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1, +"search_index": 1 +}, +{ +"fieldname": "write_off_amount", +"fieldtype": "Currency", +"label": "Write Off Amount", +"no_copy": 1, +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"depends_on": "eval:flt(doc.write_off_amount)!=0", +"fieldname": "write_off_account", +"fieldtype": "Link", +"label": "Write Off Account", +"no_copy": 1, +"options": "Account", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"depends_on": "eval:flt(doc.write_off_amount)!=0", +"fieldname": "write_off_cost_center", +"fieldtype": "Link", +"label": "Write Off Cost Center", +"no_copy": 1, +"options": "Cost Center", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "against_expense_account", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Against Expense Account", +"no_copy": 1, +"oldfieldname": "against_expense_account", +"oldfieldtype": "Small Text", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"report_hide": 0 +}, +{ +"fieldname": "fold", +"fieldtype": "Fold", +"permlevel": 0 +}, +{ +"fieldname": "advances", +"fieldtype": "Section Break", +"label": "Advances", +"oldfieldtype": "Section Break", +"options": "icon-money", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "get_advances_paid", +"fieldtype": "Button", +"label": "Get Advances Paid", +"oldfieldtype": "Button", +"options": "get_advances", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "advance_allocation_details", +"fieldtype": "Table", +"label": "Purchase Invoice Advances", +"no_copy": 1, +"oldfieldname": "advance_allocation_details", +"oldfieldtype": "Table", +"options": "Purchase Invoice Advance", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "terms_section_break", +"fieldtype": "Section Break", +"label": "Terms and Conditions", +"options": "icon-legal", +"permlevel": 0 +}, +{ +"fieldname": "tc_name", +"fieldtype": "Link", +"label": "Terms", +"options": "Terms and Conditions", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "terms", +"fieldtype": "Text Editor", +"label": "Terms and Conditions1", +"permlevel": 0 +}, +{ +"depends_on": "supplier", +"fieldname": "contact_section", +"fieldtype": "Section Break", +"label": "Contact Info", +"options": "icon-bullhorn", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "supplier_address", +"fieldtype": "Link", +"label": "Supplier Address", +"options": "Address", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "col_break23", +"fieldtype": "Column Break", +"permlevel": 0, +"read_only": 0, +"width": "50%" +}, +{ +"fieldname": "contact_person", +"fieldtype": "Link", +"label": "Contact Person", +"options": "Contact", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"fieldname": "more_info", +"fieldtype": "Section Break", +"label": "More Info", +"oldfieldtype": "Section Break", +"options": "icon-file-text", +"permlevel": 0, +"print_hide": 1, +"read_only": 0 +}, +{ +"description": "Supplier (Payable) Account", +"fieldname": "credit_to", +"fieldtype": "Link", +"in_filter": 1, +"label": "Credit To", +"oldfieldname": "credit_to", +"oldfieldtype": "Link", +"options": "Account", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"reqd": 1, +"search_index": 1 +}, +{ +"default": "No", +"description": "Considered as Opening Balance", +"fieldname": "is_opening", +"fieldtype": "Select", +"in_filter": 1, +"label": "Is Opening", +"oldfieldname": "is_opening", +"oldfieldtype": "Select", +"options": "No\nYes", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"search_index": 1 +}, +{ +"description": "Actual Invoice Date", +"fieldname": "aging_date", +"fieldtype": "Date", +"label": "Aging Date", +"oldfieldname": "aging_date", +"oldfieldtype": "Date", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"search_index": 0 +}, +{ +"allow_on_submit": 1, +"fieldname": "select_print_heading", +"fieldtype": "Link", +"label": "Print Heading", +"no_copy": 1, +"oldfieldname": "select_print_heading", +"oldfieldtype": "Link", +"options": "Print Heading", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"report_hide": 1 +}, +{ +"fieldname": "due_date", +"fieldtype": "Date", +"in_filter": 1, +"label": "Due Date", +"no_copy": 0, +"oldfieldname": "due_date", +"oldfieldtype": "Date", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"search_index": 1 +}, +{ +"fieldname": "mode_of_payment", +"fieldtype": "Link", +"label": "Mode of Payment", +"oldfieldname": "mode_of_payment", +"oldfieldtype": "Select", +"options": "Mode of Payment", +"permlevel": 0, +"read_only": 0 +}, +{ +"fieldname": "column_break_63", +"fieldtype": "Column Break", +"permlevel": 0, +"read_only": 0 +}, +{ +"allow_on_submit": 1, +"fieldname": "letter_head", +"fieldtype": "Link", +"label": "Letter Head", +"options": "Letter Head", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "fiscal_year", +"fieldtype": "Link", +"in_filter": 1, +"label": "Fiscal Year", +"oldfieldname": "fiscal_year", +"oldfieldtype": "Select", +"options": "Fiscal Year", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"search_index": 1 +}, +{ +"fieldname": "remarks", +"fieldtype": "Small Text", +"label": "Remarks", +"no_copy": 1, +"oldfieldname": "remarks", +"oldfieldtype": "Text", +"permlevel": 0, +"print_hide": 1, +"read_only": 0, +"reqd": 0 }, { - "fieldname": "currency_price_list", + "depends_on": "eval:doc.docstatus<2", + "fieldname": "recurring_invoice", "fieldtype": "Section Break", - "label": "Currency and Price List", - "options": "icon-tag", + "label": "Recurring Invoice", + "options": "icon-time", "permlevel": 0, - "read_only": 0 + "print_hide": 1 }, { - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "oldfieldname": "currency", - "oldfieldtype": "Select", - "options": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "description": "The rate at which Bill Currency is converted into company's base currency", - "fieldname": "conversion_rate", - "fieldtype": "Float", - "label": "Exchange Rate", - "oldfieldname": "conversion_rate", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "column_break2", + "fieldname": "column_break_77", "fieldtype": "Column Break", "permlevel": 0, - "read_only": 0 - }, - { - "fieldname": "buying_price_list", - "fieldtype": "Link", - "label": "Price List", - "options": "Price List", - "permlevel": 0, "print_hide": 1, - "read_only": 0 + "width": "50%" }, { - "fieldname": "price_list_currency", - "fieldtype": "Link", - "label": "Price List Currency", - "options": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "plc_conversion_rate", - "fieldtype": "Float", - "label": "Price List Exchange Rate", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "ignore_pricing_rule", + "allow_on_submit": 1, + "depends_on": "eval:doc.docstatus<2", + "description": "Check if recurring invoice, uncheck to stop recurring or put proper End Date", + "fieldname": "is_recurring", "fieldtype": "Check", - "label": "Ignore Pricing Rule", + "label": "Is Recurring", "no_copy": 1, - "permlevel": 1, + "permlevel": 0, "print_hide": 1 }, { - "fieldname": "items", - "fieldtype": "Section Break", - "label": "Items", - "oldfieldtype": "Section Break", - "options": "icon-shopping-cart", + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "Select the period when the invoice will be generated automatically", + "fieldname": "recurring_type", + "fieldtype": "Select", + "label": "Recurring Type", + "no_copy": 1, + "options": "Monthly\nQuarterly\nHalf-yearly\nYearly", "permlevel": 0, - "read_only": 0 + "print_hide": 1 }, { "allow_on_submit": 1, - "fieldname": "entries", - "fieldtype": "Table", - "label": "Entries", - "oldfieldname": "entries", - "oldfieldtype": "Table", - "options": "Purchase Invoice Item", + "depends_on": "eval:doc.is_recurring==1", + "description": "The day of the month on which auto invoice will be generated e.g. 05, 28 etc", + "fieldname": "repeat_on_day_of_month", + "fieldtype": "Int", + "label": "Repeat on Day of Month", + "no_copy": 1, "permlevel": 0, - "read_only": 0 + "print_hide": 1 }, { - "fieldname": "section_break_26", - "fieldtype": "Section Break", - "permlevel": 0 - }, - { - "description": "Will be calculated automatically when you enter the details", - "fieldname": "net_total", - "fieldtype": "Currency", - "label": "Net Total (Company Currency)", - "oldfieldname": "net_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", + "depends_on": "eval:doc.is_recurring==1", + "description": "The date on which next invoice will be generated. It is generated on submit.", + "fieldname": "next_date", + "fieldtype": "Date", + "label": "Next Date", + "no_copy": 1, "permlevel": 0, "print_hide": 1, "read_only": 1 }, { - "fieldname": "column_break_28", + "fieldname": "column_break_82", "fieldtype": "Column Break", - "permlevel": 0 - }, - { - "fieldname": "net_total_import", - "fieldtype": "Currency", - "label": "Net Total", - "oldfieldname": "net_total_import", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "read_only": 1 - }, - { - "fieldname": "taxes", - "fieldtype": "Section Break", - "label": "Taxes and Charges", - "oldfieldtype": "Section Break", - "options": "icon-money", - "permlevel": 0, - "read_only": 0 - }, - { - "fieldname": "taxes_and_charges", - "fieldtype": "Link", - "label": "Taxes and Charges", - "oldfieldname": "purchase_other_charges", - "oldfieldtype": "Link", - "options": "Purchase Taxes and Charges Master", "permlevel": 0, "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "other_charges", - "fieldtype": "Table", - "label": "Purchase Taxes and Charges", - "oldfieldname": "purchase_tax_details", - "oldfieldtype": "Table", - "options": "Purchase Taxes and Charges", - "permlevel": 0, - "read_only": 0 - }, - { - "fieldname": "other_charges_calculation", - "fieldtype": "HTML", - "label": "Taxes and Charges Calculation", - "oldfieldtype": "HTML", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "totals", - "fieldtype": "Section Break", - "label": "Totals", - "oldfieldtype": "Section Break", - "options": "icon-money", - "permlevel": 0, - "read_only": 0 - }, - { - "fieldname": "other_charges_added", - "fieldtype": "Currency", - "label": "Taxes and Charges Added (Company Currency)", - "oldfieldname": "other_charges_added", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "other_charges_deducted", - "fieldtype": "Currency", - "label": "Taxes and Charges Deducted (Company Currency)", - "oldfieldname": "other_charges_deducted", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "grand_total", - "fieldtype": "Currency", - "label": "Grand Total (Company Currency)", - "oldfieldname": "grand_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "description": "In Words will be visible once you save the Purchase Invoice.", - "fieldname": "in_words", - "fieldtype": "Data", - "label": "In Words (Company Currency)", - "oldfieldname": "in_words", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break8", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, "width": "50%" }, { - "fieldname": "other_charges_added_import", - "fieldtype": "Currency", - "label": "Taxes and Charges Added", - "oldfieldname": "other_charges_added_import", - "oldfieldtype": "Currency", - "options": "currency", + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "The date on which recurring invoice will be stop", + "fieldname": "end_date", + "fieldtype": "Date", + "label": "End Date", + "no_copy": 1, "permlevel": 0, - "print_hide": 1, - "read_only": 1 + "print_hide": 1 }, { - "fieldname": "other_charges_deducted_import", - "fieldtype": "Currency", - "label": "Taxes and Charges Deducted", - "oldfieldname": "other_charges_deducted_import", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "grand_total_import", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Grand Total", - "oldfieldname": "grand_total_import", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "read_only": 1 - }, - { - "fieldname": "in_words_import", + "depends_on": "eval:doc.is_recurring==1", + "description": "The unique id for tracking all recurring invoices. It is generated on submit.", + "fieldname": "recurring_id", "fieldtype": "Data", - "label": "In Words", - "oldfieldname": "in_words_import", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "read_only": 1 - }, - { - "fieldname": "total_amount_to_pay", - "fieldtype": "Currency", - "hidden": 0, - "label": "Total Amount To Pay", + "label": "Recurring Id", "no_copy": 1, - "oldfieldname": "total_amount_to_pay", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", "permlevel": 0, "print_hide": 1, "read_only": 1 }, { - "fieldname": "total_advance", - "fieldtype": "Currency", - "label": "Total Advance", + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "Enter email id separated by commas, invoice will be mailed automatically on particular date", + "fieldname": "notification_email_address", + "fieldtype": "Small Text", + "label": "Notification Email Address", "no_copy": 1, - "oldfieldname": "total_advance", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", "permlevel": 0, - "print_hide": 1, - "read_only": 1 + "print_hide": 1 }, { - "fieldname": "total_tax", - "fieldtype": "Currency", - "label": "Total Tax (Company Currency)", - "oldfieldname": "total_tax", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "outstanding_amount", - "fieldtype": "Currency", - "in_filter": 1, - "in_list_view": 1, - "label": "Outstanding Amount", - "no_copy": 1, - "oldfieldname": "outstanding_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "search_index": 1 - }, - { - "fieldname": "write_off_amount", - "fieldtype": "Currency", - "label": "Write Off Amount", - "no_copy": 1, - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "depends_on": "eval:flt(doc.write_off_amount)!=0", - "fieldname": "write_off_account", - "fieldtype": "Link", - "label": "Write Off Account", - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "depends_on": "eval:flt(doc.write_off_amount)!=0", - "fieldname": "write_off_cost_center", - "fieldtype": "Link", - "label": "Write Off Cost Center", - "no_copy": 1, - "options": "Cost Center", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "against_expense_account", + "fieldname": "against_income_account", "fieldtype": "Small Text", "hidden": 1, - "label": "Against Expense Account", + "label": "Against Income Account", "no_copy": 1, - "oldfieldname": "against_expense_account", - "oldfieldtype": "Small Text", "permlevel": 0, "print_hide": 1, - "read_only": 0, - "report_hide": 0 - }, - { - "fieldname": "fold", - "fieldtype": "Fold", - "permlevel": 0 - }, - { - "fieldname": "advances", - "fieldtype": "Section Break", - "label": "Advances", - "oldfieldtype": "Section Break", - "options": "icon-money", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "get_advances_paid", - "fieldtype": "Button", - "label": "Get Advances Paid", - "oldfieldtype": "Button", - "options": "get_advances", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "advance_allocation_details", - "fieldtype": "Table", - "label": "Purchase Invoice Advances", - "no_copy": 1, - "oldfieldname": "advance_allocation_details", - "oldfieldtype": "Table", - "options": "Purchase Invoice Advance", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "terms_section_break", - "fieldtype": "Section Break", - "label": "Terms and Conditions", - "options": "icon-legal", - "permlevel": 0 - }, - { - "fieldname": "tc_name", - "fieldtype": "Link", - "label": "Terms", - "options": "Terms and Conditions", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "terms", - "fieldtype": "Text Editor", - "label": "Terms and Conditions1", - "permlevel": 0 - }, - { - "depends_on": "supplier", - "fieldname": "contact_section", - "fieldtype": "Section Break", - "label": "Contact Info", - "options": "icon-bullhorn", - "permlevel": 0, - "read_only": 0 - }, - { - "fieldname": "supplier_address", - "fieldtype": "Link", - "label": "Supplier Address", - "options": "Address", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "col_break23", - "fieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, - "width": "50%" - }, - { - "fieldname": "contact_person", - "fieldtype": "Link", - "label": "Contact Person", - "options": "Contact", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "fieldname": "more_info", - "fieldtype": "Section Break", - "label": "More Info", - "oldfieldtype": "Section Break", - "options": "icon-file-text", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "description": "Supplier (Payable) Account", - "fieldname": "credit_to", - "fieldtype": "Link", - "in_filter": 1, - "label": "Credit To", - "oldfieldname": "credit_to", - "oldfieldtype": "Link", - "options": "Account", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 1, - "search_index": 1 - }, - { - "default": "No", - "description": "Considered as Opening Balance", - "fieldname": "is_opening", - "fieldtype": "Select", - "in_filter": 1, - "label": "Is Opening", - "oldfieldname": "is_opening", - "oldfieldtype": "Select", - "options": "No\nYes", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "search_index": 1 - }, - { - "description": "Actual Invoice Date", - "fieldname": "aging_date", - "fieldtype": "Date", - "label": "Aging Date", - "oldfieldname": "aging_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "search_index": 0 - }, - { - "allow_on_submit": 1, - "fieldname": "select_print_heading", - "fieldtype": "Link", - "label": "Print Heading", - "no_copy": 1, - "oldfieldname": "select_print_heading", - "oldfieldtype": "Link", - "options": "Print Heading", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, "report_hide": 1 - }, - { - "fieldname": "due_date", - "fieldtype": "Date", - "in_filter": 1, - "label": "Due Date", - "no_copy": 0, - "oldfieldname": "due_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "search_index": 1 - }, - { - "fieldname": "mode_of_payment", - "fieldtype": "Link", - "label": "Mode of Payment", - "oldfieldname": "mode_of_payment", - "oldfieldtype": "Select", - "options": "Mode of Payment", - "permlevel": 0, - "read_only": 0 - }, - { - "fieldname": "column_break_63", - "fieldtype": "Column Break", - "permlevel": 0, - "read_only": 0 - }, - { - "allow_on_submit": 1, - "fieldname": "letter_head", - "fieldtype": "Link", - "label": "Letter Head", - "options": "Letter Head", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "fiscal_year", - "fieldtype": "Link", - "in_filter": 1, - "label": "Fiscal Year", - "oldfieldname": "fiscal_year", - "oldfieldtype": "Select", - "options": "Fiscal Year", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "search_index": 1 - }, - { - "fieldname": "remarks", - "fieldtype": "Small Text", - "label": "Remarks", - "no_copy": 1, - "oldfieldname": "remarks", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 1, - "read_only": 0, - "reqd": 0 - } - ], - "icon": "icon-file-text", - "idx": 1, - "is_submittable": 1, - "modified": "2014-09-09 05:35:32.156763", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Purchase Invoice", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "apply_user_permissions": 1, - "cancel": 1, - "create": 1, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts User", - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 1, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase User", - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "apply_user_permissions": 1, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Supplier", - "submit": 0, - "write": 0 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 1, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Auditor", - "submit": 0, - "write": 0 - }, - { - "permlevel": 1, - "read": 1, - "role": "Accounts Manager", - "write": 1 - } - ], - "read_only_onload": 1, - "search_fields": "posting_date, credit_to, fiscal_year, bill_no, grand_total, outstanding_amount", - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file +} +], +"icon": "icon-file-text", +"idx": 1, +"is_submittable": 1, +"modified": "2014-09-09 05:35:32.156763", +"modified_by": "Administrator", +"module": "Accounts", +"name": "Purchase Invoice", +"owner": "Administrator", +"permissions": [ +{ +"amend": 1, +"apply_user_permissions": 1, +"cancel": 1, +"create": 1, +"delete": 0, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Accounts User", +"submit": 1, +"write": 1 +}, +{ +"amend": 0, +"apply_user_permissions": 1, +"cancel": 0, +"create": 0, +"delete": 0, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Purchase User", +"submit": 0, +"write": 0 +}, +{ +"amend": 0, +"apply_user_permissions": 1, +"cancel": 0, +"create": 0, +"delete": 0, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Supplier", +"submit": 0, +"write": 0 +}, +{ +"amend": 1, +"cancel": 1, +"create": 1, +"delete": 1, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Accounts Manager", +"submit": 1, +"write": 1 +}, +{ +"amend": 0, +"apply_user_permissions": 1, +"cancel": 0, +"create": 0, +"delete": 0, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Auditor", +"submit": 0, +"write": 0 +}, +{ +"permlevel": 1, +"read": 1, +"role": "Accounts Manager", +"write": 1 +} +], +"read_only_onload": 1, +"search_fields": "posting_date, credit_to, fiscal_year, bill_no, grand_total, outstanding_amount", +"sort_field": "modified", +"sort_order": "DESC" +} diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 956dacb55f..6a41bbab39 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -4,7 +4,10 @@ from __future__ import unicode_literals import frappe -from frappe.utils import cint, cstr, flt, formatdate + +from frappe.utils import add_days, cint, cstr, date_diff, formatdate, flt, getdate, nowdate, \ + get_first_day, get_last_day +from frappe.model.naming import make_autoname from frappe import msgprint, _, throw from erpnext.setup.utils import get_company_currency @@ -14,6 +17,8 @@ import frappe.defaults from erpnext.controllers.buying_controller import BuyingController from erpnext.accounts.party import get_party_account, get_due_date +from erpnext.controllers.recurring_document import * + form_grid_templates = { "entries": "templates/form_grid/item_grid.html" } @@ -61,6 +66,7 @@ class PurchaseInvoice(BuyingController): self.validate_multiple_billing("Purchase Receipt", "pr_detail", "amount", "purchase_receipt_details") self.create_remarks() + validate_recurring_document(self) def create_remarks(self): if not self.remarks: @@ -259,6 +265,11 @@ class PurchaseInvoice(BuyingController): self.update_against_document_in_jv() self.update_prevdoc_status() self.update_billing_status_for_zero_amount_refdoc("Purchase Order") + convert_to_recurring(self, self.posting_date) + + def on_update_after_submit(self): + validate_recurring_document(self) + convert_to_recurring(self, self.posting_date) def make_gl_entries(self): auto_accounting_for_stock = \ diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 20d20d7cfc..6c5f951caf 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -104,7 +104,7 @@ class SalesInvoice(SellingController): self.update_against_document_in_jv() self.update_time_log_batch(self.name) - convert_to_recurring(self, "RECINV.#####", self.posting_date) + convert_to_recurring(self, self.posting_date) def before_cancel(self): self.update_time_log_batch(None) @@ -147,7 +147,7 @@ class SalesInvoice(SellingController): def on_update_after_submit(self): validate_recurring_document(self) - convert_to_recurring(self, "RECINV.#####", self.posting_date) + convert_to_recurring(self, self.posting_date) def before_recurring(self): self.aging_date = None diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index 9433ebe20c..549584500f 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -206,6 +206,39 @@ cur_frm.cscript.on_submit = function(doc, cdt, cdn) { } } + +cur_frm.cscript.is_recurring = function(doc, dt, dn) { + // set default values for recurring orders + if(doc.is_recurring) { + var owner_email = doc.owner=="Administrator" + ? frappe.user_info("Administrator").email + : doc.owner; + + doc.notification_email_address = $.map([cstr(owner_email), + cstr(doc.contact_email)], function(v) { return v || null; }).join(", "); + doc.repeat_on_day_of_month = frappe.datetime.str_to_obj(doc.posting_date).getDate(); + } + + refresh_many(["notification_email_address", "repeat_on_day_of_month"]); +} + +cur_frm.cscript.from_date = function(doc, dt, dn) { + // set to_date + if(doc.from_date) { + var recurring_type_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, + 'Yearly': 12}; + + var months = recurring_type_map[doc.recurring_type]; + if(months) { + var to_date = frappe.datetime.add_months(doc.from_date, + months); + doc.to_date = frappe.datetime.add_days(to_date, -1); + refresh_field('to_date'); + } + } +} + + cur_frm.cscript.send_sms = function() { frappe.require("assets/erpnext/js/sms_manager.js"); var sms_man = new SMSManager(cur_frm.doc); diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 2224db7ca2..7843fb7f57 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -1,732 +1,856 @@ { - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2013-05-21 16:16:39", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Transaction", - "fields": [ - { - "fieldname": "supplier_section", - "fieldtype": "Section Break", - "label": "Supplier", - "options": "icon-user", +"allow_import": 1, +"autoname": "naming_series:", +"creation": "2013-05-21 16:16:39", +"docstatus": 0, +"doctype": "DocType", +"document_type": "Transaction", +"fields": [ +{ +"fieldname": "supplier_section", +"fieldtype": "Section Break", +"label": "Supplier", +"options": "icon-user", +"permlevel": 0 +}, +{ +"fieldname": "naming_series", +"fieldtype": "Select", +"label": "Series", +"no_copy": 1, +"oldfieldname": "naming_series", +"oldfieldtype": "Select", +"options": "PO-", +"permlevel": 0, +"print_hide": 1, +"reqd": 1 +}, +{ +"description": "Supplier (vendor) name as entered in supplier master", +"fieldname": "supplier", +"fieldtype": "Link", +"in_filter": 1, +"label": "Supplier", +"oldfieldname": "supplier", +"oldfieldtype": "Link", +"options": "Supplier", +"permlevel": 0, +"print_hide": 1, +"reqd": 1, +"search_index": 1 +}, +{ +"fieldname": "supplier_name", +"fieldtype": "Data", +"hidden": 0, +"in_list_view": 1, +"label": "Name", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "address_display", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Address", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "contact_display", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Contact", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "contact_mobile", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Mobile No", +"permlevel": 0, +"read_only": 1 +}, +{ +"fieldname": "contact_email", +"fieldtype": "Small Text", +"hidden": 1, +"label": "Contact Email", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "column_break1", +"fieldtype": "Column Break", +"oldfieldtype": "Column Break", +"permlevel": 0, +"print_hide": 0, +"print_width": "50%", +"width": "50%" +}, +{ +"fieldname": "transaction_date", +"fieldtype": "Date", +"in_filter": 1, +"label": "Date", +"oldfieldname": "transaction_date", +"oldfieldtype": "Date", +"permlevel": 0, +"reqd": 1, +"search_index": 1 +}, +{ +"allow_on_submit": 1, + "description": "Start date of current order's period", + "fieldname": "from_date", + "fieldtype": "Date", + "label": "From", + "no_copy": 1, "permlevel": 0 - }, + }, { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "oldfieldname": "naming_series", - "oldfieldtype": "Select", - "options": "PO-", - "permlevel": 0, - "print_hide": 1, - "reqd": 1 - }, - { - "description": "Supplier (vendor) name as entered in supplier master", - "fieldname": "supplier", - "fieldtype": "Link", - "in_filter": 1, - "label": "Supplier", - "oldfieldname": "supplier", - "oldfieldtype": "Link", - "options": "Supplier", - "permlevel": 0, - "print_hide": 1, - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "supplier_name", - "fieldtype": "Data", - "hidden": 0, - "in_list_view": 1, - "label": "Name", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "address_display", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Address", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "contact_display", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Contact", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "contact_mobile", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Mobile No", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "contact_email", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Contact Email", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0, - "print_width": "50%", - "width": "50%" - }, - { - "fieldname": "transaction_date", - "fieldtype": "Date", - "in_filter": 1, - "label": "Date", - "oldfieldname": "transaction_date", - "oldfieldtype": "Date", - "permlevel": 0, - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "oldfieldname": "amended_from", - "oldfieldtype": "Data", - "options": "Purchase Order", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "report_hide": 0 - }, - { - "description": "Select the relevant company name if you have multiple companies", - "fieldname": "company", - "fieldtype": "Link", - "in_filter": 1, - "label": "Company", - "no_copy": 0, - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "print_hide": 1, - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "price_list_and_currency", - "fieldtype": "Section Break", - "label": "Currency and Price List", - "options": "icon-tag", + "allow_on_submit": 1, + "description": "End date of current order's period", + "fieldname": "to_date", + "fieldtype": "Date", + "label": "To", + "no_copy": 1, "permlevel": 0 - }, + }, { - "fieldname": "cb_currency", - "fieldtype": "Column Break", +"fieldname": "amended_from", +"fieldtype": "Link", +"hidden": 0, +"ignore_user_permissions": 1, +"label": "Amended From", +"no_copy": 1, +"oldfieldname": "amended_from", +"oldfieldtype": "Data", +"options": "Purchase Order", +"permlevel": 0, +"print_hide": 1, +"read_only": 1, +"report_hide": 0 +}, +{ +"description": "Select the relevant company name if you have multiple companies", +"fieldname": "company", +"fieldtype": "Link", +"in_filter": 1, +"label": "Company", +"no_copy": 0, +"oldfieldname": "company", +"oldfieldtype": "Link", +"options": "Company", +"permlevel": 0, +"print_hide": 1, +"reqd": 1, +"search_index": 1 +}, +{ +"fieldname": "price_list_and_currency", +"fieldtype": "Section Break", +"label": "Currency and Price List", +"options": "icon-tag", +"permlevel": 0 +}, +{ +"fieldname": "cb_currency", +"fieldtype": "Column Break", +"permlevel": 0 +}, +{ +"fieldname": "currency", +"fieldtype": "Link", +"label": "Currency", +"no_copy": 0, +"oldfieldname": "currency", +"oldfieldtype": "Select", +"options": "Currency", +"permlevel": 0, +"print_hide": 1, +"reqd": 1 +}, +{ +"description": "Rate at which supplier's currency is converted to company's base currency", +"fieldname": "conversion_rate", +"fieldtype": "Float", +"hidden": 0, +"label": "Exchange Rate", +"no_copy": 0, +"oldfieldname": "conversion_rate", +"oldfieldtype": "Currency", +"permlevel": 0, +"print_hide": 1, +"reqd": 1 +}, +{ +"fieldname": "cb_price_list", +"fieldtype": "Column Break", +"permlevel": 0 +}, +{ +"fieldname": "buying_price_list", +"fieldtype": "Link", +"label": "Price List", +"options": "Price List", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "price_list_currency", +"fieldtype": "Link", +"label": "Price List Currency", +"options": "Currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "plc_conversion_rate", +"fieldtype": "Float", +"label": "Price List Exchange Rate", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "ignore_pricing_rule", +"fieldtype": "Check", +"label": "Ignore Pricing Rule", +"no_copy": 1, +"permlevel": 1, +"print_hide": 1 +}, +{ +"fieldname": "items", +"fieldtype": "Section Break", +"label": "Items", +"oldfieldtype": "Section Break", +"options": "icon-shopping-cart", +"permlevel": 0 +}, +{ +"allow_on_submit": 1, +"fieldname": "po_details", +"fieldtype": "Table", +"label": "Purchase Order Items", +"no_copy": 0, +"oldfieldname": "po_details", +"oldfieldtype": "Table", +"options": "Purchase Order Item", +"permlevel": 0 +}, +{ +"fieldname": "sb_last_purchase", +"fieldtype": "Section Break", +"permlevel": 0 +}, +{ +"fieldname": "net_total", +"fieldtype": "Currency", +"label": "Net Total (Company Currency)", +"no_copy": 1, +"oldfieldname": "net_total", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1, +"reqd": 0 +}, +{ +"fieldname": "column_break_26", +"fieldtype": "Column Break", +"permlevel": 0 +}, +{ +"fieldname": "net_total_import", +"fieldtype": "Currency", +"label": "Net Total", +"no_copy": 0, +"oldfieldname": "net_total_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 0, +"read_only": 1 +}, +{ +"fieldname": "get_last_purchase_rate", +"fieldtype": "Button", +"label": "Get Last Purchase Rate", +"oldfieldtype": "Button", +"permlevel": 0, +"print_hide": 0 +}, +{ +"fieldname": "taxes", +"fieldtype": "Section Break", +"label": "Taxes and Charges", +"oldfieldtype": "Section Break", +"options": "icon-money", +"permlevel": 0, +"print_hide": 0 +}, +{ +"description": "If you have created a standard template in Purchase Taxes and Charges Master, select one and click on the button below.", +"fieldname": "taxes_and_charges", +"fieldtype": "Link", +"label": "Taxes and Charges", +"no_copy": 0, +"oldfieldname": "purchase_other_charges", +"oldfieldtype": "Link", +"options": "Purchase Taxes and Charges Master", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "other_charges", +"fieldtype": "Table", +"label": "Purchase Taxes and Charges", +"no_copy": 0, +"oldfieldname": "purchase_tax_details", +"oldfieldtype": "Table", +"options": "Purchase Taxes and Charges", +"permlevel": 0 +}, +{ +"fieldname": "other_charges_calculation", +"fieldtype": "HTML", +"label": "Taxes and Charges Calculation", +"no_copy": 1, +"oldfieldtype": "HTML", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "totals", +"fieldtype": "Section Break", +"label": "Totals", +"oldfieldtype": "Section Break", +"options": "icon-money", +"permlevel": 0 +}, +{ +"fieldname": "other_charges_added", +"fieldtype": "Currency", +"label": "Taxes and Charges Added (Company Currency)", +"no_copy": 0, +"oldfieldname": "other_charges_added", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "other_charges_deducted", +"fieldtype": "Currency", +"label": "Taxes and Charges Deducted (Company Currency)", +"no_copy": 0, +"oldfieldname": "other_charges_deducted", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "total_tax", +"fieldtype": "Currency", +"label": "Total Tax (Company Currency)", +"no_copy": 1, +"oldfieldname": "total_tax", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "grand_total", +"fieldtype": "Currency", +"label": "Grand Total (Company Currency)", +"no_copy": 1, +"oldfieldname": "grand_total", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"description": "In Words will be visible once you save the Purchase Order.", +"fieldname": "in_words", +"fieldtype": "Data", +"label": "In Words (Company Currency)", +"oldfieldname": "in_words", +"oldfieldtype": "Data", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "rounded_total", +"fieldtype": "Currency", +"label": "Rounded Total (Company Currency)", +"oldfieldname": "rounded_total", +"oldfieldtype": "Currency", +"options": "Company:company:default_currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "advance_paid", +"fieldtype": "Currency", +"label": "Advance Paid", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"fieldname": "column_break4", +"fieldtype": "Column Break", +"oldfieldtype": "Column Break", +"permlevel": 0, +"print_hide": 0 +}, +{ +"fieldname": "other_charges_added_import", +"fieldtype": "Currency", +"label": "Taxes and Charges Added", +"no_copy": 0, +"oldfieldname": "other_charges_added_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1, +"report_hide": 0 +}, +{ +"fieldname": "other_charges_deducted_import", +"fieldtype": "Currency", +"label": "Taxes and Charges Deducted", +"no_copy": 0, +"oldfieldname": "other_charges_deducted_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1, +"report_hide": 0 +}, +{ +"fieldname": "grand_total_import", +"fieldtype": "Currency", +"in_list_view": 1, +"label": "Grand Total", +"no_copy": 0, +"oldfieldname": "grand_total_import", +"oldfieldtype": "Currency", +"options": "currency", +"permlevel": 0, +"print_hide": 0, +"read_only": 1, +"report_hide": 0 +}, +{ +"fieldname": "in_words_import", +"fieldtype": "Data", +"label": "In Words", +"oldfieldname": "in_words_import", +"oldfieldtype": "Data", +"permlevel": 0, +"print_hide": 0, +"read_only": 1 +}, +{ +"fieldname": "fold", +"fieldtype": "Fold", +"permlevel": 0 +}, +{ +"fieldname": "terms_section_break", +"fieldtype": "Section Break", +"label": "Terms and Conditions", +"oldfieldtype": "Section Break", +"options": "icon-legal", +"permlevel": 0 +}, +{ +"fieldname": "tc_name", +"fieldtype": "Link", +"label": "Terms", +"oldfieldname": "tc_name", +"oldfieldtype": "Link", +"options": "Terms and Conditions", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "terms", +"fieldtype": "Text Editor", +"label": "Terms and Conditions", +"oldfieldname": "terms", +"oldfieldtype": "Text Editor", +"permlevel": 0 +}, +{ +"depends_on": "supplier", +"fieldname": "contact_section", +"fieldtype": "Section Break", +"label": "Contact Info", +"options": "icon-bullhorn", +"permlevel": 0 +}, +{ +"fieldname": "supplier_address", +"fieldtype": "Link", +"in_filter": 1, +"label": "Supplier Address", +"options": "Address", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "cb_contact", +"fieldtype": "Column Break", +"permlevel": 0 +}, +{ +"fieldname": "contact_person", +"fieldtype": "Link", +"in_filter": 1, +"label": "Contact Person", +"options": "Contact", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "more_info", +"fieldtype": "Section Break", +"label": "More Info", +"oldfieldtype": "Section Break", +"permlevel": 0 +}, +{ +"fieldname": "status", +"fieldtype": "Select", +"in_filter": 1, +"label": "Status", +"no_copy": 1, +"oldfieldname": "status", +"oldfieldtype": "Select", +"options": "\nDraft\nSubmitted\nStopped\nCancelled", +"permlevel": 0, +"print_hide": 1, +"read_only": 1, +"reqd": 1, +"search_index": 1 +}, +{ +"default": "No", +"fieldname": "is_subcontracted", +"fieldtype": "Select", +"label": "Is Subcontracted", +"options": "\nYes\nNo", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "ref_sq", +"fieldtype": "Data", +"hidden": 1, +"label": "Ref SQ", +"no_copy": 1, +"oldfieldname": "ref_sq", +"oldfieldtype": "Data", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"allow_on_submit": 1, +"fieldname": "letter_head", +"fieldtype": "Link", +"label": "Letter Head", +"oldfieldname": "letter_head", +"oldfieldtype": "Select", +"options": "Letter Head", +"permlevel": 0, +"print_hide": 1 +}, +{ +"fieldname": "fiscal_year", +"fieldtype": "Link", +"in_filter": 1, +"label": "Fiscal Year", +"no_copy": 0, +"oldfieldname": "fiscal_year", +"oldfieldtype": "Select", +"options": "Fiscal Year", +"permlevel": 0, +"print_hide": 1, +"reqd": 1, +"search_index": 1 +}, +{ +"allow_on_submit": 1, +"fieldname": "select_print_heading", +"fieldtype": "Link", +"label": "Print Heading", +"no_copy": 1, +"oldfieldname": "select_print_heading", +"oldfieldtype": "Link", +"options": "Print Heading", +"permlevel": 0, +"print_hide": 1, +"report_hide": 1 +}, +{ +"fieldname": "column_break5", +"fieldtype": "Column Break", +"oldfieldtype": "Column Break", +"permlevel": 0, +"print_hide": 1, +"print_width": "50%", +"width": "50%" +}, +{ +"depends_on": "eval:!doc.__islocal", +"description": "% of materials received against this Purchase Order", +"fieldname": "per_received", +"fieldtype": "Percent", +"in_list_view": 1, +"label": "% Received", +"no_copy": 1, +"oldfieldname": "per_received", +"oldfieldtype": "Currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"depends_on": "eval:!doc.__islocal", +"description": "% of materials billed against this Purchase Order.", +"fieldname": "per_billed", +"fieldtype": "Percent", +"in_list_view": 1, +"label": "% Billed", +"no_copy": 1, +"oldfieldname": "per_billed", +"oldfieldtype": "Currency", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 +}, +{ +"description": "Required raw materials issued to the supplier for producing a sub - contracted item.", +"fieldname": "raw_material_details", +"fieldtype": "Section Break", +"label": "Raw Materials Supplied", +"oldfieldtype": "Section Break", +"options": "icon-truck", +"permlevel": 0, +"print_hide": 1 +}, +{ +"allow_on_submit": 1, +"fieldname": "po_raw_material_details", +"fieldtype": "Table", +"label": "Purchase Order Items Supplied", +"no_copy": 0, +"oldfieldname": "po_raw_material_details", +"oldfieldtype": "Table", +"options": "Purchase Order Item Supplied", +"permlevel": 0, +"print_hide": 1, +"read_only": 1 + }, + { + "fieldname": "recurring_order", + "fieldtype": "Section Break", + "label": "Recurring Order", + "options": "icon-time", "permlevel": 0 - }, + }, { - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "no_copy": 0, - "oldfieldname": "currency", - "oldfieldtype": "Select", - "options": "Currency", - "permlevel": 0, - "print_hide": 1, - "reqd": 1 - }, - { - "description": "Rate at which supplier's currency is converted to company's base currency", - "fieldname": "conversion_rate", - "fieldtype": "Float", - "hidden": 0, - "label": "Exchange Rate", - "no_copy": 0, - "oldfieldname": "conversion_rate", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "reqd": 1 - }, - { - "fieldname": "cb_price_list", - "fieldtype": "Column Break", + "fieldname": "column_break", + "fieldtype": "Column Break", + "label": "Column Break", "permlevel": 0 - }, + }, { - "fieldname": "buying_price_list", - "fieldtype": "Link", - "label": "Price List", - "options": "Price List", - "permlevel": 0, + "allow_on_submit": 1, + "depends_on": "eval:doc.docstatus<2", + "description": "Check if recurring order, uncheck to stop recurring or put proper End Date", + "fieldname": "is_recurring", + "fieldtype": "Check", + "label": "Is Recurring", + "no_copy": 1, + "permlevel": 0, "print_hide": 1 - }, + }, { - "fieldname": "price_list_currency", - "fieldtype": "Link", - "label": "Price List Currency", - "options": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "fieldname": "recurring_type", + "fieldtype": "Select", + "label": "Recurring Type", + "no_copy": 1, + "options": "Monthly\nQuarterly\nHalf-yearly\nYearly", + "permlevel": 0 + }, { - "fieldname": "plc_conversion_rate", - "fieldtype": "Float", - "label": "Price List Exchange Rate", - "permlevel": 0, + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "The day of the month on which auto order will be generated e.g. 05, 28 etc", + "fieldname": "repeat_on_day_of_month", + "fieldtype": "Int", + "label": "Repeat on Day of Month", + "no_copy": 1, + "permlevel": 0, "print_hide": 1 - }, + }, { - "fieldname": "ignore_pricing_rule", - "fieldtype": "Check", - "label": "Ignore Pricing Rule", - "no_copy": 1, - "permlevel": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "The date on which next invoice will be generated. It is generated on submit.", + "fieldname": "next_date", + "fieldtype": "Date", + "label": "Next Date", + "no_copy": 1, + "permlevel": 0, + "print_hide": 1, + "read_only": 1 + }, + { + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "The date on which recurring order will be stop", + "fieldname": "end_date", + "fieldtype": "Date", + "label": "End Date", + "no_copy": 1, + "permlevel": 0, "print_hide": 1 - }, + }, { - "fieldname": "items", - "fieldtype": "Section Break", - "label": "Items", - "oldfieldtype": "Section Break", - "options": "icon-shopping-cart", - "permlevel": 0 - }, - { - "allow_on_submit": 1, - "fieldname": "po_details", - "fieldtype": "Table", - "label": "Purchase Order Items", - "no_copy": 0, - "oldfieldname": "po_details", - "oldfieldtype": "Table", - "options": "Purchase Order Item", - "permlevel": 0 - }, - { - "fieldname": "sb_last_purchase", - "fieldtype": "Section Break", - "permlevel": 0 - }, - { - "fieldname": "net_total", - "fieldtype": "Currency", - "label": "Net Total (Company Currency)", - "no_copy": 1, - "oldfieldname": "net_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "reqd": 0 - }, - { - "fieldname": "column_break_26", - "fieldtype": "Column Break", - "permlevel": 0 - }, - { - "fieldname": "net_total_import", - "fieldtype": "Currency", - "label": "Net Total", - "no_copy": 0, - "oldfieldname": "net_total_import", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "read_only": 1 - }, - { - "fieldname": "get_last_purchase_rate", - "fieldtype": "Button", - "label": "Get Last Purchase Rate", - "oldfieldtype": "Button", - "permlevel": 0, - "print_hide": 0 - }, - { - "fieldname": "taxes", - "fieldtype": "Section Break", - "label": "Taxes and Charges", - "oldfieldtype": "Section Break", - "options": "icon-money", - "permlevel": 0, - "print_hide": 0 - }, - { - "description": "If you have created a standard template in Purchase Taxes and Charges Master, select one and click on the button below.", - "fieldname": "taxes_and_charges", - "fieldtype": "Link", - "label": "Taxes and Charges", - "no_copy": 0, - "oldfieldname": "purchase_other_charges", - "oldfieldtype": "Link", - "options": "Purchase Taxes and Charges Master", - "permlevel": 0, + "fieldname": "column_break83", + "fieldtype": "Column Break", + "label": "Column Break", + "permlevel": 0, "print_hide": 1 - }, + }, { - "fieldname": "other_charges", - "fieldtype": "Table", - "label": "Purchase Taxes and Charges", - "no_copy": 0, - "oldfieldname": "purchase_tax_details", - "oldfieldtype": "Table", - "options": "Purchase Taxes and Charges", - "permlevel": 0 - }, + "depends_on": "eval:doc.is_recurring==1", + "fieldname": "recurring_id", + "fieldtype": "Data", + "label": "Recurring Id", + "no_copy": 1, + "permlevel": 0, + "print_hide": 1, + "read_only": 1 + }, { - "fieldname": "other_charges_calculation", - "fieldtype": "HTML", - "label": "Taxes and Charges Calculation", - "no_copy": 1, - "oldfieldtype": "HTML", - "permlevel": 0, + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "Enter email id separated by commas, order will be mailed automatically on particular date", + "fieldname": "notification_email_address", + "fieldtype": "Small Text", + "label": "Notification Email Address", + "no_copy": 1, + "permlevel": 0, "print_hide": 1 - }, + }, { - "fieldname": "totals", - "fieldtype": "Section Break", - "label": "Totals", - "oldfieldtype": "Section Break", - "options": "icon-money", - "permlevel": 0 - }, - { - "fieldname": "other_charges_added", - "fieldtype": "Currency", - "label": "Taxes and Charges Added (Company Currency)", - "no_copy": 0, - "oldfieldname": "other_charges_added", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "other_charges_deducted", - "fieldtype": "Currency", - "label": "Taxes and Charges Deducted (Company Currency)", - "no_copy": 0, - "oldfieldname": "other_charges_deducted", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "total_tax", - "fieldtype": "Currency", - "label": "Total Tax (Company Currency)", - "no_copy": 1, - "oldfieldname": "total_tax", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "grand_total", - "fieldtype": "Currency", - "label": "Grand Total (Company Currency)", - "no_copy": 1, - "oldfieldname": "grand_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "description": "In Words will be visible once you save the Purchase Order.", - "fieldname": "in_words", - "fieldtype": "Data", - "label": "In Words (Company Currency)", - "oldfieldname": "in_words", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "rounded_total", - "fieldtype": "Currency", - "label": "Rounded Total (Company Currency)", - "oldfieldname": "rounded_total", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "advance_paid", - "fieldtype": "Currency", - "label": "Advance Paid", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break4", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0 - }, - { - "fieldname": "other_charges_added_import", - "fieldtype": "Currency", - "label": "Taxes and Charges Added", - "no_copy": 0, - "oldfieldname": "other_charges_added_import", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "report_hide": 0 - }, - { - "fieldname": "other_charges_deducted_import", - "fieldtype": "Currency", - "label": "Taxes and Charges Deducted", - "no_copy": 0, - "oldfieldname": "other_charges_deducted_import", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "report_hide": 0 - }, - { - "fieldname": "grand_total_import", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Grand Total", - "no_copy": 0, - "oldfieldname": "grand_total_import", - "oldfieldtype": "Currency", - "options": "currency", - "permlevel": 0, - "print_hide": 0, - "read_only": 1, - "report_hide": 0 - }, - { - "fieldname": "in_words_import", - "fieldtype": "Data", - "label": "In Words", - "oldfieldname": "in_words_import", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "read_only": 1 - }, - { - "fieldname": "fold", - "fieldtype": "Fold", - "permlevel": 0 - }, - { - "fieldname": "terms_section_break", - "fieldtype": "Section Break", - "label": "Terms and Conditions", - "oldfieldtype": "Section Break", - "options": "icon-legal", - "permlevel": 0 - }, - { - "fieldname": "tc_name", - "fieldtype": "Link", - "label": "Terms", - "oldfieldname": "tc_name", - "oldfieldtype": "Link", - "options": "Terms and Conditions", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "terms", - "fieldtype": "Text Editor", - "label": "Terms and Conditions", - "oldfieldname": "terms", - "oldfieldtype": "Text Editor", - "permlevel": 0 - }, - { - "depends_on": "supplier", - "fieldname": "contact_section", - "fieldtype": "Section Break", - "label": "Contact Info", - "options": "icon-bullhorn", - "permlevel": 0 - }, - { - "fieldname": "supplier_address", - "fieldtype": "Link", - "in_filter": 1, - "label": "Supplier Address", - "options": "Address", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "cb_contact", - "fieldtype": "Column Break", - "permlevel": 0 - }, - { - "fieldname": "contact_person", - "fieldtype": "Link", - "in_filter": 1, - "label": "Contact Person", - "options": "Contact", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "more_info", - "fieldtype": "Section Break", - "label": "More Info", - "oldfieldtype": "Section Break", - "permlevel": 0 - }, - { - "fieldname": "status", - "fieldtype": "Select", - "in_filter": 1, - "label": "Status", - "no_copy": 1, - "oldfieldname": "status", - "oldfieldtype": "Select", - "options": "\nDraft\nSubmitted\nStopped\nCancelled", - "permlevel": 0, - "print_hide": 1, - "read_only": 1, - "reqd": 1, - "search_index": 1 - }, - { - "default": "No", - "fieldname": "is_subcontracted", - "fieldtype": "Select", - "label": "Is Subcontracted", - "options": "\nYes\nNo", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "ref_sq", - "fieldtype": "Data", - "hidden": 1, - "label": "Ref SQ", - "no_copy": 1, - "oldfieldname": "ref_sq", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "letter_head", - "fieldtype": "Link", - "label": "Letter Head", - "oldfieldname": "letter_head", - "oldfieldtype": "Select", - "options": "Letter Head", - "permlevel": 0, - "print_hide": 1 - }, - { - "fieldname": "fiscal_year", - "fieldtype": "Link", - "in_filter": 1, - "label": "Fiscal Year", - "no_copy": 0, - "oldfieldname": "fiscal_year", - "oldfieldtype": "Select", - "options": "Fiscal Year", - "permlevel": 0, - "print_hide": 1, - "reqd": 1, - "search_index": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "select_print_heading", - "fieldtype": "Link", - "label": "Print Heading", - "no_copy": 1, - "oldfieldname": "select_print_heading", - "oldfieldtype": "Link", - "options": "Print Heading", - "permlevel": 0, - "print_hide": 1, + "fieldname": "against_income_account", + "fieldtype": "Small Text", + "hidden": 1, + "label": "Against Income Account", + "no_copy": 1, + "permlevel": 0, + "print_hide": 1, "report_hide": 1 - }, - { - "fieldname": "column_break5", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 1, - "print_width": "50%", - "width": "50%" - }, - { - "depends_on": "eval:!doc.__islocal", - "description": "% of materials received against this Purchase Order", - "fieldname": "per_received", - "fieldtype": "Percent", - "in_list_view": 1, - "label": "% Received", - "no_copy": 1, - "oldfieldname": "per_received", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "depends_on": "eval:!doc.__islocal", - "description": "% of materials billed against this Purchase Order.", - "fieldname": "per_billed", - "fieldtype": "Percent", - "in_list_view": 1, - "label": "% Billed", - "no_copy": 1, - "oldfieldname": "per_billed", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - }, - { - "description": "Required raw materials issued to the supplier for producing a sub - contracted item.", - "fieldname": "raw_material_details", - "fieldtype": "Section Break", - "label": "Raw Materials Supplied", - "oldfieldtype": "Section Break", - "options": "icon-truck", - "permlevel": 0, - "print_hide": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "po_raw_material_details", - "fieldtype": "Table", - "label": "Purchase Order Items Supplied", - "no_copy": 0, - "oldfieldname": "po_raw_material_details", - "oldfieldtype": "Table", - "options": "Purchase Order Item Supplied", - "permlevel": 0, - "print_hide": 1, - "read_only": 1 - } - ], - "icon": "icon-file-text", - "idx": 1, - "is_submittable": 1, - "modified": "2014-09-10 05:35:32.583024", - "modified_by": "Administrator", - "module": "Buying", - "name": "Purchase Order", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 1, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 1, - "role": "Material User", - "submit": 0, - "write": 0 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase Manager", - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "apply_user_permissions": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Purchase User", - "submit": 1, - "write": 1 - }, - { - "apply_user_permissions": 1, - "cancel": 0, - "delete": 0, - "email": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Supplier" - }, - { - "permlevel": 1, - "read": 1, - "role": "Purchase Manager", - "write": 1 - } - ], - "read_only_onload": 1, - "search_fields": "status, transaction_date, supplier,grand_total", - "sort_field": "modified", - "sort_order": "DESC" } +], +"icon": "icon-file-text", +"idx": 1, +"is_submittable": 1, +"modified": "2014-09-10 05:35:32.583024", +"modified_by": "Administrator", +"module": "Buying", +"name": "Purchase Order", +"owner": "Administrator", +"permissions": [ +{ +"amend": 0, +"apply_user_permissions": 1, +"cancel": 0, +"create": 0, +"delete": 0, +"email": 0, +"permlevel": 0, +"print": 0, +"read": 1, +"report": 1, +"role": "Material User", +"submit": 0, +"write": 0 +}, +{ +"amend": 1, +"cancel": 1, +"create": 1, +"delete": 1, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Purchase Manager", +"submit": 1, +"write": 1 +}, +{ +"amend": 1, +"apply_user_permissions": 1, +"cancel": 1, +"create": 1, +"delete": 1, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Purchase User", +"submit": 1, +"write": 1 +}, +{ +"apply_user_permissions": 1, +"cancel": 0, +"delete": 0, +"email": 1, +"permlevel": 0, +"print": 1, +"read": 1, +"report": 1, +"role": "Supplier" +}, +{ +"permlevel": 1, +"read": 1, +"role": "Purchase Manager", +"write": 1 +} +], +"read_only_onload": 1, +"search_fields": "status, transaction_date, supplier,grand_total", +"sort_field": "modified", +"sort_order": "DESC" +} + diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 4def1db979..5ad874718a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -6,6 +6,9 @@ import frappe from frappe.utils import cstr, flt from frappe import msgprint, _, throw from frappe.model.mapper import get_mapped_doc + +from erpnext.controllers.recurring_document import convert_to_recurring, validate_recurring_document + from erpnext.controllers.buying_controller import BuyingController form_grid_templates = { @@ -52,6 +55,8 @@ class PurchaseOrder(BuyingController): self.validate_for_subcontracting() self.validate_minimum_order_qty() self.create_raw_materials_supplied("po_raw_material_details") + + validate_recurring_document(self) def validate_with_previous_doc(self): super(PurchaseOrder, self).validate_with_previous_doc(self.tname, { @@ -173,6 +178,8 @@ class PurchaseOrder(BuyingController): purchase_controller.update_last_purchase_rate(self, is_submit = 1) frappe.db.set(self,'status','Submitted') + + convert_to_recurring(self, self.transaction_date) def on_cancel(self): pc_obj = frappe.get_doc('Purchase Common') @@ -197,6 +204,10 @@ class PurchaseOrder(BuyingController): def on_update(self): pass + def on_update_after_submit(self): + validate_recurring_document(self) + convert_to_recurring(self, self.transaction_date) + def set_missing_values(source, target): target.ignore_pricing_rule = 1 target.run_method("set_missing_values") diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index d1d183a7a1..0c9f912dbb 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -107,6 +107,11 @@ class TestPurchaseOrder(unittest.TestCase): po.get("po_details")[0].qty = 3.4 self.assertRaises(UOMMustBeIntegerError, po.insert) + def test_recurring_order(self): + from erpnext.controllers.tests.test_recurring_document import test_recurring_document + + test_recurring_document(self, test_records) + test_dependencies = ["BOM"] diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 5f418c4df2..a3f59082f6 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -4,7 +4,11 @@ from __future__ import unicode_literals import frappe from frappe import _, msgprint -from frappe.utils import flt, rounded + +from frappe.utils import add_days, cint, cstr, today, date_diff, flt, rounded, getdate, nowdate, \ + get_first_day, get_last_day +from frappe.model.naming import make_autoname + from erpnext.setup.utils import get_company_currency from erpnext.accounts.party import get_party_details diff --git a/erpnext/controllers/recurring_document.py b/erpnext/controllers/recurring_document.py index bdf8b2918a..7c8321493b 100644 --- a/erpnext/controllers/recurring_document.py +++ b/erpnext/controllers/recurring_document.py @@ -2,15 +2,22 @@ from __future__ import unicode_literals import frappe import frappe.utils import frappe.defaults -from frappe.utils import cint, cstr, getdate, nowdate, get_first_day, get_last_day + +from frappe.utils import add_days, cint, cstr, date_diff, flt, getdate, nowdate, \ + get_first_day, get_last_day, comma_and from frappe.model.naming import make_autoname + from frappe import _, msgprint, throw +from erpnext.accounts.party import get_party_account, get_due_date, get_party_details +from frappe.model.mapper import get_mapped_doc month_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, 'Yearly': 12} def create_recurring_documents(): manage_recurring_documents("Sales Order") manage_recurring_documents("Sales Invoice") + manage_recurring_documents("Purchase Order") + manage_recurring_documents("Purchase Invoice") def manage_recurring_documents(doctype, next_date=None, commit=True): """ @@ -23,6 +30,10 @@ def manage_recurring_documents(doctype, next_date=None, commit=True): date_field = "transaction_date" elif doctype == "Sales Invoice": date_field = "posting_date" + elif doctype == "Purchase Order": + date_field = "transaction_date" + elif doctype == "Purchase Invoice": + date_field = "posting_date" recurring_documents = frappe.db.sql("""select name, recurring_id from `tab{}` where ifnull(is_recurring, 0)=1 @@ -49,7 +60,7 @@ def manage_recurring_documents(doctype, next_date=None, commit=True): frappe.db.begin() frappe.db.sql("update `tab%s` \ - set is_recurring = 0 where name = %s" % (doctype, '%s'), + set is_recurring = 0 where name = %s" % (doctype, '%s'), (ref_document)) notify_errors(ref_document, doctype, ref_wrapper.customer, ref_wrapper.owner) frappe.db.commit() @@ -155,18 +166,18 @@ def validate_recurring_document(doc): elif not (doc.from_date and doc.to_date): throw(_("Period From and Period To dates mandatory for recurring %s") % doc.doctype) -def convert_to_recurring(doc, autoname, posting_date): - if doc.is_recurring: - if not doc.recurring_id: - frappe.db.set(doc, "recurring_id", - make_autoname(autoname)) +# +def convert_to_recurring(doc, posting_date): + if doc.is_recurring: + if not doc.recurring_id: + frappe.db.set(doc, "recurring_id", doc.name) - set_next_date(doc, posting_date) + set_next_date(doc, posting_date) - elif doc.recurring_id: - frappe.db.sql("""update `tab%s` - set is_recurring = 0 - where recurring_id = %s""" % (doc.doctype, '%s'), (doc.recurring_id)) + elif doc.recurring_id: + frappe.db.sql("""update `tab%s` set is_recurring = 0 + where recurring_id = %s""" % (doc.doctype, '%s'), (doc.recurring_id)) +# def validate_notification_email_id(doc): if doc.notification_email_address: diff --git a/erpnext/controllers/tests/test_recurring_document.py b/erpnext/controllers/tests/test_recurring_document.py index 0e7cb1bc5e..1051082488 100644 --- a/erpnext/controllers/tests/test_recurring_document.py +++ b/erpnext/controllers/tests/test_recurring_document.py @@ -41,6 +41,20 @@ def test_recurring_document(obj, test_records): date_field = "transaction_date" elif base_doc.doctype == "Sales Invoice": date_field = "posting_date" + #for Purchase order/purchase invoice + if base_doc.doctype == "Purchase Order": + base_doc.update({ + "transaction_date": today + }) + elif base_doc.doctype == "Purchase Invoice": + base_doc.update({ + "posting_date": today + }) + + if base_doc.doctype == "Purchase Order": + date_field = "transaction_date" + elif base_doc.doctype == "Purchase Invoice": + date_field = "posting_date" # monthly doc1 = frappe.copy_doc(base_doc) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index d2996e9574..c14d06d50c 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -166,7 +166,7 @@ class SalesOrder(SellingController): self.update_prevdoc_status('submit') frappe.db.set(self, 'status', 'Submitted') - convert_to_recurring(self, "SO/REC/.#####", self.transaction_date) + convert_to_recurring(self, self.transaction_date) def on_cancel(self): # Cannot cancel stopped SO @@ -257,7 +257,7 @@ class SalesOrder(SellingController): def on_update_after_submit(self): validate_recurring_document(self) - convert_to_recurring(self, "SO/REC/.#####", self.transaction_date) + convert_to_recurring(self, self.transaction_date) @frappe.whitelist()