mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-02 03:39:11 +00:00
Merge branch 'develop' into quality-inspection-parameter-group
This commit is contained in:
@@ -109,7 +109,7 @@ def get_region(company=None):
|
|||||||
'''
|
'''
|
||||||
if company or frappe.flags.company:
|
if company or frappe.flags.company:
|
||||||
return frappe.get_cached_value('Company',
|
return frappe.get_cached_value('Company',
|
||||||
company or frappe.flags.company, 'country')
|
company or frappe.flags.company, 'country')
|
||||||
elif frappe.flags.country:
|
elif frappe.flags.country:
|
||||||
return frappe.flags.country
|
return frappe.flags.country
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -127,6 +127,10 @@ class RequestforQuotation(BuyingController):
|
|||||||
'link_doctype': 'Supplier',
|
'link_doctype': 'Supplier',
|
||||||
'link_name': rfq_supplier.supplier
|
'link_name': rfq_supplier.supplier
|
||||||
})
|
})
|
||||||
|
contact.append('email_ids', {
|
||||||
|
'email_id': user.name,
|
||||||
|
'is_primary': 1
|
||||||
|
})
|
||||||
|
|
||||||
if not contact.email_id and not contact.user:
|
if not contact.email_id and not contact.user:
|
||||||
contact.email_id = user.name
|
contact.email_id = user.name
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ from erpnext.accounts.doctype.journal_entry.journal_entry import get_exchange_ra
|
|||||||
class calculate_taxes_and_totals(object):
|
class calculate_taxes_and_totals(object):
|
||||||
def __init__(self, doc):
|
def __init__(self, doc):
|
||||||
self.doc = doc
|
self.doc = doc
|
||||||
|
frappe.flags.round_off_applicable_accounts = []
|
||||||
|
get_round_off_applicable_accounts(self.doc.company, frappe.flags.round_off_applicable_accounts)
|
||||||
self.calculate()
|
self.calculate()
|
||||||
|
|
||||||
def calculate(self):
|
def calculate(self):
|
||||||
@@ -332,10 +334,18 @@ class calculate_taxes_and_totals(object):
|
|||||||
elif tax.charge_type == "On Item Quantity":
|
elif tax.charge_type == "On Item Quantity":
|
||||||
current_tax_amount = tax_rate * item.qty
|
current_tax_amount = tax_rate * item.qty
|
||||||
|
|
||||||
|
current_tax_amount = self.get_final_current_tax_amount(tax, current_tax_amount)
|
||||||
self.set_item_wise_tax(item, tax, tax_rate, current_tax_amount)
|
self.set_item_wise_tax(item, tax, tax_rate, current_tax_amount)
|
||||||
|
|
||||||
return current_tax_amount
|
return current_tax_amount
|
||||||
|
|
||||||
|
def get_final_current_tax_amount(self, tax, current_tax_amount):
|
||||||
|
# Some countries need individual tax components to be rounded
|
||||||
|
# Handeled via regional doctypess
|
||||||
|
if tax.account_head in frappe.flags.round_off_applicable_accounts:
|
||||||
|
current_tax_amount = round(current_tax_amount, 0)
|
||||||
|
return current_tax_amount
|
||||||
|
|
||||||
def set_item_wise_tax(self, item, tax, tax_rate, current_tax_amount):
|
def set_item_wise_tax(self, item, tax, tax_rate, current_tax_amount):
|
||||||
# store tax breakup for each item
|
# store tax breakup for each item
|
||||||
key = item.item_code or item.item_name
|
key = item.item_code or item.item_name
|
||||||
@@ -693,6 +703,15 @@ def get_itemised_tax_breakup_html(doc):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def get_round_off_applicable_accounts(company, account_list):
|
||||||
|
account_list = get_regional_round_off_accounts(company, account_list)
|
||||||
|
|
||||||
|
return account_list
|
||||||
|
|
||||||
|
@erpnext.allow_regional
|
||||||
|
def get_regional_round_off_accounts(company, account_list):
|
||||||
|
pass
|
||||||
|
|
||||||
@erpnext.allow_regional
|
@erpnext.allow_regional
|
||||||
def update_itemised_tax_data(doc):
|
def update_itemised_tax_data(doc):
|
||||||
|
|||||||
@@ -399,6 +399,7 @@ regional_overrides = {
|
|||||||
'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_header': 'erpnext.regional.india.utils.get_itemised_tax_breakup_header',
|
'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_header': 'erpnext.regional.india.utils.get_itemised_tax_breakup_header',
|
||||||
'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_data': 'erpnext.regional.india.utils.get_itemised_tax_breakup_data',
|
'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_data': 'erpnext.regional.india.utils.get_itemised_tax_breakup_data',
|
||||||
'erpnext.accounts.party.get_regional_address_details': 'erpnext.regional.india.utils.get_regional_address_details',
|
'erpnext.accounts.party.get_regional_address_details': 'erpnext.regional.india.utils.get_regional_address_details',
|
||||||
|
'erpnext.controllers.taxes_and_totals.get_regional_round_off_accounts': 'erpnext.regional.india.utils.get_regional_round_off_accounts',
|
||||||
'erpnext.hr.utils.calculate_annual_eligible_hra_exemption': 'erpnext.regional.india.utils.calculate_annual_eligible_hra_exemption',
|
'erpnext.hr.utils.calculate_annual_eligible_hra_exemption': 'erpnext.regional.india.utils.calculate_annual_eligible_hra_exemption',
|
||||||
'erpnext.hr.utils.calculate_hra_exemption_for_period': 'erpnext.regional.india.utils.calculate_hra_exemption_for_period',
|
'erpnext.hr.utils.calculate_hra_exemption_for_period': 'erpnext.regional.india.utils.calculate_hra_exemption_for_period',
|
||||||
'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_regional_gl_entries': 'erpnext.regional.india.utils.make_regional_gl_entries',
|
'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_regional_gl_entries': 'erpnext.regional.india.utils.make_regional_gl_entries',
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 16%">{{ __("Leave Type") }}</th>
|
<th style="width: 16%">{{ __("Leave Type") }}</th>
|
||||||
<th style="width: 16%" class="text-right">{{ __("Total Allocated Leaves") }}</th>
|
<th style="width: 16%" class="text-right">{{ __("Total Allocated Leave") }}</th>
|
||||||
<th style="width: 16%" class="text-right">{{ __("Expired Leaves") }}</th>
|
<th style="width: 16%" class="text-right">{{ __("Expired Leave") }}</th>
|
||||||
<th style="width: 16%" class="text-right">{{ __("Used Leaves") }}</th>
|
<th style="width: 16%" class="text-right">{{ __("Used Leave") }}</th>
|
||||||
<th style="width: 16%" class="text-right">{{ __("Pending Leaves") }}</th>
|
<th style="width: 16%" class="text-right">{{ __("Pending Leave") }}</th>
|
||||||
<th style="width: 16%" class="text-right">{{ __("Available Leaves") }}</th>
|
<th style="width: 16%" class="text-right">{{ __("Available Leave") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -25,5 +25,5 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p style="margin-top: 30px;"> No Leaves have been allocated. </p>
|
<p style="margin-top: 30px;"> No Leave has been allocated. </p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -40,17 +40,17 @@ def get_columns():
|
|||||||
'fieldname': 'opening_balance',
|
'fieldname': 'opening_balance',
|
||||||
'width': 130,
|
'width': 130,
|
||||||
}, {
|
}, {
|
||||||
'label': _('Leaves Allocated'),
|
'label': _('Leave Allocated'),
|
||||||
'fieldtype': 'float',
|
'fieldtype': 'float',
|
||||||
'fieldname': 'leaves_allocated',
|
'fieldname': 'leaves_allocated',
|
||||||
'width': 130,
|
'width': 130,
|
||||||
}, {
|
}, {
|
||||||
'label': _('Leaves Taken'),
|
'label': _('Leave Taken'),
|
||||||
'fieldtype': 'float',
|
'fieldtype': 'float',
|
||||||
'fieldname': 'leaves_taken',
|
'fieldname': 'leaves_taken',
|
||||||
'width': 130,
|
'width': 130,
|
||||||
}, {
|
}, {
|
||||||
'label': _('Leaves Expired'),
|
'label': _('Leave Expired'),
|
||||||
'fieldtype': 'float',
|
'fieldtype': 'float',
|
||||||
'fieldname': 'leaves_expired',
|
'fieldname': 'leaves_expired',
|
||||||
'width': 130,
|
'width': 130,
|
||||||
|
|||||||
@@ -246,7 +246,5 @@ def get_per_day_interest(principal_amount, rate_of_interest, posting_date=None):
|
|||||||
if not posting_date:
|
if not posting_date:
|
||||||
posting_date = getdate()
|
posting_date = getdate()
|
||||||
|
|
||||||
precision = cint(frappe.db.get_default("currency_precision")) or 2
|
return flt((principal_amount * rate_of_interest) / (days_in_year(get_datetime(posting_date).year) * 100))
|
||||||
|
|
||||||
return flt((principal_amount * rate_of_interest) / (days_in_year(get_datetime(posting_date).year) * 100), precision)
|
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ def get_company_wise_loan_security_details(filters, loan_security_details):
|
|||||||
if qty:
|
if qty:
|
||||||
security_wise_map[key[1]]['applicant_count'] += 1
|
security_wise_map[key[1]]['applicant_count'] += 1
|
||||||
|
|
||||||
total_portfolio_value += flt(qty * loan_security_details.get(key[1])['latest_price'])
|
total_portfolio_value += flt(qty * loan_security_details.get(key[1], {}).get('latest_price', 0))
|
||||||
|
|
||||||
return security_wise_map, total_portfolio_value
|
return security_wise_map, total_portfolio_value
|
||||||
|
|
||||||
|
|||||||
@@ -267,6 +267,17 @@ class JobCard(Document):
|
|||||||
fields = ["sum(total_time_in_mins) as time_in_mins", "sum(total_completed_qty) as completed_qty"],
|
fields = ["sum(total_time_in_mins) as time_in_mins", "sum(total_completed_qty) as completed_qty"],
|
||||||
filters = {"docstatus": 1, "work_order": self.work_order, "operation_id": self.operation_id})
|
filters = {"docstatus": 1, "work_order": self.work_order, "operation_id": self.operation_id})
|
||||||
|
|
||||||
|
def set_transferred_qty_in_job_card(self, ste_doc):
|
||||||
|
for row in ste_doc.items:
|
||||||
|
if not row.job_card_item: continue
|
||||||
|
|
||||||
|
qty = frappe.db.sql(""" SELECT SUM(qty) from `tabStock Entry Detail` sed, `tabStock Entry` se
|
||||||
|
WHERE sed.job_card_item = %s and se.docstatus = 1 and sed.parent = se.name and
|
||||||
|
se.purpose = 'Material Transfer for Manufacture'
|
||||||
|
""", (row.job_card_item))[0][0]
|
||||||
|
|
||||||
|
frappe.db.set_value('Job Card Item', row.job_card_item, 'transferred_qty', flt(qty))
|
||||||
|
|
||||||
def set_transferred_qty(self, update_status=False):
|
def set_transferred_qty(self, update_status=False):
|
||||||
if not self.items:
|
if not self.items:
|
||||||
self.transferred_qty = self.for_quantity if self.docstatus == 1 else 0
|
self.transferred_qty = self.for_quantity if self.docstatus == 1 else 0
|
||||||
@@ -279,7 +290,8 @@ class JobCard(Document):
|
|||||||
self.transferred_qty = frappe.db.get_value('Stock Entry', {
|
self.transferred_qty = frappe.db.get_value('Stock Entry', {
|
||||||
'job_card': self.name,
|
'job_card': self.name,
|
||||||
'work_order': self.work_order,
|
'work_order': self.work_order,
|
||||||
'docstatus': 1
|
'docstatus': 1,
|
||||||
|
'purpose': 'Material Transfer for Manufacture'
|
||||||
}, 'sum(fg_completed_qty)') or 0
|
}, 'sum(fg_completed_qty)') or 0
|
||||||
|
|
||||||
self.db_set("transferred_qty", self.transferred_qty)
|
self.db_set("transferred_qty", self.transferred_qty)
|
||||||
@@ -420,6 +432,7 @@ def make_stock_entry(source_name, target_doc=None):
|
|||||||
target.purpose = "Material Transfer for Manufacture"
|
target.purpose = "Material Transfer for Manufacture"
|
||||||
target.from_bom = 1
|
target.from_bom = 1
|
||||||
target.fg_completed_qty = source.get('for_quantity', 0) - source.get('transferred_qty', 0)
|
target.fg_completed_qty = source.get('for_quantity', 0) - source.get('transferred_qty', 0)
|
||||||
|
target.set_transfer_qty()
|
||||||
target.calculate_rate_and_amount()
|
target.calculate_rate_and_amount()
|
||||||
target.set_missing_values()
|
target.set_missing_values()
|
||||||
target.set_stock_entry_type()
|
target.set_stock_entry_type()
|
||||||
@@ -437,9 +450,10 @@ def make_stock_entry(source_name, target_doc=None):
|
|||||||
"field_map": {
|
"field_map": {
|
||||||
"source_warehouse": "s_warehouse",
|
"source_warehouse": "s_warehouse",
|
||||||
"required_qty": "qty",
|
"required_qty": "qty",
|
||||||
"uom": "stock_uom"
|
"name": "job_card_item"
|
||||||
},
|
},
|
||||||
"postprocess": update_item,
|
"postprocess": update_item,
|
||||||
|
"condition": lambda doc: doc.required_qty > 0
|
||||||
}
|
}
|
||||||
}, target_doc, set_missing_values)
|
}, target_doc, set_missing_values)
|
||||||
|
|
||||||
|
|||||||
@@ -1,363 +1,120 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"actions": [],
|
||||||
"allow_guest_to_view": 0,
|
|
||||||
"allow_import": 0,
|
|
||||||
"allow_rename": 0,
|
|
||||||
"beta": 0,
|
|
||||||
"creation": "2018-07-09 17:20:44.737289",
|
"creation": "2018-07-09 17:20:44.737289",
|
||||||
"custom": 0,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"document_type": "",
|
|
||||||
"editable_grid": 1,
|
"editable_grid": 1,
|
||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"item_code",
|
||||||
|
"source_warehouse",
|
||||||
|
"uom",
|
||||||
|
"item_group",
|
||||||
|
"column_break_3",
|
||||||
|
"stock_uom",
|
||||||
|
"item_name",
|
||||||
|
"description",
|
||||||
|
"qty_section",
|
||||||
|
"required_qty",
|
||||||
|
"column_break_9",
|
||||||
|
"transferred_qty",
|
||||||
|
"allow_alternative_item"
|
||||||
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "item_code",
|
"fieldname": "item_code",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Item Code",
|
"label": "Item Code",
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Item",
|
"options": "Item",
|
||||||
"permlevel": 0,
|
"read_only": 1
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "source_warehouse",
|
"fieldname": "source_warehouse",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 1,
|
"ignore_user_permissions": 1,
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Source Warehouse",
|
"label": "Source Warehouse",
|
||||||
"length": 0,
|
"options": "Warehouse"
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Warehouse",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "uom",
|
"fieldname": "uom",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "UOM",
|
"label": "UOM",
|
||||||
"length": 0,
|
"options": "UOM"
|
||||||
"no_copy": 0,
|
|
||||||
"options": "UOM",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "column_break_3",
|
"fieldname": "column_break_3",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break"
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "item_name",
|
"fieldname": "item_name",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Item Name",
|
"label": "Item Name",
|
||||||
"length": 0,
|
"read_only": 1
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "description",
|
"fieldname": "description",
|
||||||
"fieldtype": "Text",
|
"fieldtype": "Text",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Description",
|
"label": "Description",
|
||||||
"length": 0,
|
"read_only": 1
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "qty_section",
|
"fieldname": "qty_section",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"label": "Qty"
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Qty",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "required_qty",
|
"fieldname": "required_qty",
|
||||||
"fieldtype": "Float",
|
"fieldtype": "Float",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Required Qty",
|
"label": "Required Qty",
|
||||||
"length": 0,
|
"read_only": 1
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "column_break_9",
|
"fieldname": "column_break_9",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break"
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"default": "0",
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "allow_alternative_item",
|
"fieldname": "allow_alternative_item",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"hidden": 0,
|
"label": "Allow Alternative Item"
|
||||||
"ignore_user_permissions": 0,
|
},
|
||||||
"ignore_xss_filter": 0,
|
{
|
||||||
"in_filter": 0,
|
"fetch_from": "item_code.item_group",
|
||||||
"in_global_search": 0,
|
"fieldname": "item_group",
|
||||||
"in_list_view": 0,
|
"fieldtype": "Link",
|
||||||
"in_standard_filter": 0,
|
"label": "Item Group",
|
||||||
"label": "Allow Alternative Item",
|
"options": "Item Group",
|
||||||
"length": 0,
|
"read_only": 1
|
||||||
"no_copy": 0,
|
},
|
||||||
"permlevel": 0,
|
{
|
||||||
"precision": "",
|
"fetch_from": "item_code.stock_uom",
|
||||||
"print_hide": 0,
|
"fieldname": "stock_uom",
|
||||||
"print_hide_if_no_value": 0,
|
"fieldtype": "Link",
|
||||||
"read_only": 0,
|
"label": "Stock UOM",
|
||||||
"remember_last_selected_value": 0,
|
"options": "UOM"
|
||||||
"report_hide": 0,
|
},
|
||||||
"reqd": 0,
|
{
|
||||||
"search_index": 0,
|
"fieldname": "transferred_qty",
|
||||||
"set_only_once": 0,
|
"fieldtype": "Float",
|
||||||
"translatable": 0,
|
"label": "Transferred Qty",
|
||||||
"unique": 0
|
"no_copy": 1,
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"has_web_view": 0,
|
"index_web_pages_for_search": 1,
|
||||||
"hide_heading": 0,
|
|
||||||
"hide_toolbar": 0,
|
|
||||||
"idx": 0,
|
|
||||||
"image_view": 0,
|
|
||||||
"in_create": 0,
|
|
||||||
"is_submittable": 0,
|
|
||||||
"issingle": 0,
|
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"links": [],
|
||||||
"modified": "2018-08-28 15:23:48.099459",
|
"modified": "2021-02-11 13:50:13.804108",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Manufacturing",
|
"module": "Manufacturing",
|
||||||
"name": "Job Card Item",
|
"name": "Job Card Item",
|
||||||
"name_case": "",
|
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [],
|
"permissions": [],
|
||||||
"quick_entry": 1,
|
"quick_entry": 1,
|
||||||
"read_only": 0,
|
|
||||||
"read_only_onload": 0,
|
|
||||||
"show_name_in_global_search": 0,
|
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1
|
||||||
"track_seen": 0,
|
|
||||||
"track_views": 0
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,9 @@
|
|||||||
// License: GNU General Public License v3. See license.txt
|
// License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
erpnext.taxes_and_totals = erpnext.payments.extend({
|
erpnext.taxes_and_totals = erpnext.payments.extend({
|
||||||
setup: function() {},
|
setup: function() {
|
||||||
|
this.fetch_round_off_accounts();
|
||||||
|
},
|
||||||
|
|
||||||
apply_pricing_rule_on_item: function(item) {
|
apply_pricing_rule_on_item: function(item) {
|
||||||
let effective_item_rate = item.price_list_rate;
|
let effective_item_rate = item.price_list_rate;
|
||||||
@@ -152,6 +154,22 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
fetch_round_off_accounts: function() {
|
||||||
|
let me = this;
|
||||||
|
frappe.flags.round_off_applicable_accounts = [];
|
||||||
|
|
||||||
|
return frappe.call({
|
||||||
|
"method": "erpnext.controllers.taxes_and_totals.get_round_off_applicable_accounts",
|
||||||
|
"args": {
|
||||||
|
"company": me.frm.doc.company,
|
||||||
|
"account_list": frappe.flags.round_off_applicable_accounts
|
||||||
|
},
|
||||||
|
callback: function(r) {
|
||||||
|
frappe.flags.round_off_applicable_accounts.push(...r.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
determine_exclusive_rate: function() {
|
determine_exclusive_rate: function() {
|
||||||
var me = this;
|
var me = this;
|
||||||
|
|
||||||
@@ -372,11 +390,21 @@ erpnext.taxes_and_totals = erpnext.payments.extend({
|
|||||||
} else if (tax.charge_type == "On Item Quantity") {
|
} else if (tax.charge_type == "On Item Quantity") {
|
||||||
current_tax_amount = tax_rate * item.qty;
|
current_tax_amount = tax_rate * item.qty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
current_tax_amount = this.get_final_tax_amount(tax, current_tax_amount);
|
||||||
this.set_item_wise_tax(item, tax, tax_rate, current_tax_amount);
|
this.set_item_wise_tax(item, tax, tax_rate, current_tax_amount);
|
||||||
|
|
||||||
return current_tax_amount;
|
return current_tax_amount;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get_final_tax_amount: function(tax, current_tax_amount) {
|
||||||
|
if (frappe.flags.round_off_applicable_accounts.includes(tax.account_head)) {
|
||||||
|
current_tax_amount = Math.round(current_tax_amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
return current_tax_amount;
|
||||||
|
},
|
||||||
|
|
||||||
set_item_wise_tax: function(item, tax, tax_rate, current_tax_amount) {
|
set_item_wise_tax: function(item, tax, tax_rate, current_tax_amount) {
|
||||||
// store tax breakup for each item
|
// store tax breakup for each item
|
||||||
let tax_detail = tax.item_wise_tax_detail;
|
let tax_detail = tax.item_wise_tax_detail;
|
||||||
|
|||||||
@@ -1,222 +1,86 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"actions": [],
|
||||||
"allow_guest_to_view": 0,
|
|
||||||
"allow_import": 0,
|
|
||||||
"allow_rename": 0,
|
|
||||||
"beta": 0,
|
|
||||||
"creation": "2017-06-27 15:09:01.318003",
|
"creation": "2017-06-27 15:09:01.318003",
|
||||||
"custom": 0,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"document_type": "",
|
|
||||||
"editable_grid": 1,
|
"editable_grid": 1,
|
||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"gst_summary",
|
||||||
|
"column_break_2",
|
||||||
|
"round_off_gst_values",
|
||||||
|
"gstin_email_sent_on",
|
||||||
|
"section_break_4",
|
||||||
|
"gst_accounts",
|
||||||
|
"b2c_limit"
|
||||||
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "gst_summary",
|
"fieldname": "gst_summary",
|
||||||
"fieldtype": "HTML",
|
"fieldtype": "HTML",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "GST Summary",
|
"label": "GST Summary",
|
||||||
"length": 0,
|
"show_days": 1,
|
||||||
"no_copy": 0,
|
"show_seconds": 1
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "column_break_2",
|
"fieldname": "column_break_2",
|
||||||
"fieldtype": "Column Break",
|
"fieldtype": "Column Break",
|
||||||
"hidden": 0,
|
"show_days": 1,
|
||||||
"ignore_user_permissions": 0,
|
"show_seconds": 1
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "gstin_email_sent_on",
|
"fieldname": "gstin_email_sent_on",
|
||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "GSTIN Email Sent On",
|
"label": "GSTIN Email Sent On",
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
"read_only": 1,
|
||||||
"remember_last_selected_value": 0,
|
"show_days": 1,
|
||||||
"report_hide": 0,
|
"show_seconds": 1
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "section_break_4",
|
"fieldname": "section_break_4",
|
||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"hidden": 0,
|
"show_days": 1,
|
||||||
"ignore_user_permissions": 0,
|
"show_seconds": 1
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "gst_accounts",
|
"fieldname": "gst_accounts",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "GST Accounts",
|
"label": "GST Accounts",
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "GST Account",
|
"options": "GST Account",
|
||||||
"permlevel": 0,
|
"show_days": 1,
|
||||||
"precision": "",
|
"show_seconds": 1
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"columns": 0,
|
|
||||||
"default": "250000",
|
"default": "250000",
|
||||||
"description": "Set Invoice Value for B2C. B2CL and B2CS calculated based on this invoice value.",
|
"description": "Set Invoice Value for B2C. B2CL and B2CS calculated based on this invoice value.",
|
||||||
"fieldname": "b2c_limit",
|
"fieldname": "b2c_limit",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "B2C Limit",
|
"label": "B2C Limit",
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
"search_index": 0,
|
"show_days": 1,
|
||||||
"set_only_once": 0,
|
"show_seconds": 1
|
||||||
"unique": 0
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"description": "Enabling this option will round off individual GST components in all the Invoices",
|
||||||
|
"fieldname": "round_off_gst_values",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Round Off GST Values",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"has_web_view": 0,
|
"index_web_pages_for_search": 1,
|
||||||
"hide_heading": 0,
|
|
||||||
"hide_toolbar": 0,
|
|
||||||
"idx": 0,
|
|
||||||
"image_view": 0,
|
|
||||||
"in_create": 0,
|
|
||||||
"is_submittable": 0,
|
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"istable": 0,
|
"links": [],
|
||||||
"max_attachments": 0,
|
"modified": "2021-01-28 17:19:47.969260",
|
||||||
"modified": "2018-02-14 08:14:15.375181",
|
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Regional",
|
"module": "Regional",
|
||||||
"name": "GST Settings",
|
"name": "GST Settings",
|
||||||
"name_case": "",
|
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [],
|
"permissions": [],
|
||||||
"quick_entry": 1,
|
"quick_entry": 1,
|
||||||
"read_only": 0,
|
|
||||||
"read_only_onload": 0,
|
|
||||||
"show_name_in_global_search": 0,
|
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1
|
||||||
"track_seen": 0
|
}
|
||||||
}
|
|
||||||
@@ -14,8 +14,20 @@ import json
|
|||||||
test_dependencies = ["Territory", "Customer Group", "Supplier Group", "Item"]
|
test_dependencies = ["Territory", "Customer Group", "Supplier Group", "Item"]
|
||||||
|
|
||||||
class TestGSTR3BReport(unittest.TestCase):
|
class TestGSTR3BReport(unittest.TestCase):
|
||||||
def test_gstr_3b_report(self):
|
def setUp(self):
|
||||||
|
frappe.set_user("Administrator")
|
||||||
|
|
||||||
|
frappe.db.sql("delete from `tabSales Invoice` where company='_Test Company GST'")
|
||||||
|
frappe.db.sql("delete from `tabPurchase Invoice` where company='_Test Company GST'")
|
||||||
|
frappe.db.sql("delete from `tabGSTR 3B Report` where company='_Test Company GST'")
|
||||||
|
|
||||||
|
make_company()
|
||||||
|
make_item("Milk", properties = {"is_nil_exempt": 1, "standard_rate": 0.000000})
|
||||||
|
set_account_heads()
|
||||||
|
make_customers()
|
||||||
|
make_suppliers()
|
||||||
|
|
||||||
|
def test_gstr_3b_report(self):
|
||||||
month_number_mapping = {
|
month_number_mapping = {
|
||||||
1: "January",
|
1: "January",
|
||||||
2: "February",
|
2: "February",
|
||||||
@@ -31,17 +43,6 @@ class TestGSTR3BReport(unittest.TestCase):
|
|||||||
12: "December"
|
12: "December"
|
||||||
}
|
}
|
||||||
|
|
||||||
frappe.set_user("Administrator")
|
|
||||||
|
|
||||||
frappe.db.sql("delete from `tabSales Invoice` where company='_Test Company GST'")
|
|
||||||
frappe.db.sql("delete from `tabPurchase Invoice` where company='_Test Company GST'")
|
|
||||||
frappe.db.sql("delete from `tabGSTR 3B Report` where company='_Test Company GST'")
|
|
||||||
|
|
||||||
make_company()
|
|
||||||
make_item("Milk", properties = {"is_nil_exempt": 1, "standard_rate": 0.000000})
|
|
||||||
set_account_heads()
|
|
||||||
make_customers()
|
|
||||||
make_suppliers()
|
|
||||||
make_sales_invoice()
|
make_sales_invoice()
|
||||||
create_purchase_invoices()
|
create_purchase_invoices()
|
||||||
|
|
||||||
@@ -67,6 +68,42 @@ class TestGSTR3BReport(unittest.TestCase):
|
|||||||
self.assertEqual(output["itc_elg"]["itc_avl"][4]["samt"], 22.50)
|
self.assertEqual(output["itc_elg"]["itc_avl"][4]["samt"], 22.50)
|
||||||
self.assertEqual(output["itc_elg"]["itc_avl"][4]["camt"], 22.50)
|
self.assertEqual(output["itc_elg"]["itc_avl"][4]["camt"], 22.50)
|
||||||
|
|
||||||
|
def test_gst_rounding(self):
|
||||||
|
gst_settings = frappe.get_doc('GST Settings')
|
||||||
|
gst_settings.round_off_gst_values = 1
|
||||||
|
gst_settings.save()
|
||||||
|
|
||||||
|
current_country = frappe.flags.country
|
||||||
|
frappe.flags.country = 'India'
|
||||||
|
|
||||||
|
si = create_sales_invoice(company="_Test Company GST",
|
||||||
|
customer = '_Test GST Customer',
|
||||||
|
currency = 'INR',
|
||||||
|
warehouse = 'Finished Goods - _GST',
|
||||||
|
debit_to = 'Debtors - _GST',
|
||||||
|
income_account = 'Sales - _GST',
|
||||||
|
expense_account = 'Cost of Goods Sold - _GST',
|
||||||
|
cost_center = 'Main - _GST',
|
||||||
|
rate=216,
|
||||||
|
do_not_save=1
|
||||||
|
)
|
||||||
|
|
||||||
|
si.append("taxes", {
|
||||||
|
"charge_type": "On Net Total",
|
||||||
|
"account_head": "IGST - _GST",
|
||||||
|
"cost_center": "Main - _GST",
|
||||||
|
"description": "IGST @ 18.0",
|
||||||
|
"rate": 18
|
||||||
|
})
|
||||||
|
|
||||||
|
si.save()
|
||||||
|
# Check for 39 instead of 38.88
|
||||||
|
self.assertEqual(si.taxes[0].base_tax_amount_after_discount_amount, 39)
|
||||||
|
|
||||||
|
frappe.flags.country = current_country
|
||||||
|
gst_settings.round_off_gst_values = 1
|
||||||
|
gst_settings.save()
|
||||||
|
|
||||||
def make_sales_invoice():
|
def make_sales_invoice():
|
||||||
si = create_sales_invoice(company="_Test Company GST",
|
si = create_sales_invoice(company="_Test Company GST",
|
||||||
customer = '_Test GST Customer',
|
customer = '_Test GST Customer',
|
||||||
@@ -145,7 +182,6 @@ def make_sales_invoice():
|
|||||||
si3.submit()
|
si3.submit()
|
||||||
|
|
||||||
def create_purchase_invoices():
|
def create_purchase_invoices():
|
||||||
|
|
||||||
pi = make_purchase_invoice(
|
pi = make_purchase_invoice(
|
||||||
company="_Test Company GST",
|
company="_Test Company GST",
|
||||||
supplier = '_Test Registered Supplier',
|
supplier = '_Test Registered Supplier',
|
||||||
@@ -193,7 +229,6 @@ def create_purchase_invoices():
|
|||||||
pi1.submit()
|
pi1.submit()
|
||||||
|
|
||||||
def make_suppliers():
|
def make_suppliers():
|
||||||
|
|
||||||
if not frappe.db.exists("Supplier", "_Test Registered Supplier"):
|
if not frappe.db.exists("Supplier", "_Test Registered Supplier"):
|
||||||
frappe.get_doc({
|
frappe.get_doc({
|
||||||
"supplier_group": "_Test Supplier Group",
|
"supplier_group": "_Test Supplier Group",
|
||||||
@@ -257,7 +292,6 @@ def make_suppliers():
|
|||||||
address.save()
|
address.save()
|
||||||
|
|
||||||
def make_customers():
|
def make_customers():
|
||||||
|
|
||||||
if not frappe.db.exists("Customer", "_Test GST Customer"):
|
if not frappe.db.exists("Customer", "_Test GST Customer"):
|
||||||
frappe.get_doc({
|
frappe.get_doc({
|
||||||
"customer_group": "_Test Customer Group",
|
"customer_group": "_Test Customer Group",
|
||||||
@@ -354,9 +388,9 @@ def make_customers():
|
|||||||
address.save()
|
address.save()
|
||||||
|
|
||||||
def make_company():
|
def make_company():
|
||||||
|
|
||||||
if frappe.db.exists("Company", "_Test Company GST"):
|
if frappe.db.exists("Company", "_Test Company GST"):
|
||||||
return
|
return
|
||||||
|
|
||||||
company = frappe.new_doc("Company")
|
company = frappe.new_doc("Company")
|
||||||
company.company_name = "_Test Company GST"
|
company.company_name = "_Test Company GST"
|
||||||
company.abbr = "_GST"
|
company.abbr = "_GST"
|
||||||
@@ -388,7 +422,6 @@ def make_company():
|
|||||||
address.save()
|
address.save()
|
||||||
|
|
||||||
def set_account_heads():
|
def set_account_heads():
|
||||||
|
|
||||||
gst_settings = frappe.get_doc("GST Settings")
|
gst_settings = frappe.get_doc("GST Settings")
|
||||||
|
|
||||||
gst_account = frappe.get_all(
|
gst_account = frappe.get_all(
|
||||||
|
|||||||
@@ -772,3 +772,24 @@ def make_regional_gl_entries(gl_entries, doc):
|
|||||||
)
|
)
|
||||||
|
|
||||||
return gl_entries
|
return gl_entries
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def get_regional_round_off_accounts(company, account_list):
|
||||||
|
country = frappe.get_cached_value('Company', company, 'country')
|
||||||
|
|
||||||
|
if country != 'India':
|
||||||
|
return
|
||||||
|
|
||||||
|
if isinstance(account_list, string_types):
|
||||||
|
account_list = json.loads(account_list)
|
||||||
|
|
||||||
|
if not frappe.db.get_single_value('GST Settings', 'round_off_gst_values'):
|
||||||
|
return
|
||||||
|
|
||||||
|
gst_accounts = get_gst_accounts(company)
|
||||||
|
gst_account_list = gst_accounts.get('cgst_account') + gst_accounts.get('sgst_account') \
|
||||||
|
+ gst_accounts.get('igst_account')
|
||||||
|
|
||||||
|
account_list.extend(gst_account_list)
|
||||||
|
|
||||||
|
return account_list
|
||||||
@@ -236,6 +236,7 @@ class Gstr1Report(object):
|
|||||||
self.cgst_sgst_invoices = []
|
self.cgst_sgst_invoices = []
|
||||||
|
|
||||||
unidentified_gst_accounts = []
|
unidentified_gst_accounts = []
|
||||||
|
unidentified_gst_accounts_invoice = []
|
||||||
for parent, account, item_wise_tax_detail, tax_amount in self.tax_details:
|
for parent, account, item_wise_tax_detail, tax_amount in self.tax_details:
|
||||||
if account in self.gst_accounts.cess_account:
|
if account in self.gst_accounts.cess_account:
|
||||||
self.invoice_cess.setdefault(parent, tax_amount)
|
self.invoice_cess.setdefault(parent, tax_amount)
|
||||||
@@ -251,6 +252,7 @@ class Gstr1Report(object):
|
|||||||
if not (cgst_or_sgst or account in self.gst_accounts.igst_account):
|
if not (cgst_or_sgst or account in self.gst_accounts.igst_account):
|
||||||
if "gst" in account.lower() and account not in unidentified_gst_accounts:
|
if "gst" in account.lower() and account not in unidentified_gst_accounts:
|
||||||
unidentified_gst_accounts.append(account)
|
unidentified_gst_accounts.append(account)
|
||||||
|
unidentified_gst_accounts_invoice.append(parent)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for item_code, tax_amounts in item_wise_tax_detail.items():
|
for item_code, tax_amounts in item_wise_tax_detail.items():
|
||||||
@@ -273,7 +275,7 @@ class Gstr1Report(object):
|
|||||||
|
|
||||||
# Build itemised tax for export invoices where tax table is blank
|
# Build itemised tax for export invoices where tax table is blank
|
||||||
for invoice, items in iteritems(self.invoice_items):
|
for invoice, items in iteritems(self.invoice_items):
|
||||||
if invoice not in self.items_based_on_tax_rate \
|
if invoice not in self.items_based_on_tax_rate and invoice not in unidentified_gst_accounts_invoice \
|
||||||
and frappe.db.get_value(self.doctype, invoice, "export_type") == "Without Payment of Tax":
|
and frappe.db.get_value(self.doctype, invoice, "export_type") == "Without Payment of Tax":
|
||||||
self.items_based_on_tax_rate.setdefault(invoice, {}).setdefault(0, items.keys())
|
self.items_based_on_tax_rate.setdefault(invoice, {}).setdefault(0, items.keys())
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ def delete_company_transactions(company_name):
|
|||||||
"Party Account", "Employee", "Sales Taxes and Charges Template",
|
"Party Account", "Employee", "Sales Taxes and Charges Template",
|
||||||
"Purchase Taxes and Charges Template", "POS Profile", "BOM",
|
"Purchase Taxes and Charges Template", "POS Profile", "BOM",
|
||||||
"Company", "Bank Account", "Item Tax Template", "Mode Of Payment",
|
"Company", "Bank Account", "Item Tax Template", "Mode Of Payment",
|
||||||
"Item Default", "Customer", "Supplier"):
|
"Item Default", "Customer", "Supplier", "GST Account"):
|
||||||
delete_for_doctype(doctype, company_name)
|
delete_for_doctype(doctype, company_name)
|
||||||
|
|
||||||
# reset company values
|
# reset company values
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ class StockEntry(StockController):
|
|||||||
if self.purpose not in valid_purposes:
|
if self.purpose not in valid_purposes:
|
||||||
frappe.throw(_("Purpose must be one of {0}").format(comma_or(valid_purposes)))
|
frappe.throw(_("Purpose must be one of {0}").format(comma_or(valid_purposes)))
|
||||||
|
|
||||||
if self.job_card and self.purpose != 'Material Transfer for Manufacture':
|
if self.job_card and self.purpose not in ['Material Transfer for Manufacture', 'Repack']:
|
||||||
frappe.throw(_("For job card {0}, you can only make the 'Material Transfer for Manufacture' type stock entry")
|
frappe.throw(_("For job card {0}, you can only make the 'Material Transfer for Manufacture' type stock entry")
|
||||||
.format(self.job_card))
|
.format(self.job_card))
|
||||||
|
|
||||||
@@ -823,6 +823,7 @@ class StockEntry(StockController):
|
|||||||
if self.job_card:
|
if self.job_card:
|
||||||
job_doc = frappe.get_doc('Job Card', self.job_card)
|
job_doc = frappe.get_doc('Job Card', self.job_card)
|
||||||
job_doc.set_transferred_qty(update_status=True)
|
job_doc.set_transferred_qty(update_status=True)
|
||||||
|
job_doc.set_transferred_qty_in_job_card(self)
|
||||||
|
|
||||||
if self.work_order:
|
if self.work_order:
|
||||||
pro_doc = frappe.get_doc("Work Order", self.work_order)
|
pro_doc = frappe.get_doc("Work Order", self.work_order)
|
||||||
|
|||||||
@@ -69,7 +69,8 @@
|
|||||||
"putaway_rule",
|
"putaway_rule",
|
||||||
"column_break_51",
|
"column_break_51",
|
||||||
"reference_purchase_receipt",
|
"reference_purchase_receipt",
|
||||||
"quality_inspection"
|
"quality_inspection",
|
||||||
|
"job_card_item"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@@ -532,13 +533,22 @@
|
|||||||
"fieldname": "is_finished_item",
|
"fieldname": "is_finished_item",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Is Finished Item"
|
"label": "Is Finished Item"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "job_card_item",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 1,
|
||||||
|
"label": "Job Card Item",
|
||||||
|
"no_copy": 1,
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-12-30 15:00:44.489442",
|
"modified": "2021-02-11 13:47:50.158754",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Stock Entry Detail",
|
"name": "Stock Entry Detail",
|
||||||
|
|||||||
Reference in New Issue
Block a user