fixed patch conflict

This commit is contained in:
Rushabh Mehta 2011-08-30 16:09:01 +05:30
commit 910d955779
83 changed files with 3424 additions and 7764 deletions

View File

@ -5,7 +5,7 @@
{
'creation': '2010-08-08 17:09:34',
'docstatus': 0,
'modified': '2011-06-15 14:42:33',
'modified': '2011-08-09 11:14:09',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
@ -23,6 +23,7 @@
{
'doctype': 'Field Mapper Detail',
'map': 'Yes',
'match_id': 1,
'name': '__common__',
'parent': 'Delivery Note-Receivable Voucher',
'parentfield': 'field_mapper_details',
@ -48,261 +49,14 @@
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 1,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 2,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 3,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 4,
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 5,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 6,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 7,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 8,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 9,
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 10,
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 11,
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 12,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 13,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'price_list_name',
'idx': 14,
'match_id': 0,
'to_field': 'price_list_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge',
'idx': 15,
'match_id': 0,
'to_field': 'charge'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 16,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'terms',
'idx': 17,
'match_id': 0,
'to_field': 'terms'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 18,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 19,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 20,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'batch_no',
'idx': 21,
'match_id': 1,
'to_field': 'batch_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'serial_no',
'idx': 22,
'match_id': 1,
'to_field': 'serial_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 23,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
'idx': 24,
'match_id': 1,
'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt)) / flt(obj.basic_rate)',
'to_field': 'qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 25,
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'base_ref_rate',
'idx': 26,
'match_id': 1,
'to_field': 'base_ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'ref_rate',
'idx': 27,
'match_id': 1,
'to_field': 'ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'basic_rate',
'idx': 28,
'match_id': 1,
'to_field': 'basic_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 29,
'match_id': 1,
'to_field': 'delivery_note'
},
@ -310,8 +64,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 30,
'match_id': 1,
'to_field': 'dn_detail'
},
@ -319,8 +71,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'prevdoc_docname',
'idx': 31,
'match_id': 1,
'to_field': 'sales_order'
},
@ -328,286 +78,27 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'prevdoc_detail_docname',
'idx': 32,
'match_id': 1,
'to_field': 'so_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 33,
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 34,
'match_id': 1,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.basic_rate)',
'idx': 35,
'match_id': 1,
'from_field': 'eval: flt(obj.amount) - flt(obj.billed_amt)',
'to_field': 'amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.export_rate)',
'idx': 36,
'match_id': 1,
'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt)) * flt(obj.export_rate)/flt(obj.basic_rate)',
'to_field': 'export_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'adj_rate',
'idx': 37,
'match_id': 1,
'to_field': 'adj_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 38,
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 39,
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 40,
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 41,
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 42,
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 43,
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 44,
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tax_amount',
'idx': 45,
'match_id': 2,
'to_field': 'tax_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total',
'idx': 46,
'match_id': 2,
'to_field': 'total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_person',
'idx': 47,
'match_id': 3,
'to_field': 'sales_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_designation',
'idx': 48,
'match_id': 3,
'to_field': 'sales_designation'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_percentage',
'idx': 49,
'match_id': 3,
'to_field': 'allocated_percentage'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_amount',
'idx': 50,
'match_id': 3,
'to_field': 'allocated_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'incentives',
'idx': 51,
'match_id': 3,
'to_field': 'incentives'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'source',
'idx': 52,
'match_id': 0,
'to_field': 'source'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'campaign',
'idx': 53,
'match_id': 0,
'to_field': 'campaign'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 54,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_partner',
'idx': 55,
'match_id': 0,
'to_field': 'sales_partner'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'commission_rate',
'idx': 56,
'match_id': 0,
'to_field': 'commission_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_commission',
'idx': 57,
'match_id': 0,
'to_field': 'total_commission'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 58,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'net_total',
'idx': 59,
'match_id': 0,
'to_field': 'net_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total',
'idx': 60,
'match_id': 0,
'to_field': 'grand_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'project_name',
'idx': 61,
'match_id': 0,
'to_field': 'project_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'warehouse',
'idx': 62,
'match_id': 1,
'to_field': 'warehouse'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'from_table': 'Delivery Note',
'idx': 1,
'match_id': 0,
'to_table': 'Receivable Voucher',
'validation_logic': 'docstatus=1'
@ -618,11 +109,10 @@
'doctype': 'Table Mapper Detail',
'from_field': 'delivery_note_details',
'from_table': 'Delivery Note Detail',
'idx': 2,
'match_id': 1,
'to_field': 'entries',
'to_table': 'RV Detail',
'validation_logic': '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1'
'validation_logic': 'amount > ifnull(billed_amt, 0) and docstatus = 1'
},
# Table Mapper Detail
@ -630,7 +120,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'other_charges',
'from_table': 'RV Tax Detail',
'idx': 3,
'match_id': 2,
'to_field': 'other_charges',
'to_table': 'RV Tax Detail',
@ -642,7 +131,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_team',
'from_table': 'Sales Team',
'idx': 4,
'match_id': 3,
'to_field': 'sales_team',
'to_table': 'Sales Team',

View File

@ -14,7 +14,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Project',
'idx': 1,
'match_id': 0,
'name': '__common__',
'parent': 'Project-Receivable Voucher',
@ -26,13 +25,16 @@
# These values are common for all Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'map': 'Yes',
'match_id': 0,
'name': '__common__',
'parent': 'Project-Receivable Voucher',
'parentfield': 'field_mapper_details',
'parenttype': 'DocType Mapper'
'parenttype': 'DocType Mapper',
'to_field': 'customer'
},
# These values are common for all DocType Mapper
@ -52,35 +54,7 @@
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 1,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 2,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 3,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 4,
'to_field': 'territory'
'doctype': 'Field Mapper Detail'
},
# Table Mapper Detail

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:35',
'docstatus': 0,
'modified': '2011-05-13 11:26:20',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'Administrator'
},
@ -23,6 +23,7 @@
{
'doctype': 'Field Mapper Detail',
'map': 'Yes',
'match_id': 1,
'name': '__common__',
'parent': 'Purchase Order-Payable Voucher',
'parentfield': 'field_mapper_details',
@ -45,156 +46,10 @@
'name': 'Purchase Order-Payable Voucher'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 1,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 2,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 3,
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 4,
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier',
'idx': 5,
'match_id': 0,
'to_field': 'supplier'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier_name',
'idx': 6,
'match_id': 0,
'to_field': 'supplier_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier_name',
'idx': 6,
'match_id': 1,
'to_field': 'supplier_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier_address',
'idx': 7,
'match_id': 0,
'to_field': 'supplier_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 8,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 9,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 10,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 11,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 12,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 13,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 14,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 15,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
'idx': 16,
'match_id': 1,
'to_field': 'qty'
},
@ -202,8 +57,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'purchase_rate',
'idx': 17,
'match_id': 1,
'to_field': 'rate'
},
@ -211,44 +64,20 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.purchase_rate)',
'idx': 18,
'match_id': 1,
'to_field': 'amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'import_rate',
'idx': 19,
'match_id': 1,
'to_field': 'import_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.import_rate)',
'idx': 20,
'match_id': 1,
'to_field': 'import_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 21,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 22,
'match_id': 1,
'to_field': 'purchase_order'
},
@ -256,124 +85,13 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 23,
'match_id': 1,
'to_field': 'po_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 24,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 25,
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'category',
'idx': 26,
'match_id': 2,
'to_field': 'category'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'add_deduct_tax',
'idx': 27,
'match_id': 2,
'to_field': 'add_deduct_tax'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 28,
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 29,
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 30,
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 31,
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 32,
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'cost_center',
'idx': 33,
'match_id': 2,
'to_field': 'cost_center'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 34,
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'project_name',
'idx': 35,
'match_id': 0,
'to_field': 'project_name'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'from_table': 'Purchase Order',
'idx': 1,
'match_id': 0,
'to_table': 'Payable Voucher',
'validation_logic': 'docstatus =1'
@ -384,7 +102,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'po_details',
'from_table': 'PO Detail',
'idx': 2,
'match_id': 1,
'to_field': 'entries',
'to_table': 'PV Detail',
@ -396,7 +113,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'purchase_tax_details',
'from_table': 'Purchase Tax Detail',
'idx': 3,
'match_id': 2,
'to_field': 'purchase_tax_details',
'to_table': 'Purchase Tax Detail',

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:35',
'docstatus': 0,
'modified': '2011-05-13 12:18:34',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'Administrator'
},
@ -23,6 +23,7 @@
{
'doctype': 'Field Mapper Detail',
'map': 'Yes',
'match_id': 1,
'name': '__common__',
'parent': 'Purchase Receipt-Payable Voucher',
'parentfield': 'field_mapper_details',
@ -45,156 +46,10 @@
'name': 'Purchase Receipt-Payable Voucher'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 1,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 2,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier',
'idx': 3,
'match_id': 0,
'to_field': 'supplier'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier_name',
'idx': 4,
'match_id': 0,
'to_field': 'supplier_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier_address',
'idx': 5,
'match_id': 0,
'to_field': 'supplier_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 6,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 7,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 8,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 9,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 10,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 11,
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 12,
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 13,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 14,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 15,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 16,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
'idx': 17,
'match_id': 1,
'to_field': 'qty'
},
@ -202,8 +57,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'purchase_rate',
'idx': 18,
'match_id': 1,
'to_field': 'rate'
},
@ -211,26 +64,13 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.purchase_rate)',
'idx': 19,
'match_id': 1,
'to_field': 'amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'import_rate',
'idx': 20,
'match_id': 1,
'to_field': 'import_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.import_rate)',
'idx': 21,
'match_id': 1,
'to_field': 'import_amount'
},
@ -238,8 +78,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 22,
'match_id': 1,
'to_field': 'purchase_receipt'
},
@ -247,8 +85,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'prevdoc_docname',
'idx': 23,
'match_id': 1,
'to_field': 'purchase_order'
},
@ -256,8 +92,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 24,
'match_id': 1,
'to_field': 'pr_detail'
},
@ -265,125 +99,14 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'prevdoc_detail_docname',
'idx': 25,
'match_id': 1,
'to_field': 'po_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 26,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 27,
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'category',
'idx': 28,
'match_id': 2,
'to_field': 'category'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'add_deduct_tax',
'idx': 29,
'match_id': 2,
'to_field': 'add_deduct_tax'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 30,
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 31,
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 32,
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 33,
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 34,
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'cost_center',
'idx': 35,
'match_id': 2,
'to_field': 'cost_center'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 36,
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'project_name',
'idx': 37,
'match_id': 0,
'to_field': 'project_name'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'from_field': 'purchase_receipt_details',
'from_table': 'Purchase Receipt Detail',
'idx': 1,
'match_id': 1,
'to_field': 'entries',
'to_table': 'PV Detail',
@ -394,7 +117,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Purchase Receipt',
'idx': 2,
'match_id': 0,
'to_table': 'Payable Voucher',
'validation_logic': 'docstatus=1'
@ -405,7 +127,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'purchase_tax_details',
'from_table': 'Purchase Tax Detail',
'idx': 3,
'match_id': 2,
'to_field': 'purchase_tax_details',
'to_table': 'Purchase Tax Detail',

View File

@ -5,7 +5,7 @@
{
'creation': '2010-08-08 17:09:36',
'docstatus': 0,
'modified': '2011-05-16 17:34:21',
'modified': '2011-08-08 16:56:40',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
@ -50,7 +50,6 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 1,
'match_id': 0,
'to_field': 'customer'
},
@ -58,269 +57,31 @@
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 2,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 3,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 4,
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 5,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 6,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 7,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 8,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 10,
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 11,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 12,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge',
'idx': 13,
'match_id': 0,
'to_field': 'charge'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 14,
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'price_list_name',
'idx': 15,
'match_id': 0,
'to_field': 'price_list_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 16,
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 17,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 18,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 19,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 20,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: flt(obj.qty) - flt(obj.billed_qty)',
'idx': 21,
'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt))/flt(obj.basic_rate)',
'match_id': 1,
'to_field': 'qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'base_ref_rate',
'idx': 22,
'match_id': 1,
'to_field': 'base_ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 22,
'match_id': 1,
'to_field': 'so_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'ref_rate',
'idx': 23,
'match_id': 1,
'to_field': 'ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 23,
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'basic_rate',
'idx': 24,
'match_id': 1,
'to_field': 'basic_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 25,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 26,
'match_id': 1,
'to_field': 'sales_order'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 27,
'match_id': 1,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 29,
'match_id': 1,
'to_field': 'export_rate'
'to_field': 'so_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 30,
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.basic_rate)',
'idx': 31,
'from_field': 'eval:flt(obj.amount) - flt(obj.billed_amt)',
'match_id': 1,
'to_field': 'amount'
},
@ -328,342 +89,24 @@
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.billed_qty)) * flt(obj.export_rate)',
'idx': 32,
'from_field': 'eval: (flt(obj.amount) - flt(obj.billed_amt))* flt(obj.export_rate)/flt(obj.basic_rate)',
'match_id': 1,
'to_field': 'export_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'adj_rate',
'idx': 33,
'match_id': 1,
'to_field': 'adj_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 34,
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 35,
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 36,
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 37,
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 38,
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_amount',
'idx': 39,
'match_id': 2,
'to_field': 'total_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 39,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_tax_amount',
'idx': 40,
'match_id': 2,
'to_field': 'total_tax_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 41,
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'cost_center_other_charges',
'idx': 42,
'match_id': 2,
'to_field': 'cost_center_other_charges'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 43,
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tax_amount',
'idx': 44,
'match_id': 2,
'to_field': 'tax_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total',
'idx': 45,
'match_id': 2,
'to_field': 'total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'source',
'idx': 46,
'match_id': 0,
'to_field': 'source'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'campaign',
'idx': 47,
'match_id': 0,
'to_field': 'campaign'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tc_name',
'idx': 48,
'match_id': 0,
'to_field': 'tc_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'select_print_heading',
'idx': 49,
'match_id': 0,
'to_field': 'select_print_heading'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'terms',
'idx': 50,
'match_id': 0,
'to_field': 'terms'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'net_total',
'idx': 51,
'match_id': 0,
'to_field': 'net_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total',
'idx': 52,
'match_id': 0,
'to_field': 'grand_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'other_charges_total',
'idx': 53,
'match_id': 0,
'to_field': 'other_charges_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rounded_total',
'idx': 54,
'match_id': 0,
'to_field': 'rounded_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'in_words',
'idx': 55,
'match_id': 0,
'to_field': 'in_words'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total_export',
'idx': 56,
'match_id': 0,
'to_field': 'grand_total_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rounded_total_export',
'idx': 57,
'match_id': 0,
'to_field': 'rounded_total_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'in_words_export',
'idx': 58,
'match_id': 0,
'to_field': 'in_words_export'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'project_name',
'idx': 59,
'match_id': 0,
'to_field': 'project_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_partner',
'idx': 60,
'match_id': 0,
'to_field': 'sales_partner'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_designation',
'idx': 61,
'match_id': 3,
'to_field': 'sales_designation'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'commission_rate',
'idx': 62,
'match_id': 0,
'to_field': 'commission_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_commission',
'idx': 63,
'match_id': 0,
'to_field': 'total_commission'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_percentage',
'idx': 64,
'match_id': 3,
'to_field': 'allocated_percentage'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_person',
'idx': 65,
'match_id': 3,
'to_field': 'sales_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_amount',
'idx': 66,
'match_id': 3,
'to_field': 'allocated_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'incentives',
'idx': 67,
'match_id': 3,
'to_field': 'incentives'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'reserved_warehouse',
'idx': 68,
'match_id': 1,
'to_field': 'warehouse'
},
@ -672,7 +115,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Sales Order',
'idx': 1,
'match_id': 0,
'to_table': 'Receivable Voucher',
'validation_logic': 'docstatus=1'
@ -683,11 +125,10 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_order_detail',
'from_table': 'Sales Order Detail',
'idx': 2,
'match_id': 1,
'to_field': 'entries',
'to_table': 'RV Detail',
'validation_logic': '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1'
'validation_logic': 'amount > ifnull(billed_amt, 0) and docstatus = 1'
},
# Table Mapper Detail
@ -695,7 +136,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'other_charges',
'from_table': 'RV Tax Detail',
'idx': 3,
'match_id': 2,
'to_field': 'other_charges',
'to_table': 'RV Tax Detail',
@ -707,7 +147,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_team',
'from_table': 'Sales Team',
'idx': 4,
'match_id': 3,
'to_field': 'sales_team',
'to_table': 'Sales Team',

View File

@ -1,54 +0,0 @@
$.extend(cur_frm.cscript, {
Generate: function(doc, dt, dn) {
cur_frm.cscript.clear_installments(doc);
for(var i=0; i< doc.no_of_installments; i++) {
d = LocalDB.add_child(doc, 'Loan Installment', 'installments');
d.amount = doc.loan_amount / doc.no_of_installments;
d.due_date = dateutil.add_months(doc.start_date, i+1);
}
cur_frm.refresh();
},
/* submit:function(doc){
data=doc.get_values();
data['']=
$c_obj(make_doclist(dt,dn),'loan_post',data,function(){});
},*/
refresh: function(doc) {
cur_frm.cscript.hide_show_buttons(doc);
},
hide_show_buttons: function(doc) {
if(doc.docstatus==0) {
hide_field('Installment Reciept'); unhide_field('Generate');
} else if (doc.docstatus==1) {
unhide_field('Installment Reciept');hide_field('Generate');
}
},
clear_installments: function(doc) {
$.each(getchildren('Loan Installment', doc.name, 'installments', 'Loan'),
function(i, d) {
LocalDB.delete_doc('Loan Installment', d.name);
}
)
},
'Installment Reciept': function(doc, dt, dn) {
var d = new wn.widgets.Dialog({
width: 500,
title: 'Add a new payment installment',
fields: [
{fieldtype:'Data', label:'Cheque Number', fieldname:'cheque_number', reqd:1},
{fieldtype:'Date', label:'Cheque Date', fieldname:'cheque_date', reqd:1},
{fieldtype:'Link', label:'Bank Account', fieldname:'bank_account', reqd:1, options:'Account'},
{fieldtype:'Button', label:'Update',fieldname:'update'}
]
})
d.show();
d.fields_dict.update.input.onclick = function() {
var data = d.get_values();
if(data) {
$c_obj(make_doclist(dt,dn),'loan_installment_post',data,function(){cur_frm.refresh(); d.hide();});
}
}
}
})

View File

@ -1,48 +0,0 @@
import webnotes
from webnotes.model.doc import make_autoname, Document, addchild
from webnotes import msgprint
from webnotes.utils import get_defaults
import json
from accounts.utils import post_jv
sql = webnotes.conn.sql
class DocType:
def __init__(self, doc, doclist):
self.doc, self.doclist = doc, doclist
def autoname(self):
"""
Create Loan Id using naming_series pattern
"""
self.doc.name = make_autoname(self.doc.naming_series+ '.#####')
def loan_post(self):
data['voucher_type']='Loan Issue'
data['naming_series']='JV'
data['fiscal_year'] = get_defaults()['fiscal_year'] # To be modified to take care
data['company'] = get_defaults()['company']
data['debit_account'] = self.doc['receivable_account']
data['credit_account'] = self.doc['account']
data['amount'] = self.doc.loan_amount
jv_name=post_jv(data)
def loan_installment_post(self, args):
"""
Posts the loan receipt into Journal Voucher
"""
next_inst = sql("select amount,name from `tabLoan Installment` where parent=%s and ifnull(cheque_number,'')='' order by due_date limit 1",self.doc.name)
data = json.loads(args)
data['voucher_type']='Loan Receipt'
data['naming_series']='JV'
data['amount']=next_inst[0][0]
data['debit_account']=data.get('bank_account')
data['credit_account']=self.doc.account
data['fiscal_year']=get_defaults()['fiscal_year']
data['company']=get_defaults()['company']
jv_name=post_jv(data)
sql("update `tabLoan Installment` set cheque_number=%s, cheque_date=%s, jv_number=%s where name=%s",(data.get('cheque_number'),data.get('cheque_date'),jv_name,next_inst[0][1]))
self.doclist = [Document(d.doctype, d.name) for d in self.doclist]

View File

@ -1,172 +0,0 @@
# DocType, Loan
[
# These values are common in all dictionaries
{
'creation': '2011-07-15 10:35:26',
'docstatus': 0,
'modified': '2011-07-18 12:12:19',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'_last_update': '1310963215',
'colour': 'White:FFF',
'doctype': 'DocType',
'module': 'Accounts',
'name': '__common__',
'section_style': 'Simple',
'show_in_menu': 0,
'version': 15
},
# These values are common for all DocField
{
'doctype': 'DocField',
'name': '__common__',
'parent': 'Loan',
'parentfield': 'fields',
'parenttype': 'DocType',
'permlevel': 0
},
# These values are common for all DocPerm
{
'doctype': 'DocPerm',
'name': '__common__',
'parent': 'Loan',
'parentfield': 'permissions',
'parenttype': 'DocType',
'read': 1,
'role': 'Accounts User'
},
# DocType, Loan
{
'doctype': 'DocType',
'name': 'Loan'
},
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 1,
'permlevel': 0,
'submit': 1,
'write': 1
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 2,
'permlevel': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'naming_series',
'fieldtype': 'Select',
'idx': 1,
'label': 'Naming Series',
'options': '\nLOAN',
'reqd': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'account',
'fieldtype': 'Link',
'idx': 2,
'label': 'Account',
'options': 'Account',
'reqd': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'receivable_account',
'fieldtype': 'Link',
'idx': 3,
'label': 'Receivable Account',
'options': 'Account'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'invoice',
'fieldtype': 'Link',
'idx': 4,
'label': 'Invoice',
'options': 'Receivable Voucher',
'reqd': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'loan_amount',
'fieldtype': 'Currency',
'idx': 5,
'label': 'Loan Amount',
'reqd': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'start_date',
'fieldtype': 'Date',
'idx': 6,
'label': 'Start Date',
'reqd': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'no_of_installments',
'fieldtype': 'Int',
'idx': 7,
'label': 'No of Installments',
'reqd': 1
},
# DocField
{
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 8,
'label': 'Generate',
'trigger': 'Client'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'installments',
'fieldtype': 'Table',
'idx': 9,
'label': 'Installments',
'options': 'Loan Installment'
},
# DocField
{
'allow_on_submit': 1,
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 10,
'label': 'Installment Reciept'
}
]

View File

@ -1,17 +0,0 @@
import unittest
import webnotes
from webnotes.model.code import get_obj
class TestScheduleGeneartion(unittest.TestCase):
def setUp(self):
webnotes.conn.begin()
# create a mock loan
self.loan = get_obj('Loan', 'LOAN00001')
def test_generation(self):
"test the genaration of loan installments"
self.loan.generate()
self.assertEqual(self.loan.get_installment_total(), self.loan.doc.loan_amount)
def tearDown(self):
webnotes.conn.rollback()

View File

@ -1,111 +0,0 @@
# DocType, Loan Installment
[
# These values are common in all dictionaries
{
'creation': '2011-07-15 10:36:42',
'docstatus': 0,
'modified': '2011-07-15 15:48:34',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'colour': 'White:FFF',
'doctype': 'DocType',
'istable': 1,
'module': 'Accounts',
'name': '__common__',
'section_style': 'Simple',
'show_in_menu': 0,
'version': 4
},
# These values are common for all DocField
{
'doctype': 'DocField',
'name': '__common__',
'parent': 'Loan Installment',
'parentfield': 'fields',
'parenttype': 'DocType'
},
# DocType, Loan Installment
{
'doctype': 'DocType',
'name': 'Loan Installment'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'amount',
'fieldtype': 'Currency',
'idx': 1,
'label': 'Amount',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'due_date',
'fieldtype': 'Date',
'idx': 2,
'label': 'Due Date',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'cheque_number',
'fieldtype': 'Data',
'idx': 3,
'label': 'Cheque Number',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'cheque_date',
'fieldtype': 'Date',
'idx': 4,
'label': 'Cheque Date',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'deposit_date',
'fieldtype': 'Date',
'idx': 5,
'label': 'Deposit Date',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'realized_date',
'fieldtype': 'Date',
'idx': 6,
'label': 'Realized Date',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'jv_number',
'fieldtype': 'Link',
'hidden': 0,
'idx': 7,
'label': 'JV Number',
'options': 'Journal Voucher',
'permlevel': 1
}
]

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2011-07-26 17:01:34',
'creation': '2011-08-29 13:45:35',
'docstatus': 0,
'modified': '2011-07-28 12:55:50',
'modified': '2011-08-29 13:45:35',
'modified_by': 'Administrator',
'owner': 'Administrator'
},

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2011-07-27 13:14:29',
'creation': '2011-08-29 13:45:35',
'docstatus': 0,
'modified': '2011-07-27 13:14:29',
'modified': '2011-08-29 13:45:35',
'modified_by': 'Administrator',
'owner': 'Administrator'
},

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2011-07-26 18:11:47',
'creation': '2011-08-29 13:45:35',
'docstatus': 0,
'modified': '2011-07-26 18:27:01',
'modified': '2011-08-29 13:45:35',
'modified_by': 'Administrator',
'owner': 'Administrator'
},

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2011-07-27 13:14:29',
'creation': '2011-08-29 13:45:35',
'docstatus': 0,
'modified': '2011-07-27 13:14:29',
'modified': '2011-08-29 13:45:35',
'modified_by': 'Administrator',
'owner': 'Administrator'
},

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2011-07-28 12:13:41',
'creation': '2011-08-29 13:45:36',
'docstatus': 0,
'modified': '2011-07-28 12:56:47',
'modified': '2011-08-29 13:45:36',
'modified_by': 'Administrator',
'owner': 'Administrator'
},

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2011-07-27 13:14:29',
'creation': '2011-08-29 13:45:36',
'docstatus': 0,
'modified': '2011-07-27 13:14:29',
'modified': '2011-08-29 13:45:36',
'modified_by': 'Administrator',
'owner': 'Administrator'
},

View File

@ -45,21 +45,11 @@
'name': 'Indent-Purchase Order'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 1,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 2,
'match_id': 0,
'to_field': 'company'
},
@ -68,7 +58,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 3,
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
@ -77,7 +66,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 4,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -86,7 +74,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 5,
'match_id': 1,
'to_field': 'prevdoc_detail_docname'
},
@ -95,7 +82,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'uom',
'idx': 6,
'match_id': 1,
'to_field': 'stock_uom'
},
@ -104,88 +90,14 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:flt(1)',
'idx': 7,
'match_id': 1,
'to_field': 'conversion_factor'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'uom',
'idx': 8,
'match_id': 1,
'to_field': 'uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'warehouse',
'idx': 9,
'match_id': 1,
'to_field': 'warehouse'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'schedule_date',
'idx': 10,
'match_id': 1,
'to_field': 'schedule_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 11,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 12,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 13,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 14,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 15,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:flt(obj.qty) - flt(obj.ordered_qty)',
'idx': 16,
'match_id': 1,
'to_field': 'stock_qty'
},
@ -194,7 +106,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:flt(obj.qty) - flt(obj.ordered_qty)',
'idx': 17,
'match_id': 1,
'to_field': 'qty'
},
@ -203,7 +114,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Indent',
'idx': 1,
'match_id': 0,
'reference_key': 'prevdoc_docname',
'to_table': 'Purchase Order',
@ -215,7 +125,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'indent_details',
'from_table': 'Indent Detail',
'idx': 2,
'match_id': 1,
'reference_doctype_key': 'prevdoc_doctype',
'to_field': 'po_details',

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2011-04-06 15:33:09',
'creation': '2011-05-05 15:58:13',
'docstatus': 0,
'modified': '2011-05-04 14:49:55',
'modified': '2011-05-05 16:20:10',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
@ -49,7 +49,6 @@
'checking_operator': '>=',
'doctype': 'Field Mapper Detail',
'from_field': 'transaction_date',
'idx': 1,
'map': 'No',
'match_id': 0,
'to_field': 'transaction_date'
@ -60,148 +59,43 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 2,
'map': 'Yes',
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 3,
'map': 'Yes',
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tc_name',
'idx': 4,
'map': 'Yes',
'match_id': 0,
'to_field': 'tc_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'terms',
'idx': 5,
'map': 'Yes',
'match_id': 0,
'to_field': 'terms'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'letter_head',
'idx': 6,
'map': 'Yes',
'match_id': 0,
'to_field': 'letter_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 7,
'map': 'Yes',
'match_id': 1,
'to_field': 'sales_order_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 8,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 9,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 10,
'map': 'Yes',
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 11,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 12,
'map': 'Yes',
'match_id': 1,
'to_field': 'uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'qty',
'idx': 13,
'map': 'Yes',
'match_id': 1,
'to_field': 'qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'reserved_warehouse',
'idx': 14,
'map': 'Yes',
'match_id': 1,
'to_field': 'warehouse'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 15,
'map': 'Yes',
'match_id': 1,
'to_field': 'brand'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'from_field': 'sales_order_details',
'from_table': 'Sales Order Detail',
'idx': 1,
'match_id': 1,
'reference_doctype_key': 'prevdoc_doctype',
'reference_key': 'prevdoc_detail_docname',
@ -214,7 +108,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Sales Order',
'idx': 2,
'match_id': 0,
'reference_key': 'prevdoc_docname',
'to_table': 'Indent',

3
erpnext_version.py Normal file
View File

@ -0,0 +1,3 @@
# version info
version='1.0.0'

View File

@ -0,0 +1,12 @@
div.dashboard_table td {
width: 50%;
}
div.dashboard-title {
font-weight: bold;
padding: '3px 0px';
}
div.dashboard-graph {
height: 180px;
}

View File

@ -0,0 +1,8 @@
<div class="layout_wrapper dashboard">
<div class="header"></div>
<div class="body">
<!-- 4x2 table to show the dashboards-->
<div class="help_box">Loading...</div>
<div class="dashboard_table"></div>
</div>
</div>

View File

@ -0,0 +1,142 @@
pscript.onload_dashboard = function() {
// load jqplot
$.scriptPath = 'js/'
$.require(['jquery/jquery.jqplot.min.js',
'jquery/jqplot-plugins/jqplot.barRenderer.js',
'jquery/jqplot-plugins/jqplot.canvasAxisTickRenderer.min.js',
'jquery/jqplot-plugins/jqplot.canvasTextRenderer.min.js',
'jquery/jqplot-plugins/jqplot.categoryAxisRenderer.min.js']);
pscript.dashboard_settings = {
company: sys_defaults.company,
start: dateutil.obj_to_str(dateutil.add_days(new Date(), -180)),
end: dateutil.obj_to_str(new Date()),
interval: 30
}
var ph = new PageHeader($('.dashboard .header').get(0), 'Dashboard');
var db = new Dashboard();
ph.add_button('Settings', db.show_settings);
db.refresh();
}
Dashboard = function() {
var me = this;
$.extend(me, {
refresh: function() {
$('.dashboard .help_box').css('display', 'block');
$c_page('home', 'dashboard', 'load_dashboard', JSON.stringify(pscript.dashboard_settings), function(r,rt) {
$('.dashboard .help_box').css('display', 'none');
me.render(r.message);
})
},
render: function(data) {
$('.dashboard_table').html('');
var t = make_table($('.dashboard_table').get(0), 4, 2, '100%', ['50%', '50%'], {padding: '5px'});
var ridx=0; var cidx=0;
for(var i=0; i< data.length; i++) {
// switch columns and rows
if(cidx==2) { cidx=0; ridx++}
// give an id!
var cell = $td(t,ridx,cidx);
var title = $a(cell, 'div', 'dashboard-title', '', data[i][0].title);
var parent = $a(cell, 'div', 'dashboard-graph');
if(data[i][0].comment);
var comment = $a(cell, 'div', 'comment', '', data[i][0].comment)
parent.id = '_dashboard' + ridx + '-' + cidx;
// render graph
me.render_graph(parent.id, data[i][1], data[i][0].fillColor);
cidx++;
}
},
render_graph: function(parent, values, fillColor) {
var vl = [];
$.each(values, function(i,v) {
vl.push([dateutil.str_to_user(v[0]), v[1]]);
});
$.jqplot(parent, [vl], {
seriesDefaults:{
renderer:$.jqplot.BarRenderer,
rendererOptions: {fillToZero: true},
},
axes: {
// Use a category axis on the x axis and use our custom ticks.
xaxis: {
min: 0,
renderer: $.jqplot.CategoryAxisRenderer,
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
tickOptions: {
angle: -30,
fontSize: '8pt'
}
},
// Pad the y axis just a little so bars can get close to, but
// not touch, the grid boundaries. 1.2 is the default padding.
yaxis: {
min: 0,
pad: 1.05,
tickOptions: {formatString: '%d'}
}
},
seriesColors: [fillColor]
});
},
show_settings: function() {
var d = new wn.widgets.Dialog({
title: 'Set Company Settings',
width: 500,
fields: [
{
label:'Company',
reqd: 1,
fieldname:'company',
fieldtype:'Link',
options: 'Company'
},
{
label:'Start Date',
reqd: 1,
fieldname:'start',
fieldtype:'Date',
},
{
label:'End Date',
reqd: 1,
fieldname:'end',
fieldtype:'Date',
},
{
label:'Interval',
reqd: 1,
fieldname:'interval',
fieldtype:'Int'
},
{
label:'Regenerate',
fieldname:'refresh',
fieldtype:'Button'
}
]
});
d.onshow = function() {
d.set_values(pscript.dashboard_settings);
}
d.fields_dict.refresh.input.onclick = function() {
pscript.dashboard_settings = d.get_values();
me.refresh();
d.hide();
}
d.show();
}
})
}

View File

@ -0,0 +1,260 @@
dashboards = [
{
'type': 'account',
'account': 'Income',
'title': 'Income',
'fillColor': '#90EE90'
},
{
'type': 'account',
'account': 'Expenses',
'title': 'Expenses',
'fillColor': '#90EE90'
},
{
'type': 'receivables',
'title': 'Receivables',
'fillColor': '#FFE4B5'
},
{
'type': 'payables',
'title': 'Payables',
'fillColor': '#FFE4B5'
},
{
'type': 'collection',
'title': 'Collection',
'comment':'This info comes from the accounts your have marked as "Bank or Cash"',
'fillColor': '#DDA0DD'
},
{
'type': 'payments',
'title': 'Payments',
'comment':'This info comes from the accounts your have marked as "Bank or Cash"',
'fillColor': '#DDA0DD'
},
{
'type': 'creation',
'doctype': 'Quotation',
'title': 'New Quotations',
'fillColor': '#ADD8E6'
},
{
'type': 'creation',
'doctype': 'Sales Order',
'title': 'New Orders',
'fillColor': '#ADD8E6'
}
]
class DashboardWidget:
def __init__(self, company, start, end, interval):
from webnotes.utils import getdate
from webnotes.model.code import get_obj
import webnotes
self.company = company
self.abbr = webnotes.conn.get_value('Company', company, 'abbr')
self.start = getdate(start)
self.end = getdate(end)
self.interval = interval
self.glc = get_obj('GL Control')
self.cash_accounts = [d[0] for d in webnotes.conn.sql("""
select name from tabAccount
where account_type='Bank or Cash'
and company = %s and docstatus = 0
""", company)]
self.receivables_group = webnotes.conn.get_value('Company', company,'receivables_group')
self.payables_group = webnotes.conn.get_value('Company', company,'payables_group')
# list of bank and cash accounts
self.bc_list = [s[0] for s in webnotes.conn.sql("select name from tabAccount where account_type='Bank or Cash'")]
def timeline(self):
"""
get the timeline for the dashboard
"""
import webnotes
from webnotes.utils import add_days
tl = []
if self.start > self.end:
webnotes.msgprint("Start must be before end", raise_exception=1)
curr = self.start
tl.append(curr)
while curr < self.end:
curr = add_days(curr, self.interval, 'date')
tl.append(curr)
tl.append(self.end)
return tl
def generate(self, opts):
"""
Generate the dasboard
"""
from webnotes.utils import flt
tl = self.timeline()
self.out = []
for i in range(len(tl)-1):
self.out.append([tl[i+1].strftime('%Y-%m-%d'), flt(self.value(opts, tl[i], tl[i+1])) or 0])
return self.out
def get_account_balance(self, acc, start):
"""
Get as on account balance
"""
import webnotes
# add abbreviation to company
if not acc.endswith(self.abbr):
acc += ' - ' + self.abbr
# get other reqd parameters
try:
globals().update(webnotes.conn.sql('select debit_or_credit, lft, rgt from tabAccount where name=%s', acc, as_dict=1)[0])
except Exception,e:
webnotes.msgprint('Wrongly defined account: ' + acc)
print acc
raise e
return self.glc.get_as_on_balance(acc, self.get_fiscal_year(start), start, debit_or_credit, lft, rgt)
def get_fiscal_year(self, dt):
"""
get fiscal year from date
"""
import webnotes
return webnotes.conn.sql("""
select name from `tabFiscal Year`
where year_start_date <= %s and
DATE_ADD(year_start_date, INTERVAL 1 YEAR) >= %s
""", (dt, dt))[0][0]
def get_creation_trend(self, doctype, start, end):
"""
Get creation # of creations in period
"""
import webnotes
return int(webnotes.conn.sql("""
select count(*) from `tab%s` where creation between %s and %s and docstatus=1
""" % (doctype, '%s','%s'), (start, end))[0][0])
def get_account_amt(self, acc, start, end, debit_or_credit):
"""
Get debit, credit over a period
"""
import webnotes
# add abbreviation to company
if not acc.endswith(self.abbr):
acc += ' - ' + self.abbr
ret = webnotes.conn.sql("""
select ifnull(sum(ifnull(t1.debit,0)),0), ifnull(sum(ifnull(t1.credit,0)),0)
from `tabGL Entry` t1, tabAccount t2
where t1.account = t2.name
and t2.is_pl_account = 'Yes'
and t2.debit_or_credit=%s
and ifnull(t1.is_cancelled, 'No')='No'
and t1.posting_date between %s and %s
""", (debit_or_credit, start, end))[0]
return debit_or_credit=='Credit' and float(ret[1]-ret[0]) or float(ret[0]-ret[1])
def get_bank_amt(self, debit_or_credit, master_type, start, end):
"""
Get collection (reduction in receivables over a period)
"""
import webnotes
reg = '('+'|'.join(self.bc_list) + ')'
return webnotes.conn.sql("""
select sum(t1.%s)
from `tabGL Entry` t1, tabAccount t2
where t1.account = t2.name
and t2.master_type='%s'
and t1.%s > 0
and t1.against REGEXP '%s'
and ifnull(t1.is_cancelled, 'No')='No'
and t1.posting_date between '%s' and '%s'
""" % (debit_or_credit, master_type, debit_or_credit, reg, start, end))[0][0]
def value(self, opts, start, end):
"""
Value of the series on a particular date
"""
import webnotes
if opts['type']=='account':
debit_or_credit = 'Debit'
if opts['account']=='Income':
debit_or_credit = 'Credit'
return self.get_account_amt(opts['account'], start, end, debit_or_credit)
elif opts['type']=='receivables':
return self.get_account_balance(self.receivables_group, end)[2]
elif opts['type']=='payables':
return self.get_account_balance(self.payables_group, end)[2]
elif opts['type']=='collection':
return self.get_bank_amt('credit', 'Customer', start, end)
elif opts['type']=='payments':
return self.get_bank_amt('debit', 'Supplier', start, end)
elif opts['type']=='creation':
return self.get_creation_trend(opts['doctype'], start, end)
def load_dashboard(args):
"""
Get dashboard based on
1. Company (default company)
2. Start Date (last 3 months)
3. End Date (today)
4. Interval (7 days)
"""
dl = []
import json
args = json.loads(args)
dw = DashboardWidget(args['company'], args['start'], args['end'], int(args['interval']))
# render the dashboards
for d in dashboards:
dl.append([d, dw.generate(d)])
return dl
if __name__=='__main__':
import sys
sys.path.append('/var/www/webnotes/wnframework/cgi-bin')
from webnotes.db import Database
import webnotes
webnotes.conn = Database(use_default=1)
webnotes.session = {'user':'Administrator'}
print load_dashboard("""{
"company": "My Test",
"start": "2011-05-01",
"end": "2011-08-01",
"interval": "7"
}""")

View File

@ -0,0 +1,49 @@
# Page, dashboard
[
# These values are common in all dictionaries
{
'creation': '2011-08-25 16:22:44',
'docstatus': 0,
'modified': '2011-08-25 16:22:54',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all Page
{
'category': 'Standard',
'doctype': 'Page',
'module': 'Home',
'name': '__common__',
'page_name': 'Dashboard',
'standard': 'Yes'
},
# These values are common for all Page Role
{
'doctype': 'Page Role',
'name': '__common__',
'parent': 'dashboard',
'parentfield': 'roles',
'parenttype': 'Page'
},
# Page, dashboard
{
'doctype': 'Page',
'name': 'dashboard'
},
# Page Role
{
'doctype': 'Page Role',
'role': 'System Manager'
},
# Page Role
{
'doctype': 'Page Role',
'role': 'Accounts Manager'
}
]

View File

@ -25,12 +25,7 @@ pscript.home_make_body = function() {
wrapper.banner_area = $a(wrapper.head, 'div');
wrapper.setup_wizard_area = $a(wrapper.body, 'div', 'setup-wizard')
wrapper.system_message_area = $a(wrapper.body, 'div', '',
{marginBottom:'16px', padding:'8px', backgroundColor:'#FFD', border:'1px dashed #AA6', display:'none'})
wrapper.setup_wizard_area = $a(wrapper.body, 'div', 'setup-wizard');
}
// ==================================
@ -436,8 +431,8 @@ FeedList.prototype.make_head = function() {
// head
$a(this.head,'h1','', {display:'inline'}, 'Home');
$a(this.head,'span','link_type', {marginLeft:'7px'}, '[?]', function() {
msgprint('<b>What appears here?</b> This is where you get updates of everything you are allowed to access and generates an update')
$a(this.head,'span','link_type', {marginLeft:'7px'}, 'help', function() {
msgprint('<b>What appears here?</b> This is where you get updates of everything you are permitted to follow')
})
// refresh
@ -445,6 +440,11 @@ FeedList.prototype.make_head = function() {
{cursor:'pointer', marginLeft:'7px', fontSize:'11px'}, 'refresh',
function() { me.run(); }
);
if(has_common(user_roles, ['System Manager','Accounts Manager'])) {
$btn(this.head, 'Dashboard', function() {loadpage('dashboard'); }, {marginLeft:'7px'})
}
}
FeedList.prototype.run = function() {
@ -594,14 +594,15 @@ HomeStatusBar = function() {
this.render = function(r) {
this.wrapper.innerHTML = '';
this.span = $a(this.wrapper, 'span', 'home-status-link')
this.span = $a(this.wrapper, 'span', 'link_type', {fontWeight:'bold'});
this.span.onclick = function() { loadpage('My Company') }
if(r.unread_messages) {
this.span.innerHTML = '<span class="home-status-unread">' + r.unread_messages + '</span> unread message' + (cint(r.unread_messages) > 1 ? 's' : '');
this.span.innerHTML = '<span class="home-status-unread">' + r.unread_messages + '</span> unread';
} else {
this.span.innerHTML = 'No unread messages.';
this.span.innerHTML = 'Team / Messages';
}
}
}
@ -613,11 +614,7 @@ pscript.home_make_status = function() {
$c_page('home', 'event_updates', 'get_status_details', user,
function(r,rt) {
home_status_bar.render(r.message);
// system_messages
if(r.message.system_message)
pscript.show_system_message(wrapper, r.message.system_message);
// render online users
pscript.online_users_obj.render(r.message.online_users);
pscript.online_users = r.message.online_users;
@ -630,24 +627,6 @@ pscript.home_make_status = function() {
);
}
// show system message
// -------------------
pscript.show_system_message = function(wrapper, msg) {
$ds(wrapper.system_message_area);
var txt = $a(wrapper.system_message_area, 'div', '', {lineHeight:'1.6em'});
txt.innerHTML = msg;
var span = $ln($a(wrapper.system_message_area, 'div', '', {textAlign:'right'}), 'Dismiss'.bold(),
function(me) {
me.set_working();
$c_obj('Home Control', 'dismiss_message', '', function(r,rt) {
me.done_working();
$(wrapper.system_message_area).slideUp();
});
}, {fontSize:'11px'}
)
}
// complete my company registration
// --------------------------------
pscript.complete_registration = function()

View File

@ -28,18 +28,11 @@ def get_status_details(arg=None):
online = get_online_users()
# system messages
msg_id = webnotes.conn.get_global('system_message_id')
msg = ''
if msg_id and msg_id != webnotes.conn.get_global('system_message_id', webnotes.session['user']):
msg = webnotes.conn.get_global('system_message')
# system messages
ret = {
'user_count': len(online) or 0,
'unread_messages': get_unread_messages(),
'online_users': online or [],
'system_message':msg,
'is_trial': webnotes.conn.get_global('is_trial'),
'days_to_expiry': (webnotes.conn.get_global('days_to_expiry') or '0'),
'setup_status': get_setup_status()
@ -56,9 +49,20 @@ def get_setup_status():
percent = 20
ret = []
header = webnotes.conn.get_value('Control Panel', None, 'client_name') or ''
if header.startswith('<div style="padding:4px; font-size:20px;">'\
+webnotes.conn.get_value('Control Panel', None, 'company_name')):
def is_header_set():
header = webnotes.conn.get_value('Control Panel', None, 'client_name') or ''
if header.startswith('<div style="padding:4px; font-size:20px;">'\
+webnotes.conn.get_value('Control Panel', None, 'company_name')):
return False
elif 'Banner Comes Here' in header:
return False
else:
return True
if not is_header_set():
ret.append('<a href="#!Form/Personalize/Personalize">Upload your company banner</a>')
else:
percent += 20

View File

@ -134,24 +134,28 @@ MemberList.prototype.make_search = function() {
MemberList.prototype.make_list = function() {
var me = this;
this.lst_area = $a(this.list_wrapper, 'div');
this.lst = new Listing('Profiles',1);
this.lst.colwidths = ['100%'];
this.lst.opts.cell_style = {padding:'0px'}
this.lst.get_query = function() {
var c1 = '';
if(me.search_inp.value && me.search_inp.value != 'Search') {
var c1 = repl(' AND (first_name LIKE "%(txt)s" OR last_name LIKE "%(txt)s" OR name LIKE "%(txt)s")', {txt:'%' + me.search_inp.value + '%'});
this.lst = new wn.widgets.Listing({
parent: this.lst_area,
as_dict: 1,
get_query: function() {
var c1 = '';
if(me.search_inp.value && me.search_inp.value != 'Search') {
var c1 = repl(' AND (first_name LIKE "%(txt)s" OR last_name LIKE "%(txt)s" OR name LIKE "%(txt)s")', {txt:'%' + me.search_inp.value + '%'});
}
return repl("SELECT name, \
ifnull(concat_ws(' ', first_name, last_name),'') as full_name, \
gender, file_list, enabled \
FROM tabProfile \
WHERE docstatus != 2 \
AND name not in ('Guest','Administrator') %(cond)s \
ORDER BY name asc",{cond:c1});
},
render_row: function(parent, data) {
me.member_items[data.name] = new MemberItem(parent, data, me);
}
this.query = repl("SELECT distinct ifnull(name,''), ifnull(concat_ws(' ', first_name, last_name),''), \
ifnull(messanger_status,''), ifnull(gender,''), ifnull(file_list,''), 0, enabled, last_login \
from tabProfile where docstatus != 2 AND name not in ('Guest','Administrator') %(cond)s \
ORDER BY name asc",{cond:c1});
}
this.lst.make(this.lst_area);
this.lst.show_cell= function(cell, ri, ci, d) {
me.member_items[d[ri][0]] = new MemberItem(cell, d[ri], me);
}
});
this.lst.run();
}
@ -186,14 +190,14 @@ MemberItem = function(parent, det, mlist) {
var me = this;
this.det = det;
this.wrapper = $a(parent, 'div');
this.enabled = det[6];
this.enabled = det.enabled;
this.tab = make_table(this.wrapper, 1,2,'100%', ['20%', '70%'], {padding:'4px', overflow:'hidden'});
$y(this.tab, {tableLayout:'fixed', borderCollapse:'collapse'})
this.is_online = function() {
for(var i=0;i<pscript.online_users.length;i++) {
if(det[0]==pscript.online_users[i][0]) return true;
if(det.name==pscript.online_users[i][0]) return true;
}
}
@ -210,30 +214,30 @@ MemberItem = function(parent, det, mlist) {
this.set_image = function() {
// image
this.img = $a($td(this.tab,0,0),'img','',{width:'41px'});
set_user_img(this.img, det[0], null,
(det[4] ? det[4].split(NEWLINE)[0].split(',')[1] : ('no_img_' + (det[3]=='Female' ? 'f' : 'm'))));
set_user_img(this.img, det.name, null,
(det.file_list ? det.file_list.split(NEWLINE)[0].split(',')[1] : ('no_img_' + (det.gender=='Female' ? 'f' : 'm'))));
}
// set other details like email id, name etc
this.set_details = function() {
// name
this.fullname = det[1] ? det[1] : det[0];
this.fullname = det.full_name || det.name;
var div = $a($td(this.tab, 0, 1), 'div', '', {fontWeight: 'bold',padding:'2px 0px'});
this.name_link = $a(div,'span','link_type');
this.name_link.innerHTML = crop(this.fullname, 15);
this.name_link.onclick = function() {
mlist.show_profile(me.det[0], me);
mlist.show_profile(me.det.name, me);
}
// "you" tag
if(user==det[0]) {
if(user==det.name) {
var span = $a(div,'span','',{padding:'2px' ,marginLeft:'3px'});
span.innerHTML = '(You)'
}
// email id
var div = $a($td(this.tab, 0, 1), 'div', '', {color: '#777', fontSize:'11px'});
div.innerHTML = det[0];
div.innerHTML = det.name;
// working img
var div = $a($td(this.tab, 0, 1), 'div');
@ -256,7 +260,7 @@ MemberItem = function(parent, det, mlist) {
this.set_details();
// show initial
if(user==det[0]) me.name_link.onclick();
if(user==det.name) me.name_link.onclick();
}
@ -305,6 +309,7 @@ MemberProfile = function(parent, uid, member_item) {
if(has_common(['Administrator','System Manager'],user_roles)) {
var roles_btn = $btn(this.toolbar_area, 'Set Roles', function() { me.show_roles() },{marginRight:'3px'});
var delete_btn = $btn(this.toolbar_area, 'Delete User', function() { me.delete_user(); },{marginRight:'3px'});
var ip_btn = $btn(this.toolbar_area, 'Securty Settings', function() { me.set_security(); },{marginRight:'3px'});
}
}
@ -315,6 +320,74 @@ MemberProfile = function(parent, uid, member_item) {
this.role_object.dialog.show();
}
// show securty settings
this.set_security = function() {
var d = new wn.widgets.Dialog({
title: 'Set User Security',
width: 500,
fields: [
{
label:'IP Address',
description: 'Restrict user login by IP address, partial ips (111.111.111), \
multiple addresses (separated by commas) allowed',
fieldname:'restrict_ip',
fieldtype:'Data'
},
{
label:'Login After',
description: 'User can only login after this hour (0-24)',
fieldtype: 'Int',
fieldname: 'login_after'
},
{
label:'Login Before',
description: 'User can only login before this hour (0-24)',
fieldtype: 'Int',
fieldname: 'login_before'
},
{
label:'New Password',
description: 'Update the current user password',
fieldtype: 'Data',
fieldname: 'new_password'
},
{
label:'Update',
fieldtype:'Button',
fieldname:'update'
}
]
});
d.onshow = function() {
d.set_values({
restrict_ip: me.profile.restrict_ip || '',
login_before: me.profile.login_before || '',
login_after: me.profile.login_after || '',
new_password: ''
})
}
d.fields_dict.update.input.onclick = function() {
var btn = this;
this.set_working();
var args = d.get_values();
args.user = me.profile.name;
$c_page('home', 'my_company', 'update_security', JSON.stringify(args), function(r,rt) {
if(r.exc) {
msgprint(r.exc);
btn.done_working();
return;
}
$.extend(me.profile, d.get_values());
d.hide();
});
}
d.show();
}
// delete user
// create a confirm dialog and call server method
this.delete_user = function() {
@ -534,6 +607,7 @@ MemberConversation = function(parent, uid, fullname) {
this.lst = new wn.widgets.Listing({
parent: this.lst_area,
as_dict: 1,
no_result_message: (user==uid
? 'No messages by anyone yet'
: 'No messages yet. To start a conversation post a new message'),
@ -577,18 +651,18 @@ MemberCoversationComment = function(cell, det, conv) {
this.wrapper = $a(cell, 'div', 'my-company-comment-wrapper');
this.comment = $a(this.wrapper, 'div', 'my-company-comment');
this.user = $a(this.comment, 'span', 'link_type', {fontWeight:'bold'}, pscript.get_fullname(det[1]));
this.user = $a(this.comment, 'span', 'link_type', {fontWeight:'bold'}, pscript.get_fullname(det.owner));
this.user.onclick = function() {
page_body.pages['My Company'].member_list.show_profile(me.det[1]);
page_body.pages['My Company'].member_list.show_profile(me.det.owner);
}
var st = (!det[4] ? {fontWeight: 'bold'} : null);
this.msg = $a(this.comment, 'span', 'social', st, ': ' + det[0]);
var st = (!det.docstatus ? {fontWeight: 'bold'} : null);
this.msg = $a(this.comment, 'span', 'social', st, ': ' + det.comment);
if(det[1]==user) {
if(det.full_name==user) {
$y(this.wrapper, {backgroundColor: '#D9D9F3'});
}
this.timestamp = $a(this.wrapper, 'div', 'my-company-timestamp', '', comment_when(det[3]));
this.timestamp = $a(this.wrapper, 'div', 'my-company-timestamp', '', comment_when(det.creation));
}

View File

@ -129,3 +129,19 @@ def set_read_all_messages(arg=''):
WHERE comment_doctype = 'My Company'
AND comment_docname = %s
""", webnotes.user.name)
def update_security(args=''):
import json
args = json.loads(args)
webnotes.conn.set_value('Profile', args['user'], 'restrict_ip', args.get('restrict_ip'))
webnotes.conn.set_value('Profile', args['user'], 'login_after', args.get('login_after'))
webnotes.conn.set_value('Profile', args['user'], 'login_before', args.get('login_before'))
if 'new_password' in args:
if cint(webnotes.conn.get_value('Control Panel',None,'sync_with_gateway')):
import server_tools.gateway_utils
webnotes.msgprint(server_tools.gateway_utils.change_password('', args['new_password'])['message'])
else:
webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s", (args['new_password'], args['user']))
webnotes.msgprint('Settings Updated')

View File

@ -17,7 +17,7 @@ def change_password(arg):
webnotes.msgprint('Old password is not correct', raise_exception=1)
from webnotes.utils import nowdate
webnotes.conn.sql("update tabProfile set password=password(%s), password_last_updated=%s where name=%s",(arg['new_password'], nowdate(), webnotes.session['user']))
webnotes.conn.sql("update tabProfile set password=password(%s) where name=%s",(arg['new_password'], nowdate(), webnotes.session['user']))
webnotes.msgprint('Password Updated');
def get_user_details(arg=None):

View File

@ -15,7 +15,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'kra_sheet',
'from_table': 'KRA Sheet',
'idx': 1,
'match_id': 0,
'name': '__common__',
'parent': 'KRA Template-Appraisal',
@ -26,17 +25,6 @@
'validation_logic': 'name is not Null'
},
# These values are common for all Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'map': 'Yes',
'match_id': 0,
'name': '__common__',
'parent': 'KRA Template-Appraisal',
'parentfield': 'field_mapper_details',
'parenttype': 'DocType Mapper'
},
# These values are common for all DocType Mapper
{
'doctype': 'DocType Mapper',
@ -52,22 +40,6 @@
'name': 'KRA Template-Appraisal'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'kra',
'idx': 1,
'to_field': 'kra'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'per_weightage',
'idx': 2,
'to_field': 'per_weightage'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail'

View File

@ -6,7 +6,7 @@
'creation': '2010-12-14 10:23:25',
'docstatus': 0,
'modified': '2011-02-12 18:31:40',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'harshada@webnotestech.com'
},
@ -45,74 +45,10 @@
'name': 'Salary Structure-Salary Slip'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'employee',
'idx': 1,
'match_id': 0,
'to_field': 'employee'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'employee_name',
'idx': 2,
'match_id': 0,
'to_field': 'employee_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'department',
'idx': 3,
'match_id': 0,
'to_field': 'department'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'designation',
'idx': 4,
'match_id': 0,
'to_field': 'designation'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'branch',
'idx': 5,
'match_id': 0,
'to_field': 'branch'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grade',
'idx': 6,
'match_id': 0,
'to_field': 'grade'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'e_type',
'idx': 7,
'match_id': 1,
'to_field': 'e_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_earning',
'idx': 7,
'match_id': 0,
'to_field': 'gross_pay'
},
@ -121,43 +57,14 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'modified_value',
'idx': 8,
'match_id': 1,
'to_field': 'e_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_deduction',
'idx': 8,
'match_id': 0,
'to_field': 'total_deduction'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'd_type',
'idx': 9,
'match_id': 2,
'to_field': 'd_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'net_pay',
'idx': 9,
'match_id': 0,
'to_field': 'net_pay'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'd_modified_amt',
'idx': 10,
'match_id': 2,
'to_field': 'd_amount'
},
@ -166,7 +73,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'modified_value',
'idx': 12,
'match_id': 1,
'to_field': 'e_modified_amount'
},
@ -175,7 +81,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'depend_on_lwp',
'idx': 13,
'match_id': 1,
'to_field': 'e_depends_on_lwp'
},
@ -184,7 +89,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'd_modified_amt',
'idx': 16,
'match_id': 2,
'to_field': 'd_modified_amount'
},
@ -193,7 +97,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'depend_on_lwp',
'idx': 17,
'match_id': 2,
'to_field': 'd_depends_on_lwp'
},
@ -202,7 +105,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Salary Structure',
'idx': 1,
'match_id': 0,
'to_table': 'Salary Slip'
},
@ -212,7 +114,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'earning_details',
'from_table': 'Earning Detail',
'idx': 2,
'match_id': 1,
'to_field': 'earning_details',
'to_table': 'SS Earning Detail'
@ -223,7 +124,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'deduction_details',
'from_table': 'Deduction Detail',
'idx': 3,
'match_id': 2,
'to_field': 'deduction_details',
'to_table': 'SS Deduction Detail'

View File

@ -1,603 +1,318 @@
# Module Def, HR
[
# These values are common in all dictionaries
{
'_last_update': None,
'creation': '2011-06-30 15:51:33',
'disabled': 'No',
'creation': '2011-07-01 17:41:43',
'docstatus': 0,
'doctype': u'Module Def',
'doctype_list': None,
'file_list': None,
'idx': None,
'is_hidden': 'No',
'last_updated_date': None,
'modified': '2011-06-30 15:51:33',
'modified': '2011-08-25 13:54:43',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all Module Def Role
{
'doctype': 'Module Def Role',
'name': '__common__',
'parent': 'HR',
'parentfield': 'roles',
'parenttype': 'Module Def'
},
# These values are common for all Module Def Item
{
'doctype': 'Module Def Item',
'name': '__common__',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
},
# These values are common for all Module Def
{
'disabled': 'No',
'doctype': u'Module Def',
'is_hidden': 'No',
'module_desc': 'Human Resource Management - Employee Database, Salaries etc.',
'module_icon': 'HR.gif',
'module_label': 'HR',
'module_name': 'HR',
'module_page': None,
'module_seq': 9,
'name': 'HR',
'owner': 'Administrator',
'parent': None,
'parentfield': None,
'parenttype': None,
'trash_reason': None,
'widget_code': None
'name': '__common__'
},
# Module Def, HR
{
'doctype': u'Module Def',
'name': 'HR'
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Your Employee Database',
'display_name': 'Employee',
'doc_name': 'Employee',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'employee_name\nemployment_type\nstatus\nbranch\ndesignation\ndepartment\ngrade\nreports_to',
'hide': None,
'icon': None,
'idx': 1,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01335',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 1
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Employees Daily Attendance Tracking Form',
'display_name': 'Attendance',
'doc_name': 'Attendance',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'employee\nemployee_name\nstatus\natt_date\nfiscal_year\ncompany',
'hide': None,
'icon': None,
'idx': 2,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01336',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 2
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Upload Attendance data',
'display_name': 'Attendance Control Panel',
'doc_name': 'Attendance Control Panel',
'doc_type': 'Single DocType',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 3,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01337',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 3
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Leave allocation for selected employees at a time',
'display_name': 'Leave Control Panel',
'doc_name': 'Leave Control Panel',
'doc_type': 'Single DocType',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 4,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01338',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 4
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Allocate leave for fiscal year',
'display_name': 'Leave Allocation',
'doc_name': 'Leave Allocation',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'employee\nleave_type\nfiscal_year\ntotal_leaves_allocated\nposting_date',
'hide': None,
'icon': None,
'idx': 5,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01339',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 5
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Apply Leave',
'display_name': 'Leave Application',
'doc_name': 'Leave Application',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'employee\nleave_type\nfiscal_year\nfrom_date\nto_date\ntotal_leave_days',
'hide': None,
'icon': None,
'idx': 6,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01340',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 6
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Submit Employees Expenses',
'display_name': 'Expense Voucher',
'doc_name': 'Expense Voucher',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'status\nemployee\nemployee_name\nposting_date\ntotal_claimed_amount\ntotal_sanctioned_amount\nexp_approver',
'hide': None,
'icon': None,
'idx': 7,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01341',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 7
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Assign Responsibilities to employee and evaluate',
'display_name': 'Appraisal',
'doc_name': 'Appraisal',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'status\nemployee\nemployee_name\nstart_date\nend_date\ntotal_score\nkra_approver',
'hide': None,
'icon': None,
'idx': 8,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01342',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 8
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Generate Salary Structure heads for an employee',
'display_name': 'Salary Structure',
'doc_name': 'Salary Structure',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'employee\nis_active\nfiscal_year\nfrom_date\nctc\ntotal_earning\ntotal_deduction\ntotal',
'hide': None,
'icon': None,
'idx': 9,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01343',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 9
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Generate Salary Slip for an employee',
'display_name': 'Salary Slip',
'doc_name': 'Salary Slip',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'month\nyear\nemployee\nemployee_name\npayment_days\narrear_amount\nencashment_amount\ngross_pay\ntotal_deduction\nnet_pay',
'hide': None,
'icon': None,
'idx': 10,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01344',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 10
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Generate Salary Slip for all employee at a time',
'display_name': 'Salary Slip Control Panel',
'doc_name': 'Salary Slip Control Panel',
'description': 'Generate Salary Slip for multiple employee at a time based on selected criteria',
'display_name': 'Salary Manager',
'doc_name': 'Salary Manager',
'doc_type': 'Single DocType',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 11,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01345',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 11
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': 'Job Applications received for various positions',
'display_name': 'Job Application',
'doc_name': 'Job Application',
'doc_type': 'Forms',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': 'applicant_name\nemail\nposition',
'hide': None,
'icon': None,
'idx': 12,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01346',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 12
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': None,
'display_name': 'Employee Information',
'doc_name': 'Employee',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 13,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01347',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 13
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': None,
'display_name': "Employee's Birthday",
'doc_name': 'Employee',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 14,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01348',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 14
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': None,
'display_name': 'New or left employees for a month',
'doc_name': 'Employee',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 15,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01349',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 15
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': None,
'display_name': 'Monthly Attendance Details',
'doc_name': 'Attendance',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 16,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01350',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 16
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:33',
'description': None,
'display_name': 'Leave Application Details',
'doc_name': 'Leave Application',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 17,
'modified': '2011-06-30 15:51:33',
'modified_by': 'Administrator',
'name': 'MDI01351',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 17
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Leave Allocation Details',
'doc_name': 'Leave Allocation',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 18,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01352',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 18
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Employee Leave Balance Report',
'doc_name': 'Employee',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 19,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01353',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 19
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Salary Structure Details',
'doc_name': 'Salary Structure',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 20,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01354',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 20
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Salary Register',
'doc_name': 'Salary Slip',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 21,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01355',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 21
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Salary Slips',
'doc_name': 'Salary Slip',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 22,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01356',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 22
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Pending Appraisals',
'doc_name': 'Appraisal',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 23,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01357',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 23
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Employee Appraisals',
'doc_name': 'Appraisal',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 24,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01358',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 24
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Pending Expense Vouchers',
'doc_name': 'Expense Voucher',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 25,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01359',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 25
},
# Module Def Item
{
'click_function': None,
'creation': '2011-06-30 15:51:34',
'description': None,
'display_name': 'Expense Vouchers',
'doc_name': 'Expense Voucher',
'doc_type': 'Reports',
'docstatus': 0,
'doctype': 'Module Def Item',
'fields': None,
'hide': None,
'icon': None,
'idx': 26,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDI01360',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'items',
'parenttype': 'Module Def'
'idx': 26
},
# Module Def Role
{
'creation': '2011-06-30 15:51:34',
'docstatus': 0,
'doctype': 'Module Def Role',
'idx': 1,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDR00340',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'roles',
'parenttype': 'Module Def',
'role': 'HR Manager'
},
# Module Def Role
{
'creation': '2011-06-30 15:51:34',
'docstatus': 0,
'doctype': 'Module Def Role',
'idx': 2,
'modified': '2011-06-30 15:51:34',
'modified_by': 'Administrator',
'name': 'MDR00341',
'owner': 'Administrator',
'parent': 'HR',
'parentfield': 'roles',
'parenttype': 'Module Def',
'role': 'HR User'
}
]

View File

@ -0,0 +1,4 @@
from webnotes import ValidationError
class SalarySlipExistsError(ValidationError): pass

View File

@ -0,0 +1,67 @@
var display_activity_log = function(msg) {
if(!pscript.ss_html)
pscript.ss_html = $a(cur_frm.fields_dict['Activity Log'].wrapper,'div','',{border:'1px solid #CCC', backgroundColor:'#CCC'});
pscript.ss_html.innerHTML = '<div style="color:#EEE; background-color:#555;"><b><i>Activity Log:</i><br></b></div>';
pscript.ss_html.innerHTML += '<div style="color:#666; padding: 5px">'+ msg + '</div>';
}
//Create salary slip
//-----------------------
cur_frm.cscript['Create Salary Slip'] = function(doc, cdt, cdn) {
var callback = function(r, rt){
if (r.message)
display_activity_log(r.message);
}
$c('runserverobj', args={'method':'create_sal_slip','docs':compress_doclist(make_doclist (cdt, cdn))},callback);
}
//Submit salary slip
//-----------------------
cur_frm.cscript['Submit Salary Slip'] = function(doc, cdt, cdn) {
var check = confirm("Do you really want to Submit all Salary Slip for month : " + doc.month+" and fiscal year : "+doc.fiscal_year);
if(check){
var callback = function(r, rt){
if (r.message)
display_activity_log(r.message);
}
$c('runserverobj', args={'method':'submit_salary_slip','docs':compress_doclist(make_doclist (cdt, cdn))},callback);
}
}
// Make Bank Voucher
//-----------------------
cur_frm.cscript['Make Bank Voucher'] = function(doc,cdt,cdn){
if(doc.month && doc.fiscal_year){
cur_frm.cscript.make_jv(doc, cdt, cdn);
}
}
// Make JV
//-----------------------
cur_frm.cscript.make_jv = function(doc, dt, dn) {
var call_back = function(r,rt){
var jv = LocalDB.create('Journal Voucher');
jv = locals['Journal Voucher'][jv];
jv.voucher_type = 'Bank Voucher';
jv.user_remark = 'Payment of salary for the month: ' + doc.month + 'and fiscal year: ' + doc.fiscal_year;
jv.fiscal_year = doc.fiscal_year;
jv.company = doc.company;
jv.posting_date = dateutil.obj_to_str(new Date());
// credit to bank
var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
d1.account = r.message['default_bank_account'];
d1.credit = r.message['amount']
// debit to salary account
var d2 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
d2.account = r.message['default_salary_account'];
d2.debit = r.message['amount']
loaddoc('Journal Voucher', jv.name);
}
$c_obj(make_doclist(dt,dn),'get_acc_details','',call_back);
}

View File

@ -0,0 +1,172 @@
# Please edit this list and import only required elements
import webnotes
from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
from webnotes.model import db_exists
from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
from webnotes.model.doclist import getlist, copy_doclist
from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
from webnotes import session, form, is_testing, msgprint, errprint
set = webnotes.conn.set
sql = webnotes.conn.sql
get_value = webnotes.conn.get_value
in_transaction = webnotes.conn.in_transaction
convert_to_lists = webnotes.conn.convert_to_lists
# -----------------------------------------------------------------------------------------
class DocType:
def __init__(self, doc, doclist):
self.doc = doc
self.doclist = doclist
def get_emp_list(self):
"""
Returns list of active employees based on selected criteria
and for which salary structure exists
"""
cond = self.get_filter_condition()
emp_list = sql("""
select t1.name
from `tabEmployee` t1, `tabSalary Structure` t2
where t1.docstatus!=2 and t2.docstatus != 2
and ifnull(t1.status, 'Left') = 'Active' and ifnull(t2.is_active, 'No') = 'Yes'
and t1.name = t2.employee
%s """% cond)
return emp_list
def get_filter_condition(self):
self.check_mandatory()
cond = ''
for f in ['company', 'branch', 'department', 'designation', 'grade', 'employment_type']:
if self.doc.fields.get(f):
cond += " and t1." + f + " = '" + self.doc.fields.get(f) + "'"
return cond
def check_mandatory(self):
for f in ['company', 'month', 'fiscal_year']:
if not self.doc.fields[f]:
msgprint("Please select %s to proceed" % f, raise_exception=1)
def create_sal_slip(self):
"""
Creates salary slip for selected employees if already not created
"""
emp_list = self.get_emp_list()
log = ""
if emp_list:
log = "<table><tr><td colspan = 2>Following Salary Slip has been created: </td></tr><tr><td><u>SAL SLIP ID</u></td><td><u>EMPLOYEE NAME</u></td></tr>"
else:
log = "<table><tr><td colspan = 2>No employee found for the above selected criteria</td></tr>"
for emp in emp_list:
if not sql("""select name from `tabSalary Slip`
where docstatus!= 2 and employee = %s and month = %s and fiscal_year = %s and company = %s
""", (emp[0], self.doc.month, self.doc.fiscal_year, self.doc.company)):
ss = Document('Salary Slip')
ss.fiscal_year = self.doc.fiscal_year
ss.employee = emp[0]
ss.month = self.doc.month
ss.email_check = self.doc.send_email
ss.company = self.doc.company
ss.save(1)
ss_obj = get_obj('Salary Slip', ss.name, with_children=1)
ss_obj.get_emp_and_leave_details()
ss_obj.calculate_net_pay()
ss_obj.validate()
ss_obj.doc.save()
for d in getlist(ss_obj.doclist, 'earning_details'):
d.save()
for d in getlist(ss_obj.doclist, 'deduction_details'):
d.save()
log += '<tr><td>' + ss.name + '</td><td>' + ss_obj.doc.employee_name + '</td></tr>'
log += '</table>'
return log
def get_sal_slip_list(self):
"""
Returns list of salary slips based on selected criteria
which are not submitted
"""
cond = self.get_filter_condition()
ss_list = sql("""
select t1.name from `tabSalary Slip` t1
where t1.docstatus = 0 and month = '%s' and fiscal_year = '%s' %s
""" % (self.doc.month, self.doc.fiscal_year, cond))
return ss_list
def submit_salary_slip(self):
"""
Submit all salary slips based on selected criteria
"""
ss_list = self.get_sal_slip_list()
log = ""
if ss_list:
log = """<table>
<tr>
<td colspan = 2>Following Salary Slip has been submitted: </td>
</tr>
<tr>
<td><u>SAL SLIP ID</u></td>
<td><u>EMPLOYEE NAME</u></td>
</tr>
"""
else:
log = "<table><tr><td colspan = 2>No salary slip found to submit for the above selected criteria</td></tr>"
for ss in ss_list:
ss_obj = get_obj("Salary Slip",ss[0],with_children=1)
set(ss_obj.doc, 'docstatus', 1)
ss_obj.on_submit()
log += '<tr><td>' + ss[0] + '</td><td>' + ss_obj.doc.employee_name + '</td></tr>'
log += '</table>'
return log
def get_total_salary(self):
"""
Get total salary amount from submitted salary slip based on selected criteria
"""
cond = self.get_filter_condition()
tot = sql("""
select sum(rounded_total) from `tabSalary Slip` t1
where t1.docstatus = 1 and month = '%s' and fiscal_year = '%s' %s
""" % (self.doc.month, self.doc.fiscal_year, cond))
return flt(tot[0][0])
def get_acc_details(self):
"""
get default bank account,default salary acount from company
"""
amt = self.get_total_salary()
com = sql("select default_bank_account from `tabCompany` where name = '%s'" % self.doc.company)
if not com[0][0] or not com[0][1]:
msgprint("You can set Default Bank Account in Company master.")
ret = {
'def_bank_acc' : com and com[0][0] or '',
'def_sal_acc' : com and com[0][1] or '',
'amount' : amt
}
return ret

View File

@ -1,42 +1,37 @@
# DocType, Salary Slip Control Panel
# DocType, Salary Manager
[
# These values are common in all dictionaries
{
'creation': '2010-08-08 17:09:20',
'creation': '2011-08-11 16:40:04',
'docstatus': 0,
'modified': '2010-12-29 18:02:38',
'modified_by': 'umair@iwebnotes.com',
'modified': '2011-08-25 12:02:57',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'_last_update': '1294312182',
'_last_update': '1314179318',
'allow_copy': 1,
'allow_email': 1,
'allow_print': 1,
'colour': 'White:FFF',
'doctype': 'DocType',
'hide_heading': 0,
'hide_toolbar': 0,
'in_create': 0,
'document_type': 'Other',
'issingle': 1,
'module': 'HR',
'name': '__common__',
'read_only': 1,
'section_style': 'Simple',
'server_code_error': ' ',
'show_in_menu': 0,
'use_template': 0,
'version': 113
'show_in_menu': 1,
'version': 29
},
# These values are common for all DocField
{
'doctype': 'DocField',
'name': '__common__',
'parent': 'Salary Slip Control Panel',
'parent': 'Salary Manager',
'parentfield': 'fields',
'parenttype': 'DocType',
'permlevel': 0
@ -47,7 +42,7 @@
'create': 1,
'doctype': 'DocPerm',
'name': '__common__',
'parent': 'Salary Slip Control Panel',
'parent': 'Salary Manager',
'parentfield': 'permissions',
'parenttype': 'DocType',
'permlevel': 0,
@ -55,10 +50,10 @@
'write': 1
},
# DocType, Salary Slip Control Panel
# DocType, Salary Manager
{
'doctype': 'DocType',
'name': 'Salary Slip Control Panel'
'name': 'Salary Manager'
},
# DocPerm
@ -84,22 +79,76 @@
# DocField
{
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Section Break',
'fieldtype': 'HTML',
'idx': 1,
'label': 'Salary Slip Control Panel'
'label': 'Document Description',
'options': '<div class="field_description">You can generate multiple salary slips based on the selected criteria, submit and mail those to the employee directly from here</div>'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'employee_type',
'fieldtype': 'Section Break',
'idx': 2
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 3,
'width': '50%'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'company',
'fieldtype': 'Select',
'idx': 2,
'label': 'Employment Type',
'oldfieldname': 'employee_type',
'oldfieldtype': 'Select',
'options': 'link:Employment Type'
'idx': 4,
'label': 'Company',
'options': 'link:Company',
'reqd': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'branch',
'fieldtype': 'Link',
'idx': 5,
'label': 'Branch',
'options': 'Branch'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'department',
'fieldtype': 'Link',
'idx': 6,
'label': 'Department',
'options': 'Department'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'designation',
'fieldtype': 'Link',
'idx': 7,
'label': 'Designation',
'options': 'Designation'
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 8,
'width': '50%'
},
# DocField
@ -107,180 +156,132 @@
'doctype': 'DocField',
'fieldname': 'grade',
'fieldtype': 'Select',
'idx': 3,
'idx': 9,
'label': 'Grade',
'oldfieldname': 'grade',
'oldfieldtype': 'Select',
'options': 'link:Grade'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'branch',
'fieldname': 'employment_type',
'fieldtype': 'Select',
'idx': 4,
'label': 'Branch',
'oldfieldname': 'branch',
'oldfieldtype': 'Select',
'options': 'link:Branch'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'department',
'fieldtype': 'Select',
'idx': 5,
'label': 'Department',
'oldfieldname': 'department',
'oldfieldtype': 'Select',
'options': 'link:Department'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'designation',
'fieldtype': 'Select',
'idx': 6,
'label': 'Designation',
'oldfieldname': 'designation',
'oldfieldtype': 'Select',
'options': 'link:Designation'
'idx': 10,
'label': 'Employment Type',
'options': 'link:Employment Type'
},
# DocField
{
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 7,
'oldfieldtype': 'Column Break'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'fiscal_year',
'fieldtype': 'Select',
'idx': 8,
'in_filter': 1,
'label': 'Fiscal Year',
'oldfieldname': 'fiscal_year',
'oldfieldtype': 'Select',
'options': 'link:Fiscal Year'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'month',
'fieldtype': 'Select',
'idx': 9,
'label': 'Month',
'oldfieldname': 'month',
'oldfieldtype': 'Select',
'options': '\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'year',
'fieldtype': 'Select',
'idx': 10,
'label': 'Year',
'oldfieldname': 'year',
'oldfieldtype': 'Select',
'options': '\n2009\n2010\n2011\n2012'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'week_off',
'fieldtype': 'Currency',
'idx': 11,
'label': 'Week Off',
'oldfieldname': 'week_off',
'oldfieldtype': 'Currency'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'arrear_amount',
'fieldtype': 'Currency',
'idx': 12,
'label': 'Arrear Amount',
'oldfieldname': 'arrear_amount',
'oldfieldtype': 'Currency'
'label': 'Fiscal Year',
'options': 'link:Fiscal Year',
'reqd': 1
},
# DocField
{
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldname': 'email_check',
'fieldname': 'month',
'fieldtype': 'Select',
'idx': 12,
'label': 'Month',
'options': '\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12',
'reqd': 1
},
# DocField
{
'colour': 'White:FFF',
'description': 'Check if you want to send salary slip in mail to each employee while submitting salary slip',
'doctype': 'DocField',
'fieldname': 'send_email',
'fieldtype': 'Check',
'idx': 13,
'label': 'Email',
'oldfieldname': 'email_check',
'oldfieldtype': 'Check'
'label': 'Send Email'
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 14,
'oldfieldtype': 'Section Break'
},
# DocField
{
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 15,
'label': 'Process Payroll',
'oldfieldtype': 'Button',
'trigger': 'Client'
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'HTML',
'idx': 16,
'label': 'Salary Slip HTML'
'idx': 14
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 17
'idx': 15,
'width': '50%'
},
# DocField
{
'colour': 'White:FFF',
'description': 'Creates salary slip for above mentioned criteria.',
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 18,
'label': 'Submit Salary Slip',
'oldfieldtype': 'Button',
'idx': 16,
'label': 'Create Salary Slip',
'trigger': 'Client'
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 17,
'width': '25%'
},
# DocField
{
'colour': 'White:FFF',
'description': 'Submit all salary slips for the above selected criteria',
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 18,
'label': 'Submit Salary Slip',
'trigger': 'Client'
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 19,
'width': '25%'
},
# DocField
{
'colour': 'White:FFF',
'description': 'Create Bank Voucher for the total salary paid for the above selected criteria',
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 20,
'label': 'Make Bank Voucher',
'trigger': 'Client'
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 21
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'HTML',
'idx': 22,
'label': 'Activity Log'
}
]

View File

@ -0,0 +1,199 @@
import unittest
import webnotes
from webnotes.model.doc import Document
from webnotes.model.code import get_obj
sql = webnotes.conn.sql
class TestSalarySlip(unittest.TestCase):
def setUp(self):
webnotes.conn.begin()
for rec in [des1, dep1, branch1, grade1, comp1, emp1, emp2]:
rec.save(1)
ss1[0].employee = emp1.name
for s in ss1: s.save(1)
for s in ss1[1:]:
sql("update `tabEarning Detail` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
sql("update `tabDeduction Detail` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
ss2[0].employee = emp2.name
for s in ss2: s.save(1)
for s in ss2[1:]:
sql("update `tabEarning Detail` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
sql("update `tabDeduction Detail` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
sman.save()
self.sm = get_obj('Salary Manager')
leave.save(1)
self.sm.create_sal_slip()
def test_creation(self):
ssid = sql("""
select name, department
from `tabSalary Slip`
where month = '08' and fiscal_year='2011-2012'""")
self.assertTrue(len(ssid)==1)
self.assertTrue(ssid[0][1] == 'dep1')
def test_lwp_calc(self):
ss = sql("""
select payment_days
from `tabSalary Slip`
where month = '08' and fiscal_year='2011-2012' and employee = '%s'
""" % emp1.name)
self.assertTrue(ss[0][0]==27)
def test_net_pay(self):
ss = webnotes.conn.sql("""
select rounded_total
from `tabSalary Slip`
where month = '08'
and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name)
self.assertTrue(ss[0][0]==67)
def test_submit(self):
self.sm.submit_salary_slip()
ss = webnotes.conn.sql("""
select docstatus
from `tabSalary Slip`
where month = '08'
and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name)
self.assertTrue(ss[0][0]==1)
def tearDown(self):
webnotes.conn.rollback()
#--------------------------------------------
# test data
#--------------------------------------------
des1 = Document(fielddata={
'name':'des1',
'doctype':'Designation',
'designation_name':'des1'
})
dep1 = Document(fielddata={
'name':'dep1',
'doctype':'Department',
'department_name' : 'dep1'
})
branch1 = Document(fielddata={
'name':'branch1',
'doctype':'Branch',
'branch' : 'branch1'
})
comp1 = Document(fielddata={
'name':'comp1',
'doctype':'Company',
'abbr':'c1',
'company_name' : 'comp1'
})
grade1 = Document(fielddata={
'name':'grade1',
'doctype':'Grade',
'grade_name' : 'grade1'
})
emp1 = Document(fielddata={
'doctype':'Employee',
'employee_number':'emp1',
'department':'dep1',
'designation':'des1',
'branch' : 'branch1',
'company':'comp1',
'grade':'grade1',
'naming_series':'EMP/',
'status':'Active',
'docstatus':0,
'employee_name':'emp1'
})
emp2 = Document(fielddata={
'doctype':'Employee',
'employee_number':'emp2',
'department':'dep1',
'designation':'des2',
'branch' : 'branch1',
'company':'comp1',
'naming_series':'EMP/',
'grade':'grade1',
'status':'Active',
})
ss1 = [
Document(fielddata={
'doctype':'Salary Structure',
'docstatus':0,
'employee':'emp1',
'is_active':'Yes',
'department': 'dep1',
'designation' : 'des1',
'employee_name': 'emp1'
}),
Document(fielddata={
'parenttype':'Salary Structure',
'parentfield':'earning_details',
'doctype':'Earning Detail',
'e_type' : 'Basic',
'depend_on_lwp':1,
'modified_value':100
}),
Document(fielddata={
'parenttype':'Salary Structure',
'parentfield':'earning_details',
'doctype':'Deduction Detail',
'd_type':'TDS',
'd_modified_amt':20
})
]
ss2 = [
Document(fielddata={
'doctype':'Salary Structure',
'is_active':'Yes',
'docstatus':0,
}),
Document(fielddata={
'parenttype':'Salary Structure',
'parentfield':'deduction_details',
'doctype':'Earning Detail',
'e_type' : 'Basic',
'modified_value':100
}),
Document(fielddata={
'parenttype':'Salary Structure',
'parentfield':'deduction_details',
'doctype':'Deduction Detail',
'd_type':'TDS',
'd_modified_amt':20
})
]
sman = Document(fielddata={
'name':'Salary Manager',
'doctype':'Salary Manager',
'company': 'comp1',
'department':'dep1',
'designation':'des1',
'month': '08',
'fiscal_year':'2011-2012'
})
leave = Document(fielddata = {
'doctype':'Leave Application',
'employee':'emp1',
'from_date':'2011-08-12',
'to_date':'2011-08-15',
'total_leave_days':'4',
'leave_type':'Leave Without Pay',
'docstatus':1
})

View File

@ -3,25 +3,25 @@ cur_frm.add_fetch('employee', 'company', 'company');
// On load
// -------------------------------------------------------------------
cur_frm.cscript.onload = function(doc,dt,dn){
if((cint(doc.__islocal) == 1) && !doc.amended_from){
var today=new Date();
month = (today.getMonth()+01).toString();
if(month.length>1) doc.month = month;
else doc.month = '0'+month;
if((cint(doc.__islocal) == 1) && !doc.amended_from){
var today=new Date();
month = (today.getMonth()+01).toString();
if(month.length>1) doc.month = month;
else doc.month = '0'+month;
doc.fiscal_year = sys_defaults['fiscal_year'];
refresh_many(['month', 'fiscal_year']);
cur_frm.cscript.fiscal_year(doc, dt, dn);
}
refresh_many(['month', 'fiscal_year']);
cur_frm.cscript.fiscal_year(doc, dt, dn);
}
}
// Get leave details
//---------------------------------------------------------------------
cur_frm.cscript.fiscal_year = function(doc,dt,dn){
$c_obj(make_doclist(doc.doctype,doc.name), 'get_emp_and_leave_details','',function(r, rt) {
var doc = locals[dt][dn];
cur_frm.refresh();
calculate_all(doc, dt, dn);
});
$c_obj(make_doclist(doc.doctype,doc.name), 'get_emp_and_leave_details','',function(r, rt) {
var doc = locals[dt][dn];
cur_frm.refresh();
calculate_all(doc, dt, dn);
});
}
cur_frm.cscript.month = cur_frm.cscript.employee = cur_frm.cscript.fiscal_year;
@ -29,24 +29,24 @@ cur_frm.cscript.month = cur_frm.cscript.employee = cur_frm.cscript.fiscal_year;
// Calculate total if lwp exists
// ------------------------------------------------------------------------
cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
doc.payment_days = flt(doc.total_days_in_month) - flt(doc.leave_without_pay);
refresh_field('payment_days');
calculate_all(doc, dt, dn);
doc.payment_days = flt(doc.total_days_in_month) - flt(doc.leave_without_pay);
refresh_field('payment_days');
calculate_all(doc, dt, dn);
}
// Calculate all
// ------------------------------------------------------------------------
var calculate_all = function(doc, dt, dn) {
calculate_earning_total(doc, dt, dn);
calculate_ded_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
calculate_earning_total(doc, dt, dn);
calculate_ded_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
}
// Trigger on earning modified amount and depends on lwp
// ------------------------------------------------------------------------
cur_frm.cscript.e_modified_amount = function(doc,dt,dn){
calculate_earning_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
calculate_earning_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
}
cur_frm.cscript.e_depends_on_lwp = cur_frm.cscript.e_modified_amount;
@ -54,8 +54,8 @@ cur_frm.cscript.e_depends_on_lwp = cur_frm.cscript.e_modified_amount;
// Trigger on earning modified amount and depends on lwp
// ------------------------------------------------------------------------
cur_frm.cscript.d_modified_amount = function(doc,dt,dn){
calculate_ded_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
calculate_ded_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
}
cur_frm.cscript.d_depends_on_lwp = cur_frm.cscript.d_modified_amount;
@ -63,50 +63,50 @@ cur_frm.cscript.d_depends_on_lwp = cur_frm.cscript.d_modified_amount;
// Calculate earning total
// ------------------------------------------------------------------------
var calculate_earning_total = function(doc, dt, dn) {
var tbl = getchildren('SS Earning Detail', doc.name, 'earning_details', doc.doctype);
var tbl = getchildren('SS Earning Detail', doc.name, 'earning_details', doc.doctype);
var total_earn = 0;
for(var i = 0; i < tbl.length; i++){
if(cint(tbl[i].e_depends_on_lwp) == 1) {
tbl[i].e_modified_amount = flt(tbl[i].e_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month));
refresh_field('e_modified_amount', tbl[i].name, 'earning_details');
}
total_earn += flt(tbl[i].e_modified_amount);
}
doc.gross_pay = total_earn + flt(doc.arrear_amount) + flt(doc.leave_encashment_amount);
refresh_many(['e_modified_amount', 'gross_pay']);
var total_earn = 0;
for(var i = 0; i < tbl.length; i++){
if(cint(tbl[i].e_depends_on_lwp) == 1) {
tbl[i].e_modified_amount = Math.round(tbl[i].e_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month)*100)/100;
refresh_field('e_modified_amount', tbl[i].name, 'earning_details');
}
total_earn += flt(tbl[i].e_modified_amount);
}
doc.gross_pay = total_earn + flt(doc.arrear_amount) + flt(doc.leave_encashment_amount);
refresh_many(['e_modified_amount', 'gross_pay']);
}
// Calculate deduction total
// ------------------------------------------------------------------------
var calculate_ded_total = function(doc, dt, dn) {
var tbl = getchildren('SS Deduction Detail', doc.name, 'deduction_details', doc.doctype);
var tbl = getchildren('SS Deduction Detail', doc.name, 'deduction_details', doc.doctype);
var total_ded = 0;
for(var i = 0; i < tbl.length; i++){
if(cint(tbl[i].d_depends_on_lwp) == 1) {
tbl[i].d_modified_amount = flt(tbl[i].d_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month));
var total_ded = 0;
for(var i = 0; i < tbl.length; i++){
if(cint(tbl[i].d_depends_on_lwp) == 1) {
tbl[i].d_modified_amount = Math.round(tbl[i].d_amount)*(flt(doc.payment_days)/cint(doc.total_days_in_month)*100)/100;
refresh_field('d_modified_amount', tbl[i].name, 'deduction_details');
}
total_ded += flt(tbl[i].d_modified_amount);
}
doc.total_deduction = total_ded;
refresh_field('total_deduction');
}
total_ded += flt(tbl[i].d_modified_amount);
}
doc.total_deduction = total_ded;
refresh_field('total_deduction');
}
// Calculate net payable amount
// ------------------------------------------------------------------------
var calculate_net_pay = function(doc, dt, dn) {
doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction);
doc.rounded_total = Math.round(doc.net_pay);
refresh_many(['net_pay', 'rounded_total']);
refresh_many(['net_pay', 'rounded_total']);
}
// trigger on arrear
// ------------------------------------------------------------------------
cur_frm.cscript.arrear_amount = function(doc,dt,dn){
calculate_earning_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
calculate_earning_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
}
// trigger on encashed amount
@ -116,5 +116,5 @@ cur_frm.cscript.leave_encashment_amount = cur_frm.cscript.arrear_amount;
// validate
// ------------------------------------------------------------------------
cur_frm.cscript.validate = function(doc, dt, dn) {
calculate_all(doc, dt, dn);
calculate_all(doc, dt, dn);
}

View File

@ -68,7 +68,7 @@ class DocType(TransactionBase):
# Get leave details
#=======================================================
def get_leave_details(self):
m = self.get_month_details()
m = self.get_month_details()
lwp = self.calculate_lwp(m)
self.doc.total_days_in_month = m[3]
self.doc.leave_without_pay = lwp
@ -129,12 +129,45 @@ class DocType(TransactionBase):
self.check_existing()
dcc = TransactionBase().get_company_currency(self.doc.company)
self.doc.total_in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total)
def calculate_earning_total(self):
"""
Calculates total earnings considering lwp
"""
self.doc.gross_pay = flt(self.doc.arrear_amount) + flt(self.doc.leave_encashment_amount)
for d in getlist(self.doclist, 'earning_details'):
if cint(d.e_depends_on_lwp) == 1:
d.e_modified_amount = round(flt(d.e_amount)*flt(self.doc.payment_days)/cint(self.doc.total_days_in_month), 2)
self.doc.gross_pay += d.e_modified_amount
def calculate_ded_total(self):
"""
Calculates total deduction considering lwp
"""
self.doc.total_deduction = 0
for d in getlist(self.doclist, 'deduction_details'):
if cint(d.d_depends_on_lwp) == 1:
d.d_modified_amount = round(flt(d.d_amount)*flt(self.doc.payment_days)/cint(self.doc.total_days_in_month), 2)
self.doc.total_deduction += d.d_modified_amount
def calculate_net_pay(self):
"""
Calculate net payment
"""
self.calculate_earning_total()
self.calculate_ded_total()
self.doc.net_pay = flt(self.doc.gross_pay) - flt(self.doc.total_deduction)
self.doc.rounded_total = round(self.doc.net_pay)
# ON SUBMIT
#=======================================================
def on_submit(self):
if(self.doc.email_check == 1):
self.send_mail_funct()
# Send mail
#=======================================================
@ -142,14 +175,13 @@ class DocType(TransactionBase):
emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee)
if emailid_ret:
receiver = cstr(emailid_ret[0][0])
subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year)
earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
subj = 'Salary Slip - ' + cstr(self.doc.month) +'/'+cstr(self.doc.fiscal_year)
earn_ret=sql("select e_type,e_modified_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
ded_ret=sql("select d_type,d_modified_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
earn_table = ''
ded_table = ''
if earn_ret:
if earn_ret:
earn_table += "<table cellspacing= '5' cellpadding='5' >"
for e in earn_ret:
@ -175,62 +207,60 @@ class DocType(TransactionBase):
if not letter_head:
letter_head = ''
msg = ''' %s <br>
msg = '''<div> %s <br>
<table cellspacing= "5" cellpadding="5" width = "100%%">
<tr>
<td colspan = 4 width = "100%%"><h4>Salary Slip</h4></td>
</tr>
<tr>
<td colspan = 2 width = "50%%"><b>Employee Code : %s</b></td>
<td colspan = 2 width = "50%%"><b>Employee Name : %s</b></td>
</tr>
<tr>
<td colspan = 2 width = "50%%">Month : %s</td>
<td colspan = 2 width = "50%%">Fiscal Year : %s</td>
</tr>
</table>
<table cellspacing= "5" cellpadding="5" >
<tr>
<td colspan = 4><h4>Salary Slip</h4></td>
</tr>
<tr>
<td colspan = 2><b>Employee Code : %s</b></td>
<td colspan = 2><b>Employee Name : %s</b></td>
</tr>
<tr>
<td>Month : %s</td>
<td>Year : %s</td>
<td colspan = 2>Fiscal Year : %s</td>
</tr>
<tr>
<td>Department : %s</td>
<td>Branch : %s</td>
<td colspan = 2>Designation : %s</td>
<tr>
<td>Department : %s</td>
<td>Branch : %s</td>
<td colspan = 2>Designation : %s</td>
</tr>
<tr>
<td>Grade : %s</td>
<td>Bank Account No. : %s</td>
<td colspan = 2>Bank Name : %s</td>
</tr>
<tr>
<td>Grade : %s</td>
<td>Bank Account No. : %s</td>
<td colspan = 2>Bank Name : %s</td>
</tr>
<tr>
<td colspan = 2>Arrear Amount : <b>%s</b></td>
<td colspan = 2>Payment days : %s</td>
</tr>
<tr>
<td>PF No. : %s</td>
<td>ESIC No. : %s</td>
<td colspan = 2>Arrear Amount : <b>%s</b></td>
</tr>
<tr>
<td>Total days in month : %s</td>
<td>Leave Without Pay : %s</td>
<td colspan = 2>Payment days : %s</td>
</tr>
<br><br>
<tr>
<td colspan = 2><b>Earning</b></td>
<td colspan = 2><b>Deduction</b></td>
</tr>
<tr>
<td colspan = 2>%s</td>
<td colspan = 2>%s</td>
</tr>
<br>
<tr>
<td colspan = 2><b>Gross Pay :</b> %s</td>
<td colspan = 2><b>Total Deduction :</b> %s</td>
</tr>
<tr>
<td><b>Net Pay : %s</b></td>
<td colspan = 3><b>Net Pay (in words) : %s</b></td>
</tr>
</table>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words))
sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]])
</tr>
</table>
<table border="1px solid #CCC" width="100%%" cellpadding="0" cellspacing= "0" >
<tr>
<td colspan = 2 width = "50%%"><b>Earning</b></td>
<td colspan = 2 width = "50%%"><b>Deduction</b></td>
</tr>
<tr>
<td colspan = 2 width = "50%%">%s</td>
<td colspan = 2 width = "50%%">%s</td>
</tr>
</table>
<table cellspacing= "5" cellpadding="5">
<tr>
<td colspan = 2><b>Gross Pay :</b> %s</td>
<td colspan = 2><b>Total Deduction :</b> %s</td>
</tr>
<tr>
<td><b>Net Pay : %s</b></td>
</tr>
<tr>
<td><b>Net Pay(in words) : %s</b></td>
</tr>
</table></div>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee), cstr(self.doc.employee_name), cstr(self.doc.month), cstr(self.doc.fiscal_year), cstr(self.doc.department), cstr(self.doc.branch), cstr(self.doc.designation), cstr(self.doc.grade), cstr(self.doc.bank_account_no), cstr(self.doc.bank_name), cstr(self.doc.arrear_amount), cstr(self.doc.payment_days), earn_table, ded_table, cstr(self.doc.gross_pay), cstr(self.doc.total_deduction), cstr(self.doc.net_pay), cstr(self.doc.total_in_words))
sendmail([receiver], sender='automail@erpnext.com', subject=subj, parts=[['text/plain', msg]])
else:
msgprint("Company Email ID not found.")

View File

@ -1,71 +0,0 @@
cur_frm.cscript.onload = function(doc, cdt, cdn) {
alert("Salary Slip Control Panel is currently under re-development. It will take around a week time.");
hide_field(['Process Payroll', 'Submit Salary Slip', 'Make Bank Voucher']);
}
cur_frm.cscript['Process Payroll'] = function(doc,cdt,cdn){
$c('runserverobj', args={'method':'process_payroll','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},function(r,rt){
if(!pscript.ss_html)
pscript.ss_html = $a(cur_frm.fields_dict['Salary Slip HTML'].wrapper,'span','',{border:'1px solid #CCC', backgroundColor:'#DDD'});
pscript.ss_html.innerHTML = '';
pscript.ss_html.innerHTML = r.message;
});
}
cur_frm.cscript['Submit Salary Slip'] = function(doc,cdt,cdn){
if(doc.month && doc.fiscal_year && doc.year){
var check = confirm("DO you really want to Submit all Salary Slip for month : " + doc.month+" and year : "+doc.year);
if(check){
$c('runserverobj', args={'method':'submit_sal_slip','docs':compress_doclist (make_doclist (doc.doctype,doc.name))},function(r,rt){
if(!pscript.ss_html)
pscript.ss_html = $a(cur_frm.fields_dict['Salary Slip HTML'].wrapper,'span','',{border:'1px solid #CCC', backgroundColor:'#DDD'});
pscript.ss_html.innerHTML = '';
pscript.ss_html.innerHTML = r.message;
});
}
}
else
alert("Please select month, fiscal year and year");
}
// Make JV
// --------
cur_frm.cscript.make_jv = function(doc, dt, dn) {
var call_back = function(r,rt){
var jv = LocalDB.create('Journal Voucher');
jv = locals['Journal Voucher'][jv];
jv.voucher_type = 'Bank Voucher';
jv.remark = 'Salary - Bank Voucher';
jv.fiscal_year = doc.fiscal_year;
jv.company = doc.company;
// credit to bank
var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
d1.account = r.message['default_bank_account'];
// debit to salary account
var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
d1.account = r.message['default_salary_account'];
if(!r.message['default_salary_account'] && !r.message['default_bank_account']) alert("To debit salary amount in salary head and credit amount from bank, you need to specify default salary account and default bank account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Salary Account, Default Bank Account from Accounting tab.");
else if(!r.message['default_salary_account']) alert("To debit salary amount you need to specify default salary account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Salary Account from Accounting tab.");
else if(!r.message['default_bank_account']) alert("To credit salary amount you need to specify default bank account in Global Defaults.\nGo to Setup, click on Company. Select a company.\nSelect Default Bank Account from Accounting tab.");
loaddoc('Journal Voucher', jv.name);
}
$c_obj(make_doclist(dt,dn),'get_acct_dtl','',call_back);
}
// Make Journal Voucher
// --------------------
cur_frm.cscript['Make Bank Voucher'] = function(doc, dt, dn) {
cur_frm.cscript.make_jv(doc,dt,dn);
}

View File

@ -1,137 +0,0 @@
# Please edit this list and import only required elements
import webnotes
from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
from webnotes.model import db_exists
from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
from webnotes.model.doclist import getlist, copy_doclist
from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
from webnotes import session, form, is_testing, msgprint, errprint
set = webnotes.conn.set
sql = webnotes.conn.sql
get_value = webnotes.conn.get_value
in_transaction = webnotes.conn.in_transaction
convert_to_lists = webnotes.conn.convert_to_lists
# -----------------------------------------------------------------------------------------
class DocType:
def __init__(self, doc, doclist):
self.doc = doc
self.doclist = doclist
# Get Employees
# **********************************************************************
def get_employee(self):
e1 = self.emp_fr_memp() #get employee list from employee where employee is active
e2 = self.emp_fr_salstr(e1) #get employee list from salary structure whose salary structure is created and is active
e3 = self.emp_fr_salslip(e2) #get employee list from salary slip whose salary slip not yet created for this month and year
return e3
# **********************************************************************
def emp_fr_memp(self):
lst1 = [[self.doc.employee_type,"employment_type"],[self.doc.branch,"branch"],[self.doc.designation,"designation"],[self.doc.department, "department"],[self.doc.grade,"grade"]]
condition = ""
#flag = 0
for l in lst1:
if(l[0]):
#if flag == 0:
# condition += l[1] + "= '" + l[0] +"'"
#else:
condition += " and " + l[1]+ "= '" +l[0] +"'"
#flag = 1
emp_query = "select name from `tabEmployee` where status = 'Active'"
#if flag == 1:
emp_query += condition
e = sql(emp_query)
return e
# **********************************************************************
def emp_fr_salstr(self,e1):
lst = []
for r in e1:
lst.append(r[0])
e_lst = "%s"%lst
e_lst=e_lst.replace("[","(")
e_lst=e_lst.replace("]",")")
cond = ''
if e1:
cond = " and employee in %s"%e_lst
el=sql("select employee from `tabSalary Structure` where is_active = 'Yes'"+cond)
return el
# **********************************************************************
def emp_fr_salslip(self,e2):
e3 = []
for i in e2:
ret = sql("select name from `tabSalary Slip` where month = '%s' and year = '%s' and employee = '%s' and docstatus !=2 "%(self.doc.month,self.doc.year,i[0]))
if not ret:
e3.append(i[0])
return e3
# **********************************************************************
def process_payroll(self):
sal_slip_str = ''
if self.doc.month and self.doc.fiscal_year and self.doc.year:
e = self.get_employee()
if e:
self.doc.emp_lst=e
sal_slip_str += 'Sucessfully created following salary slips:'
for i in e:
ss = Document('Salary Slip')
ss.fiscal_year = self.doc.fiscal_year
ss.employee = i
ss.month = self.doc.month
ss.year= self.doc.year
ss.arrear_amount = self.doc.arrear_amount
ss.email_check = self.doc.email_check
ss.save(1)
salary_obj=get_obj("Salary Slip",ss.name,with_children=1)
salary_obj.process_payroll_all()
sal_slip_str += "<br/>"+ss.name
else:
msgprint("For Process Payroll Fiscal Year, Month, Year fields are mandatory.")
if not sal_slip_str:
sal_slip_str = "No record found."
return cstr(sal_slip_str)
# **********************************************************************
def submit_sal_slip(self):
sal_slip_str = ''
r = sql("select name from `tabSalary Slip` where month='%s' and year = '%s' and fiscal_year = '%s' and docstatus = 0"%(self.doc.month,self.doc.year,self.doc.fiscal_year))
ret = sql("update `tabSalary Slip` set docstatus = 1 where month='%s' and year = '%s' and fiscal_year = '%s' and docstatus = 0"%(self.doc.month,self.doc.year,self.doc.fiscal_year))
if r:
sal_slip_str += 'Sucessfully updated following salary slips:'
for i in r:
salary_obj=get_obj("Salary Slip",i[0],with_children=1)
salary_obj.on_submit()
sal_slip_str += "<br/>"+cstr(i[0])
if not sal_slip_str:
sal_slip_str = "No record found."
return cstr(sal_slip_str)
# **********************************************************************
#get default bank account,default salary acount from company.
def get_acct_dtl(self):
res = sql("select default_bank_account,default_salary_acount from `tabCompany` where name = '%s'"%get_defaults()['company'], as_dict=1)
return res[0]

View File

@ -5,14 +5,14 @@
{
'creation': '2010-12-14 16:50:05',
'docstatus': 0,
'modified': '2011-06-27 14:39:11',
'modified': '2011-08-11 16:56:38',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'_last_update': '1308808105',
'_last_update': '1311621379',
'colour': 'White:FFF',
'doctype': 'DocType',
'module': 'HR',
@ -21,7 +21,7 @@
'server_code_error': ' ',
'show_in_menu': 0,
'subject': 'For %(employee_name)s',
'version': 586
'version': 587
},
# These values are common for all DocField
@ -39,7 +39,8 @@
'name': '__common__',
'parent': 'Salary Structure',
'parentfield': 'permissions',
'parenttype': 'DocType'
'parenttype': 'DocType',
'read': 1
},
# DocType, Salary Structure
@ -54,9 +55,9 @@
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'match': 'owner',
'idx': 1,
'permlevel': 0,
'read': 1,
'role': 'Employee',
'submit': 0,
'write': 0
},
@ -66,97 +67,40 @@
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'match': 'owner',
'permlevel': 0,
'read': 1,
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'match': 'owner',
'permlevel': 0,
'read': 1,
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'match': 'owner',
'permlevel': 0,
'read': 1,
'submit': 0,
'write': 0
},
# DocPerm
{
'doctype': 'DocPerm',
'permlevel': 0,
'role': 'Sales User'
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 2,
'permlevel': 1,
'read': 1,
'role': 'All',
'submit': 0,
'write': 0
},
# DocPerm
{
'create': 1,
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 3,
'permlevel': 0,
'read': 1,
'role': 'HR User',
'write': 1
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 4,
'permlevel': 0,
'read': 1,
'role': 'HR Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 5,
'permlevel': 1,
'read': 1,
'role': 'HR Manager'
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 6,
'permlevel': 1,
'read': 1,
'role': 'HR User'
},
# DocField
{
'doctype': 'DocField',

View File

@ -0,0 +1,8 @@
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
def on_trash(self):
import webnotes
webnotes.conn.sql("delete from tabAnswer where question=%s", self.doc.name)

View File

@ -19,12 +19,25 @@ KBItemToolbar = function(args, kb) {
this.line1.innerHTML = repl('By %(name)s | %(when)s', {
name: wn.utils.full_name(this.det.first_name, this.det.last_name),
when: wn.datetime.comment_when(this.det.modified)
})
});
// allow system manager to delete questions / answers
if(has_common(user_roles, ['Administrator', 'System Manager'])) {
this.line1.innerHTML += ' | '
$ln(this.line1, 'delete', me.del);
}
}
this.make_vote = function() {
new KBPoints(this.line2, this.det.points, this.det._users_voted, this.doctype, this.det.name, this.det.owner);
}
this.del = function() {
this.innerHTML = 'deleting...'; this.disabled = 1;
$c_page('knowledge_base', 'questions', 'delete', {dt:me.doctype, dn:me.det.name}, function(r,rt) {
// reload the list
kb.list.run()
});
}
this.make_tags = function() {

View File

@ -128,7 +128,7 @@ KBAnswerList = function(args) {
as_dict: 1,
no_results_message: 'No answers yet, be the first one to answer!',
render_row: function(body, data) {
new KBAnswer(body, data)
new KBAnswer(body, data, me)
},
get_query: function() {
return repl("SELECT t1.name, t1.owner, t1.answer, t1.points, t1._users_voted, t2.first_name, "
@ -150,7 +150,7 @@ KBAnswerList = function(args) {
// answer
// by xxx | on xxx
// points yyy
KBAnswer = function(body, data) {
KBAnswer = function(body, data, ans_list) {
body.className = 'qv-answer';
new EditableText({
parent: body,
@ -169,7 +169,7 @@ KBAnswer = function(body, data) {
det: data,
with_tags: 0,
doctype: 'Answer'
}, null)
}, ans_list)
}

View File

@ -35,3 +35,11 @@ def vote(arg):
(p, cstr(res[1]) + ',' + webnotes.user.name, args['dn']))
return p
def delete(arg):
"""
delete a question or answer (called from kb toolbar)
"""
args = load_json(arg)
from webnotes.model import delete_doc
delete_doc(args['dt'], args['dn'])

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -45,35 +45,10 @@
'name': 'Production Forecast-Production Plan'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 3,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:flt(obj.qty)-flt(obj.planned_qty)',
'idx': 4,
'to_field': 'prevdoc_reqd_qty'
},
@ -81,7 +56,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 5,
'to_field': 'against_document'
},
@ -89,7 +63,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 6,
'to_field': 'document_no'
},
@ -97,7 +70,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'start_date',
'idx': 7,
'to_field': 'document_date'
},
@ -105,7 +77,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'end_date',
'idx': 8,
'to_field': 'confirmation_date'
},
@ -113,7 +84,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Production Forecast',
'idx': 1,
'match_id': 0,
'to_table': 'Production Plan',
'validation_logic': 'docstatus =1'
@ -124,7 +94,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'pf_details',
'from_table': 'PF Detail',
'idx': 2,
'match_id': 1,
'to_field': 'pp_details',
'to_table': 'PP Detail',

View File

@ -45,35 +45,10 @@
'name': 'Production Forecast-Production Planning Tool'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 3,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:flt(obj.qty)-flt(obj.planned_qty)',
'idx': 4,
'to_field': 'prevdoc_reqd_qty'
},
@ -81,7 +56,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 5,
'to_field': 'source_doctype'
},
@ -89,7 +63,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 6,
'to_field': 'source_docname'
},
@ -97,7 +70,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'end_date',
'idx': 7,
'to_field': 'confirmation_date'
},
@ -105,7 +77,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Production Forecast',
'idx': 1,
'match_id': 0,
'to_table': 'Production Planning Tool',
'validation_logic': 'docstatus =1'
@ -116,7 +87,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'pf_details',
'from_table': 'PF Detail',
'idx': 2,
'match_id': 1,
'to_field': 'pp_details',
'to_table': 'PP Detail',

View File

@ -50,7 +50,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 1,
'to_field': 'against_document'
},
@ -58,31 +57,13 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 2,
'to_field': 'document_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 3,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 4,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'uom',
'idx': 5,
'to_field': 'stock_uom'
},
@ -90,7 +71,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:flt(obj.qty)-flt(obj.planned_qty)',
'idx': 6,
'to_field': 'prevdoc_total_qty'
},
@ -98,23 +78,13 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'transaction_date',
'idx': 7,
'to_field': 'document_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'delivery_date',
'idx': 8,
'to_field': 'delivery_date'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'from_table': 'Sales Order',
'idx': 1,
'match_id': 0,
'to_table': 'Production Plan',
'validation_logic': 'docstatus =1'
@ -125,7 +95,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'packing_details',
'from_table': 'Delivery Note Packing Detail',
'idx': 2,
'match_id': 1,
'to_field': 'pp_details',
'to_table': 'PP Detail',

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:34',
'docstatus': 0,
'modified': '2011-05-17 11:42:57',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'Administrator'
},
@ -50,116 +50,23 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 1,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 2,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 3,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 4,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 5,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 6,
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 7,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 8,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 9,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 10,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 11,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 12,
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 13,
'match_id': 0,
'to_field': 'delivery_note_no'
},
@ -168,7 +75,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 14,
'match_id': 1,
'to_field': 'prevdoc_detail_docname'
},
@ -177,7 +83,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 15,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -186,52 +91,22 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 16,
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 17,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 18,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: flt(obj.qty) - flt(obj.installed_qty)',
'idx': 19,
'match_id': 1,
'to_field': 'qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'serial_no',
'idx': 20,
'match_id': 1,
'to_field': 'serial_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'posting_date',
'idx': 21,
'match_id': 2,
'to_field': 'prevdoc_date'
},
@ -241,7 +116,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'delivery_note_details',
'from_table': 'Delivery Note Detail',
'idx': 1,
'match_id': 1,
'to_field': 'installed_item_details',
'to_table': 'Installed Item Details',
@ -252,7 +126,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Delivery Note',
'idx': 2,
'match_id': 0,
'to_table': 'Installation Note',
'validation_logic': 'docstatus = 1'
@ -262,7 +135,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Delivery Note',
'idx': 3,
'match_id': 2,
'reference_doctype_key': 'prevdoc_doctype',
'reference_key': 'prevdoc_docname',

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:34',
'docstatus': 0,
'modified': '2011-05-10 16:04:40',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'Administrator'
},
@ -46,182 +46,26 @@
'name': 'Enquiry-Quotation'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 1,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 2,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'qty',
'idx': 3,
'match_id': 1,
'to_field': 'qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'uom',
'idx': 4,
'match_id': 1,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'source',
'idx': 5,
'match_id': 0,
'to_field': 'source'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'campaign',
'idx': 6,
'match_id': 0,
'to_field': 'campaign'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 7,
'match_id': 0,
'to_field': 'enq_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 8,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 9,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 10,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 11,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 12,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 13,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 14,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 15,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 16,
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 17,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 18,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 19,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 20,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -230,34 +74,14 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 21,
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'lead',
'idx': 22,
'match_id': 0,
'to_field': 'lead'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'lead_name',
'idx': 23,
'match_id': 0,
'to_field': 'lead_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'enquiry_from',
'idx': 24,
'match_id': 0,
'to_field': 'quotation_to'
},
@ -266,7 +90,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'enquiry_type',
'idx': 25,
'match_id': 0,
'to_field': 'order_type'
},
@ -275,7 +98,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Enquiry',
'idx': 1,
'match_id': 0,
'to_table': 'Quotation'
},
@ -285,7 +107,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'enq_details',
'from_table': 'Enquiry Detail',
'idx': 2,
'match_id': 1,
'to_field': 'quotation_details',
'to_table': 'Quotation Detail'

View File

@ -14,7 +14,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Lead',
'idx': 1,
'match_id': 0,
'name': '__common__',
'parent': 'Lead-Customer',
@ -54,7 +53,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 1,
'to_field': 'lead_name'
},
@ -62,79 +60,13 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'company_name',
'idx': 2,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_line1',
'idx': 3,
'to_field': 'address_line1'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_line2',
'idx': 4,
'to_field': 'address_line2'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'city',
'idx': 5,
'to_field': 'city'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'country',
'idx': 6,
'to_field': 'country'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'state',
'idx': 7,
'to_field': 'state'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'pincode',
'idx': 8,
'to_field': 'pincode'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 9,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 10,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_no',
'idx': 11,
'to_field': 'phone_1'
},
@ -142,18 +74,9 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'fax',
'idx': 12,
'to_field': 'fax_1'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'website',
'idx': 13,
'to_field': 'website'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail'

View File

@ -14,7 +14,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Lead',
'idx': 1,
'match_id': 0,
'name': '__common__',
'parent': 'Lead-Enquiry',
@ -50,110 +49,27 @@
'name': 'Lead-Enquiry'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'source',
'idx': 1,
'to_field': 'source'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'campaign_name',
'idx': 2,
'to_field': 'campaign'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_by',
'idx': 3,
'to_field': 'contact_by'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'last_contact_date',
'idx': 4,
'to_field': 'last_contact_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_date_ref',
'idx': 5,
'to_field': 'contact_date_ref'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_date',
'idx': 6,
'to_field': 'contact_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'doctype',
'idx': 7,
'to_field': 'enquiry_from'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'lead_name',
'idx': 8,
'to_field': 'lead_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 9,
'to_field': 'lead'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address',
'idx': 10,
'to_field': 'address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_no',
'idx': 11,
'to_field': 'contact_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'email_id',
'idx': 12,
'to_field': 'email_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 13,
'to_field': 'territory'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail'

View File

@ -14,7 +14,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Project',
'idx': 1,
'match_id': 0,
'name': '__common__',
'parent': 'Project-Sales Order',
@ -26,13 +25,16 @@
# These values are common for all Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'map': 'Yes',
'match_id': 0,
'name': '__common__',
'parent': 'Project-Sales Order',
'parentfield': 'field_mapper_details',
'parenttype': 'DocType Mapper'
'parenttype': 'DocType Mapper',
'to_field': 'customer'
},
# These values are common for all DocType Mapper
@ -52,67 +54,7 @@
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 1,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 2,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 3,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 4,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_no',
'idx': 5,
'to_field': 'contact_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'email_id',
'idx': 6,
'to_field': 'email_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 7,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 8,
'to_field': 'territory'
'doctype': 'Field Mapper Detail'
},
# Table Mapper Detail

View File

@ -5,7 +5,7 @@
{
'creation': '2010-08-08 17:09:35',
'docstatus': 0,
'modified': '2011-05-17 12:55:58',
'modified': '2011-08-25 18:25:02',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
@ -49,48 +49,34 @@
'checking_operator': '>=',
'doctype': 'Field Mapper Detail',
'from_field': 'transaction_date',
'idx': 1,
'map': 'No',
'match_id': 0,
'to_field': 'transaction_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'order_type',
'idx': 2,
'map': 'Yes',
'match_id': 0,
'to_field': 'order_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 3,
'map': 'Yes',
'match_id': 0,
'to_field': 'quotation_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'transaction_date',
'idx': 4,
'map': 'Yes',
'match_id': 0,
'to_field': 'quotation_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'map': 'Yes',
'match_id': 0,
'to_field': 'quotation_no'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 5,
'map': 'Yes',
'match_id': 0,
'to_field': 'company'
@ -101,147 +87,15 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 6,
'map': 'Yes',
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'price_list_name',
'idx': 7,
'map': 'Yes',
'match_id': 0,
'to_field': 'price_list_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 8,
'map': 'Yes',
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 9,
'map': 'Yes',
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 10,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 11,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 12,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 14,
'map': 'Yes',
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 15,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 16,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 17,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 18,
'map': 'Yes',
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 19,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge',
'idx': 20,
'map': 'Yes',
'match_id': 0,
'to_field': 'charge'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 21,
'map': 'Yes',
'match_id': 1,
'to_field': 'prevdoc_docname'
@ -250,411 +104,10 @@
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'adj_rate',
'idx': 22,
'map': 'Yes',
'match_id': 1,
'to_field': 'adj_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'basic_rate',
'idx': 23,
'map': 'Yes',
'match_id': 1,
'to_field': 'basic_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'amount',
'idx': 24,
'map': 'Yes',
'match_id': 1,
'to_field': 'amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 25,
'map': 'Yes',
'match_id': 1,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'ref_rate',
'idx': 26,
'map': 'Yes',
'match_id': 1,
'to_field': 'ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'base_ref_rate',
'idx': 27,
'map': 'Yes',
'match_id': 1,
'to_field': 'base_ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 28,
'map': 'Yes',
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'qty',
'idx': 29,
'map': 'Yes',
'match_id': 1,
'to_field': 'qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 30,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 31,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 32,
'map': 'Yes',
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 33,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 34,
'map': 'Yes',
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_amount',
'idx': 35,
'map': 'Yes',
'match_id': 1,
'to_field': 'export_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 36,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'net_total',
'idx': 37,
'map': 'Yes',
'from_field': 'naming_series',
'map': 'No',
'match_id': 0,
'to_field': 'net_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'other_charges_total',
'idx': 38,
'map': 'Yes',
'match_id': 0,
'to_field': 'other_charges_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total',
'idx': 39,
'map': 'Yes',
'match_id': 0,
'to_field': 'grand_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rounded_total',
'idx': 40,
'map': 'Yes',
'match_id': 0,
'to_field': 'rounded_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'in_words',
'idx': 41,
'map': 'Yes',
'match_id': 0,
'to_field': 'in_words'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total_export',
'idx': 42,
'map': 'Yes',
'match_id': 0,
'to_field': 'grand_total_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rounded_total_export',
'idx': 43,
'map': 'Yes',
'match_id': 0,
'to_field': 'rounded_total_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'in_words_export',
'idx': 44,
'map': 'Yes',
'match_id': 0,
'to_field': 'in_words_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 45,
'map': 'Yes',
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 46,
'map': 'Yes',
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 47,
'map': 'Yes',
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 48,
'map': 'Yes',
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 49,
'map': 'Yes',
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 50,
'map': 'Yes',
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tax_amount',
'idx': 51,
'map': 'Yes',
'match_id': 2,
'to_field': 'tax_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total',
'idx': 52,
'map': 'Yes',
'match_id': 2,
'to_field': 'total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'idx',
'idx': 53,
'map': 'Yes',
'match_id': 2,
'to_field': 'idx'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_person',
'idx': 54,
'map': 'Yes',
'match_id': 3,
'to_field': 'sales_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_percentage',
'idx': 55,
'map': 'Yes',
'match_id': 3,
'to_field': 'allocated_percentage'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_amount',
'idx': 56,
'map': 'Yes',
'match_id': 3,
'to_field': 'allocated_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 57,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tc_name',
'idx': 57,
'map': 'Yes',
'match_id': 0,
'to_field': 'tc_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 57,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'source',
'idx': 58,
'map': 'Yes',
'match_id': 0,
'to_field': 'source'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'campaign',
'idx': 59,
'map': 'Yes',
'match_id': 0,
'to_field': 'campaign'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'terms',
'idx': 60,
'map': 'Yes',
'match_id': 0,
'to_field': 'terms'
'to_field': 'naming_series'
},
# Table Mapper Detail
@ -662,7 +115,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_team',
'from_table': 'Sales Team',
'idx': 1,
'match_id': 3,
'to_field': 'sales_team',
'to_table': 'Sales Team',
@ -674,7 +126,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'other_charges',
'from_table': 'RV Tax Detail',
'idx': 2,
'match_id': 2,
'to_field': 'other_charges',
'to_table': 'RV Tax Detail',
@ -686,7 +137,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'quotation_details',
'from_table': 'Quotation Detail',
'idx': 3,
'match_id': 1,
'reference_doctype_key': 'prevdoc_doctype',
'to_field': 'sales_order_details',
@ -698,7 +148,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Quotation',
'idx': 4,
'match_id': 0,
'reference_key': 'prevdoc_docname',
'to_table': 'Sales Order',

View File

@ -11,7 +11,7 @@ $import(SMS Control)
// ONLOAD
// ===================================================================================
cur_frm.cscript.onload = function(doc, cdt, cdn) {
cur_frm.cscript.onload = function(doc, cdt, cdn) {
if(!doc.quotation_to) hide_field(['customer','customer_address','contact_person','customer_name','lead', 'lead_name', 'address_display', 'contact_display', 'contact_mobile', 'contact_email', 'territory', 'customer_group']);
if(!doc.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name});
if(!doc.status) set_multiple(cdt,cdn,{status:'Draft'});
@ -21,7 +21,7 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
//if(!doc.price_list_name && sys_defaults.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name});
if(!doc.company && sys_defaults.company) set_multiple(cdt,cdn,{company:sys_defaults.company});
if(!doc.fiscal_year && sys_defaults.fiscal_year) set_multiple(cdt,cdn,{fiscal_year:sys_defaults.fiscal_year});
if(doc.quotation_to) {
if(doc.quotation_to == 'Customer') {
hide_field(['lead', 'lead_name']);
@ -34,7 +34,7 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
// load default charges
if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length)
if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length)
cur_frm.cscript.load_taxes(doc, cdt, cdn);
}
@ -46,9 +46,9 @@ cur_frm.cscript.lead_cust_show = function(doc,cdt,cdn){
hide_field(['lead_name','customer','customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
doc.lead = doc.lead_name = doc.customer = doc.customer_address = doc.contact_person = doc.address_display = doc.contact_display = doc.contact_mobile = doc.contact_email = doc.territory = doc.customer_group = "";
}
else if(doc.quotation_to == 'Customer'){
else if(doc.quotation_to == 'Customer'){
unhide_field(['customer']);
hide_field(['lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory']);
hide_field(['lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory']);
doc.lead = doc.lead_name = doc.customer = doc.customer_address = doc.contact_person = doc.address_display = doc.contact_display = doc.contact_mobile = doc.contact_email = doc.territory = doc.customer_group = "";
}
//refresh_many(['lead','customer']);
@ -56,7 +56,7 @@ cur_frm.cscript.lead_cust_show = function(doc,cdt,cdn){
//================ hide - unhide fields on basis of quotation to either lead or customer ===============================
//================ hide - unhide fields on basis of quotation to either lead or customer ===============================
cur_frm.cscript.quotation_to = function(doc,cdt,cdn){
cur_frm.cscript.lead_cust_show(doc,cdt,cdn);
//doc.customer_address = doc.territory = doc.contact_no = doc.email_id = "";
@ -77,7 +77,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.add_custom_button('Set as Lost', cur_frm.cscript['Declare Order Lost']);
cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']);
}
if (!doc.docstatus) hide_field(['Update Follow up']);
else unhide_field(['Update Follow up']);
//cur_frm.cscript.lead_cust_show(doc,cdt,cdn);
@ -111,7 +111,7 @@ cur_frm.cscript.customer = function(doc,dt,dn) {
var callback = function(r,rt) {
var doc = locals[cur_frm.doctype][cur_frm.docname];
cur_frm.refresh();
}
}
if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);
if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
@ -123,12 +123,12 @@ cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc
cur_frm.fields_dict.customer_address.on_new = function(dn) {
locals['Address'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
}
cur_frm.fields_dict.contact_person.on_new = function(dn) {
locals['Contact'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
}
cur_frm.fields_dict['customer_address'].get_query = function(doc, cdt, cdn) {
@ -146,7 +146,7 @@ cur_frm.fields_dict['lead'].get_query = function(doc,cdt,cdn){
cur_frm.cscript.lead = function(doc, cdt, cdn) {
if(doc.lead) get_server_fields('get_lead_details', doc.lead,'', doc, cdt, cdn, 1);
if(doc.lead) unhide_field(['lead_name','address_display','contact_mobile','contact_email','territory']);
if(doc.lead) unhide_field(['lead_name','address_display','contact_mobile','contact_email','territory']);
}
@ -166,7 +166,7 @@ cur_frm.fields_dict['enq_no'].get_query = function(doc,cdt,cdn){
cur_frm.cscript['Make Sales Order'] = function() {
var doc = cur_frm.doc;
if (doc.docstatus == 1) {
if (doc.docstatus == 1) {
var n = createLocal("Sales Order");
$c('dt_map', args={
'docs':compress_doclist([locals["Sales Order"][n]]),
@ -186,17 +186,17 @@ cur_frm.cscript['Pull Enquiry Detail'] = function(doc,cdt,cdn){
var callback = function(r,rt){
if(r.message){
doc.quotation_to = r.message;
if(doc.quotation_to == 'Lead') {
unhide_field(['lead','lead_name','address_display','contact_mobile','contact_email','territory']);
unhide_field(['lead','lead_name','address_display','contact_mobile','contact_email','territory']);
}
else if(doc.quotation_to == 'Customer') {
unhide_field(['customer','customer_address','contact_person','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
}
refresh_many(['quotation_details','quotation_to','customer','customer_address','contact_person','lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group','order_type']);
}
}
}
$c_obj(make_doclist(doc.doctype, doc.name),'pull_enq_details','',callback);
}
@ -217,7 +217,7 @@ cur_frm.cscript['Update Follow up'] = function(doc){
//-------------------------
cur_frm.cscript['Declare Order Lost'] = function(){
var qtn_lost_dialog;
set_qtn_lost_dialog = function(doc,cdt,cdn){
qtn_lost_dialog = new Dialog(400,400,'Add Quotation Lost Reason');
qtn_lost_dialog.make_body([
@ -226,26 +226,26 @@ cur_frm.cscript['Declare Order Lost'] = function(){
['HTML', 'Response', '<div class = "comment" id="update_quotation_dialog_response"></div>'],
['HTML', 'Add Reason', '<div></div>']
]);
var add_reason_btn1 = $a($i(qtn_lost_dialog.widgets['Add Reason']), 'button', 'button');
add_reason_btn1.innerHTML = 'Add';
add_reason_btn1.onclick = function(){ qtn_lost_dialog.add(); }
var add_reason_btn2 = $a($i(qtn_lost_dialog.widgets['Add Reason']), 'button', 'button');
add_reason_btn2.innerHTML = 'Cancel';
$y(add_reason_btn2,{marginLeft:'4px'});
add_reason_btn2.onclick = function(){ qtn_lost_dialog.hide();}
qtn_lost_dialog.onshow = function() {
qtn_lost_dialog.widgets['Quotation Lost Reason'].value = '';
$i('update_quotation_dialog_response').innerHTML = '';
}
qtn_lost_dialog.add = function() {
// sending...
$i('update_quotation_dialog_response').innerHTML = 'Processing...';
var arg = strip(qtn_lost_dialog.widgets['Quotation Lost Reason'].value);
var call_back = function(r,rt) {
var call_back = function(r,rt) {
if(r.message == 'true'){
$i('update_quotation_dialog_response').innerHTML = 'Done';
qtn_lost_dialog.hide();
@ -254,11 +254,11 @@ cur_frm.cscript['Declare Order Lost'] = function(){
if(arg) $c_obj(make_doclist(cur_frm.doc.doctype, cur_frm.doc.name),'declare_order_lost',arg,call_back);
else msgprint("Please add Quotation lost reason");
}
}
}
if(!qtn_lost_dialog){
set_qtn_lost_dialog(doc,cdt,cdn);
}
}
qtn_lost_dialog.show();
}
@ -284,23 +284,23 @@ cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) {
//===================== Quotation to validation - either customer or lead mandatory ====================
cur_frm.cscript.quot_to_validate = function(doc,cdt,cdn){
if(doc.quotation_to == 'Lead'){
if(!doc.lead){
alert("Lead is mandatory.");
validated = false;
alert("Lead is mandatory.");
validated = false;
}
}
else if(doc.quotation_to == 'Customer'){
if(!doc.customer){
alert("Customer is mandatory.");
validated = false;
}
}
}
//===================validation function =================================
@ -308,3 +308,35 @@ cur_frm.cscript.quot_to_validate = function(doc,cdt,cdn){
cur_frm.cscript.validate = function(doc,cdt,cdn){
cur_frm.cscript.quot_to_validate(doc,cdt,cdn);
}
//================ Last Quoted Price and Last Sold Price suggestion ======================
cur_frm.fields_dict['quotation_details'].grid.get_field('item_code').get_query= function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(doc.customer)
return repl("SELECT i.name,i.item_code,concat('Last quoted at - ',cast(quote_rate as char)) as quote_rate,concat('Last sold at - ',cast(sales_rate as char)) as sales_rate FROM\
(\
select item_code,name from tabItem where tabItem.%(key)s like '%s'\
)i\
left join\
(\
select q.item_code,q.quote_rate from\
(\
select q.transaction_date,qd.item_code,basic_rate as quote_rate from `tabQuotation Detail` qd, `tabQuotation` q where q.name=qd.parent and q.docstatus=1 and customer='%(cust)s'\
)q,\
(\
select qd.item_code,max(transaction_date) as transaction_date from `tabQuotation Detail` qd, `tabQuotation` q where q.name=qd.parent and q.docstatus=1 and customer='%(cust)s' group by qd.item_code\
)m where q.item_code=m.item_code and q.transaction_date=m.transaction_date\
)q on i.item_code=q.item_code\
left join\
(\
select r.item_code,r.sales_rate from\
(\
select r.voucher_date,rd.item_code,basic_rate as sales_rate from `tabRV Detail` rd, `tabReceivable Voucher` r where r.name=rd.parent and r.docstatus=1 and customer='%(cust)s'\
)r,\
(\
select rd.item_code,max(voucher_date) as voucher_date from `tabRV Detail` rd, `tabReceivable Voucher` r where r.name=rd.parent and r.docstatus=1 and customer='%(cust)s' group by rd.item_code\
)m where r.item_code=m.item_code and r.voucher_date=m.voucher_date\
)s on i.item_code=s.item_code ORDER BY item_code LIMIT 50",{cust:doc.customer});
else
return "SELECT name, item_code FROM tabItem WHERE `tabItem`.%(key)s LIKE '%s' ORDER BY tabItem.item_code DESC LIMIT 50";
}

View File

@ -0,0 +1,41 @@
# Please edit this list and import only required elements
import webnotes
from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
from webnotes.model import db_exists
from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
from webnotes.model.doclist import getlist, copy_doclist
from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
from webnotes import session, form, is_testing, msgprint, errprint
set = webnotes.conn.set
sql = webnotes.conn.sql
get_value = webnotes.conn.get_value
in_transaction = webnotes.conn.in_transaction
convert_to_lists = webnotes.conn.convert_to_lists
# -----------------------------------------------------------------------------------------
class DocType:
def __init__(self, doc, doclist=[]):
self.doc = doc
self.doclist = doclist
def update_series(self):
series = sql("select name,current from `tabSeries` where name = %s", self.doc.prefix,as_dict = 1)
if series:
msgprint("This is going to update Series with Prefix : " + series[0]['name'] + " from Current : " + cstr(series[0]['current']) + " to Current : "+ cstr(self.doc.current))
sql("update `tabSeries` set current = '%s' where name = '%s'" % (self.doc.current,series[0]['name']))
msgprint("Series Updated Successfully")
else:
msgprint("Please Check Prefix as there is no such Prefix : "+ self.doc.prefix +" Or Try Insert Button")
def insert_series(self):
#sql("start transaction")
series = sql("select name,current from `tabSeries` where name = %s", self.doc.prefix, as_dict = 1)
if series:
msgprint("Series with Prefix : " + series[0]['name'] + "already in the system . Try Update Button")
else:
msgprint("This is going to Insert Series with Prefix : " + cstr(self.doc.prefix) + " Current: " + cstr(self.doc.current))
sql("insert into `tabSeries` (name,current) values ('%s','%s')" % (self.doc.prefix, self.doc.current))
msgprint("Series Inserted Successfully")

View File

@ -48,10 +48,9 @@ function startup_setup() {
if(r.message){
login_file = 'http://' + r.message;
}
else {
login_file = 'http://www.erpnext.com';
}
else if(pscript.is_erpnext_saas) {
login_file = 'https://www.erpnext.com';
}
// setup toolbar
pscript.startup_setup_toolbar();
}
@ -539,3 +538,5 @@ pscript.set_user_fullname = function(ele,username,get_latest){
// ====================================================================
startup_setup();
$(document).bind('form_refresh', function() { })

View File

@ -14,7 +14,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Project',
'idx': 1,
'match_id': 0,
'name': '__common__',
'parent': 'Project-Delivery Note',
@ -26,13 +25,16 @@
# These values are common for all Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'map': 'Yes',
'match_id': 0,
'name': '__common__',
'parent': 'Project-Delivery Note',
'parentfield': 'field_mapper_details',
'parenttype': 'DocType Mapper'
'parenttype': 'DocType Mapper',
'to_field': 'customer'
},
# These values are common for all DocType Mapper
@ -52,67 +54,7 @@
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 1,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 2,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 3,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 4,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_no',
'idx': 5,
'to_field': 'contact_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'email_id',
'idx': 6,
'to_field': 'email_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 7,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 8,
'to_field': 'customer_group'
'doctype': 'Field Mapper Detail'
},
# Table Mapper Detail

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:35',
'docstatus': 0,
'modified': '2011-05-13 12:42:57',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'Administrator'
},
@ -50,135 +50,32 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'supplier',
'idx': 1,
'match_id': 0,
'to_field': 'supplier'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier_address',
'idx': 2,
'match_id': 0,
'to_field': 'supplier_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'supplier_name',
'idx': 4,
'match_id': 0,
'to_field': 'supplier_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 5,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 6,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 7,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 8,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 9,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 10,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 11,
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'warehouse',
'idx': 12,
'match_id': 1,
'to_field': 'warehouse'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'terms',
'idx': 13,
'match_id': 0,
'to_field': 'terms'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_factor',
'idx': 14,
'match_id': 1,
'to_field': 'conversion_factor'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 15,
'match_id': 1,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 16,
'match_id': 1,
'to_field': 'prevdoc_detail_docname'
},
@ -187,7 +84,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 17,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -196,53 +92,23 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 18,
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'uom',
'idx': 19,
'match_id': 1,
'to_field': 'uom'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 20,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 21,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 22,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
'idx': 23,
'match_id': 1,
'to_field': 'received_qty'
},
@ -251,7 +117,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
'idx': 24,
'match_id': 1,
'to_field': 'qty'
},
@ -260,197 +125,31 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.conversion_factor)',
'idx': 25,
'match_id': 1,
'to_field': 'stock_qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'purchase_rate',
'idx': 26,
'match_id': 1,
'to_field': 'purchase_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 27,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 28,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'import_rate',
'idx': 29,
'match_id': 1,
'to_field': 'import_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.import_rate)',
'idx': 30,
'match_id': 1,
'to_field': 'import_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'schedule_date',
'idx': 31,
'match_id': 1,
'to_field': 'schedule_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.purchase_rate)',
'idx': 32,
'match_id': 1,
'to_field': 'amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 33,
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 34,
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'category',
'idx': 35,
'match_id': 2,
'to_field': 'category'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'add_deduct_tax',
'idx': 36,
'match_id': 2,
'to_field': 'add_deduct_tax'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 37,
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 38,
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 39,
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 39,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 40,
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 41,
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'cost_center',
'idx': 42,
'match_id': 2,
'to_field': 'cost_center'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 43,
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'project_name',
'idx': 44,
'match_id': 0,
'to_field': 'project_name'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'from_field': 'po_details',
'from_table': 'PO Detail',
'idx': 1,
'match_id': 1,
'reference_doctype_key': 'prevdoc_doctype',
'reference_key': 'prevdoc_detail_docname',
@ -463,7 +162,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Purchase Order',
'idx': 2,
'match_id': 0,
'reference_key': 'prevdoc_docname',
'to_table': 'Purchase Receipt',
@ -475,7 +173,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'purchase_tax_details',
'from_table': 'Purchase Tax Detail',
'idx': 3,
'match_id': 2,
'to_field': 'purchase_tax_details',
'to_table': 'Purchase Tax Detail',

View File

@ -45,182 +45,18 @@
'name': 'Receivable Voucher-Delivery Note'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 1,
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 2,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 3,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 4,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 5,
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'price_list_name',
'idx': 6,
'match_id': 0,
'to_field': 'price_list_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 7,
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge',
'idx': 8,
'match_id': 0,
'to_field': 'charge'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'terms',
'idx': 9,
'match_id': 0,
'to_field': 'terms'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 10,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 11,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 12,
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 13,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 14,
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: flt(obj.qty) - flt(obj.delivered_qty)',
'idx': 15,
'match_id': 1,
'to_field': 'qty'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'base_ref_rate',
'idx': 16,
'match_id': 1,
'to_field': 'base_ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'ref_rate',
'idx': 17,
'match_id': 1,
'to_field': 'ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'basic_rate',
'idx': 18,
'match_id': 1,
'to_field': 'basic_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 19,
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 20,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -229,7 +65,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 21,
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
@ -238,25 +73,14 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 22,
'match_id': 1,
'to_field': 'prevdoc_detail_docname'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 23,
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.basic_rate)',
'idx': 24,
'match_id': 1,
'to_field': 'amount'
},
@ -265,223 +89,22 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.export_rate)',
'idx': 25,
'match_id': 1,
'to_field': 'export_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'adj_rate',
'idx': 26,
'match_id': 1,
'to_field': 'adj_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 27,
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'warehouse',
'idx': 28,
'match_id': 1,
'to_field': 'warehouse'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 29,
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 30,
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 31,
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 32,
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 33,
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 34,
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tax_amount',
'idx': 35,
'match_id': 2,
'to_field': 'tax_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total',
'idx': 36,
'match_id': 2,
'to_field': 'total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_person',
'idx': 37,
'match_id': 3,
'to_field': 'sales_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_percentage',
'idx': 38,
'match_id': 3,
'to_field': 'allocated_percentage'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_amount',
'idx': 39,
'match_id': 3,
'to_field': 'allocated_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'source',
'idx': 40,
'match_id': 0,
'to_field': 'source'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'campaign',
'idx': 41,
'match_id': 0,
'to_field': 'campaign'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_partner',
'idx': 42,
'match_id': 0,
'to_field': 'sales_partner'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 43,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 44,
'match_id': 0,
'to_field': 'delivery_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'net_total',
'idx': 45,
'match_id': 0,
'to_field': 'net_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total',
'idx': 46,
'match_id': 0,
'to_field': 'grand_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 47,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'project_name',
'idx': 48,
'match_id': 0,
'to_field': 'project_name'
},
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'from_table': 'Receivable Voucher',
'idx': 1,
'match_id': 0,
'to_table': 'Delivery Note',
'validation_logic': 'docstatus=1'
@ -492,7 +115,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'entries',
'from_table': 'RV Detail',
'idx': 2,
'match_id': 1,
'to_field': 'delivery_note_details',
'to_table': 'Delivery Note Detail',
@ -504,7 +126,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'other_charges',
'from_table': 'RV Tax Detail',
'idx': 3,
'match_id': 2,
'to_field': 'other_charges',
'to_table': 'RV Tax Detail',
@ -516,7 +137,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_team',
'from_table': 'Sales Team',
'idx': 4,
'match_id': 3,
'to_field': 'sales_team',
'to_table': 'Sales Team',

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:35',
'docstatus': 0,
'modified': '2011-05-16 11:48:19',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'Administrator'
},
@ -49,27 +49,15 @@
'checking_operator': '>=',
'doctype': 'Field Mapper Detail',
'from_field': 'transaction_date',
'idx': 1,
'map': 'No',
'match_id': 0,
'to_field': 'transaction_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'price_list_name',
'idx': 2,
'map': 'Yes',
'match_id': 0,
'to_field': 'price_list_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 3,
'map': 'Yes',
'match_id': 0,
'to_field': 'sales_order_no'
@ -80,188 +68,43 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 4,
'map': 'Yes',
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 5,
'map': 'Yes',
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'po_date',
'idx': 6,
'map': 'Yes',
'match_id': 0,
'to_field': 'po_date'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'po_no',
'idx': 7,
'map': 'Yes',
'match_id': 0,
'to_field': 'po_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_partner',
'idx': 8,
'map': 'Yes',
'match_id': 0,
'to_field': 'sales_partner'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'commission_rate',
'idx': 9,
'map': 'Yes',
'match_id': 0,
'to_field': 'commission_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_commission',
'idx': 10,
'map': 'Yes',
'match_id': 0,
'to_field': 'total_commission'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
'idx': 11,
'map': 'Yes',
'match_id': 0,
'to_field': 'currency'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'conversion_rate',
'idx': 12,
'map': 'Yes',
'match_id': 0,
'to_field': 'conversion_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'shipping_address_name',
'idx': 14,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 15,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 16,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'shipping_address',
'idx': 17,
'map': 'Yes',
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 18,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 19,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 20,
'map': 'Yes',
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 22,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge',
'idx': 23,
'map': 'Yes',
'match_id': 0,
'to_field': 'charge'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 24,
'map': 'Yes',
'match_id': 1,
'to_field': 'prevdoc_docname'
@ -271,7 +114,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 25,
'map': 'Yes',
'match_id': 1,
'to_field': 'prevdoc_doctype'
@ -281,118 +123,25 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 26,
'map': 'Yes',
'match_id': 1,
'to_field': 'prevdoc_detail_docname'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'export_rate',
'idx': 27,
'map': 'Yes',
'match_id': 1,
'to_field': 'export_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.export_rate)',
'idx': 28,
'map': 'Yes',
'match_id': 1,
'to_field': 'export_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 29,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 30,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 31,
'map': 'Yes',
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_group',
'idx': 32,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'stock_uom',
'idx': 33,
'map': 'Yes',
'match_id': 1,
'to_field': 'stock_uom'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'base_ref_rate',
'idx': 34,
'map': 'Yes',
'match_id': 1,
'to_field': 'base_ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'ref_rate',
'idx': 35,
'map': 'Yes',
'match_id': 1,
'to_field': 'ref_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'adj_rate',
'idx': 36,
'map': 'Yes',
'match_id': 1,
'to_field': 'adj_rate'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'basic_rate',
'idx': 37,
'map': 'Yes',
'match_id': 1,
'to_field': 'basic_rate'
@ -402,7 +151,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: flt(obj.qty) - flt(obj.delivered_qty)',
'idx': 38,
'map': 'Yes',
'match_id': 1,
'to_field': 'qty'
@ -412,7 +160,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval: (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.basic_rate)',
'idx': 39,
'map': 'Yes',
'match_id': 1,
'to_field': 'amount'
@ -422,298 +169,25 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'reserved_warehouse',
'idx': 40,
'map': 'Yes',
'match_id': 1,
'to_field': 'warehouse'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_tax_rate',
'idx': 41,
'map': 'Yes',
'match_id': 1,
'to_field': 'item_tax_rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'charge_type',
'idx': 42,
'map': 'Yes',
'match_id': 2,
'to_field': 'charge_type'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'row_id',
'idx': 43,
'map': 'Yes',
'match_id': 2,
'to_field': 'row_id'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_wise_tax_detail',
'idx': 44,
'map': 'Yes',
'match_id': 2,
'to_field': 'item_wise_tax_detail'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 45,
'map': 'Yes',
'match_id': 2,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'account_head',
'idx': 46,
'map': 'Yes',
'match_id': 2,
'to_field': 'account_head'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rate',
'idx': 47,
'map': 'Yes',
'match_id': 2,
'to_field': 'rate'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tax_amount',
'idx': 48,
'map': 'Yes',
'match_id': 2,
'to_field': 'tax_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'total',
'idx': 49,
'map': 'Yes',
'match_id': 2,
'to_field': 'total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'idx',
'idx': 50,
'map': 'Yes',
'match_id': 2,
'to_field': 'idx'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'net_total',
'idx': 51,
'map': 'Yes',
'match_id': 0,
'to_field': 'net_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'other_charges_total',
'idx': 52,
'map': 'Yes',
'match_id': 0,
'to_field': 'other_charges_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total',
'idx': 53,
'map': 'Yes',
'match_id': 0,
'to_field': 'grand_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rounded_total',
'idx': 54,
'map': 'Yes',
'match_id': 0,
'to_field': 'rounded_total'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'in_words',
'idx': 55,
'map': 'Yes',
'match_id': 0,
'to_field': 'in_words'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total_export',
'idx': 56,
'map': 'Yes',
'match_id': 0,
'to_field': 'grand_total_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'rounded_total_export',
'idx': 57,
'map': 'Yes',
'match_id': 0,
'to_field': 'rounded_total_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'in_words_export',
'idx': 58,
'map': 'Yes',
'match_id': 0,
'to_field': 'in_words_export'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_amount',
'idx': 59,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer_mobile_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_amount',
'idx': 60,
'map': 'Yes',
'match_id': 3,
'to_field': 'allocated_amount'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'allocated_percentage',
'idx': 60,
'map': 'Yes',
'match_id': 3,
'to_field': 'allocated_percentage'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'sales_person',
'idx': 61,
'map': 'Yes',
'match_id': 3,
'to_field': 'sales_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'source',
'idx': 62,
'map': 'Yes',
'match_id': 0,
'to_field': 'source'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'campaign',
'idx': 63,
'map': 'Yes',
'match_id': 0,
'to_field': 'campaign'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'brand',
'idx': 64,
'map': 'Yes',
'match_id': 1,
'to_field': 'brand'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'terms',
'idx': 65,
'map': 'Yes',
'match_id': 0,
'to_field': 'terms'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 66,
'map': 'Yes',
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'tc_name',
'idx': 66,
'map': 'Yes',
'match_id': 0,
'to_field': 'tc_name'
},
# Field Mapper Detail
{
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'project_name',
'idx': 67,
'map': 'Yes',
'match_id': 0,
'to_field': 'project_name'
@ -724,7 +198,6 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 70,
'map': 'Yes',
'match_id': 0,
'to_field': 'customer'
@ -735,7 +208,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_team',
'from_table': 'Sales Team',
'idx': 1,
'match_id': 3,
'to_field': 'sales_team',
'to_table': 'Sales Team',
@ -747,7 +219,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'other_charges',
'from_table': 'RV Tax Detail',
'idx': 2,
'match_id': 2,
'to_field': 'other_charges',
'to_table': 'RV Tax Detail',
@ -759,7 +230,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_order_details',
'from_table': 'Sales Order Detail',
'idx': 3,
'match_id': 1,
'reference_doctype_key': 'prevdoc_doctype',
'reference_key': 'prevdoc_detail_docname',
@ -772,7 +242,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Sales Order',
'idx': 4,
'match_id': 0,
'reference_key': 'prevdoc_docname',
'to_table': 'Delivery Note',

View File

@ -0,0 +1,27 @@
# Print Format, Delivery Note Packing List Wise
[
# These values are common in all dictionaries
{
'creation': '2011-08-18 16:29:14',
'docstatus': 0,
'modified': '2011-08-23 13:24:12',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all Print Format
{
'doctype': 'Print Format',
'html': "<html>\n<head>\n\n<script>\nfunction replaceAll(s,s1,s2){ return s.split(s1).join(s2);}\n\nfunction get_letter_head(){\n var cp = locals['Control Panel']['Control Panel'];\n if(cp.letter_head != 'None') {return cp.letter_head; }\n else{ return ''};\n }\n</script>\n<style>\n.cust_tbl { border-collapse:collapse; }\n.cust_tbl td { border:1px solid #848484; }\n</style>\n</head>\n\n<body>\n<script>\nreplaceAll(doc.print_packing_slip,'[HEADER GOES HERE]',get_letter_head());\n</script>\n</body>\n</html>",
'module': 'Stock',
'name': '__common__',
'standard': 'Yes'
},
# Print Format, Delivery Note Packing List Wise
{
'doctype': 'Print Format',
'name': 'Delivery Note Packing List Wise'
}
]

View File

@ -61,8 +61,8 @@ class DocType:
sr_count = sql("select count(name) from `tabSerial No` where item_code = '%s' and warehouse = '%s' and status ='In Store' and docstatus != 2" % (self.doc.item_code, self.doc.warehouse))[0][0]
if sr_count != self.doc.actual_qty:
msg = "Actual Qty(%s) in Bin is mismatched with total number(%s) of serial no in store for item: '%s' and warehouse: '%s'" % (self.doc.actual_qty, sr_count, self.doc.item_code, self.doc.warehouse)
msgprint(msg, raise_exception=1)
sendmail(['developer@iwebnotes.com'], sender='automail@webnotestech.com', subject='Serial No Count vs Bin Actual Qty', parts=[['text/plain', msg]])
msgprint(msg, raise_exception=1)
# --------------------------------
# get first stock ledger entry

View File

@ -13,7 +13,7 @@ sql = webnotes.conn.sql
get_value = webnotes.conn.get_value
in_transaction = webnotes.conn.in_transaction
convert_to_lists = webnotes.conn.convert_to_lists
# -----------------------------------------------------------------------------------------
from utilities.transaction_base import TransactionBase
@ -24,7 +24,7 @@ class DocType(TransactionBase):
self.doclist = doclist
self.tname = 'Delivery Note Detail'
self.fname = 'delivery_note_details'
# Notification objects
self.notify_obj = get_obj('Notification Control')
@ -33,7 +33,7 @@ class DocType(TransactionBase):
def autoname(self):
self.doc.name = make_autoname(self.doc.naming_series+'.#####')
# DOCTYPE TRIGGERS FUNCTIONS
# ==============================================================================
#************Fiscal Year Validation*****************************
@ -48,21 +48,21 @@ class DocType(TransactionBase):
# *********** Get Commission rate of Sales Partner ****************
def get_comm_rate(self, sales_partner):
return get_obj('Sales Common').get_comm_rate(sales_partner, self)
# *************** Pull Sales Order Details ************************
def pull_sales_order_details(self):
self.validate_prev_docname()
self.doc.clear_table(self.doclist,'other_charges')
if self.doc.sales_order_no:
if self.doc.sales_order_no:
get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Detail', 'Delivery Note Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team']]")
else:
msgprint("Please select Sales Order No. whose details need to be pulled")
msgprint("Please select Sales Order No. whose details need to be pulled")
return cstr(self.doc.sales_order_no)
#-------------------set item details -uom and item group----------------
def set_item_details(self):
for d in getlist(self.doclist,'delivery_note_details'):
@ -70,14 +70,14 @@ class DocType(TransactionBase):
if not d.stock_uom: d.stock_uom = res and cstr(res[0][0]) or ''
if not d.item_group: d.item_group = res and cstr(res[0][1]) or ''
d.save()
# ::::: Validates that Sales Order is not pulled twice :::::::
def validate_prev_docname(self):
for d in getlist(self.doclist, 'delivery_note_details'):
for d in getlist(self.doclist, 'delivery_note_details'):
if self.doc.sales_order_no == d.prevdoc_docname:
msgprint(cstr(self.doc.sales_order_no) + " sales order details have already been pulled. ")
raise Exception, "Validation Error. "
#Set Actual Qty based on item code and warehouse
#------------------------------------------------------
def set_actual_qty(self):
@ -91,14 +91,14 @@ class DocType(TransactionBase):
# -------------------------------------
def get_tc_details(self):
return get_obj('Sales Common').get_tc_details(self)
#pull project customer
#-------------------------
def pull_project_customer(self):
res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name)
if res:
get_obj('DocType Mapper', 'Project-Delivery Note').dt_map('Project', 'Delivery Note', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Delivery Note']]")
# DELIVERY NOTE DETAILS TRIGGER FUNCTIONS
# ================================================================================
@ -119,10 +119,10 @@ class DocType(TransactionBase):
}
return ret
# OTHER CHARGES TRIGGER FUNCTIONS
# ====================================================================================
# *********** Get Tax rate if account type is TAX ********************
def get_rate(self,arg):
return get_obj('Sales Common').get_rate(arg)
@ -137,7 +137,7 @@ class DocType(TransactionBase):
def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self)
#check in manage account if sales order required or not.
# ====================================================================================
def so_required(self):
@ -147,9 +147,9 @@ class DocType(TransactionBase):
if not d.prevdoc_docname:
msgprint("Sales Order No. required against item %s"%d.item_code)
raise Exception
# VALIDATE
# ====================================================================================
def validate(self):
@ -167,13 +167,16 @@ class DocType(TransactionBase):
sales_com_obj.make_packing_list(self,'delivery_note_details')
get_obj('Stock Ledger').validate_serial_no(self, 'packing_details')
sales_com_obj.validate_max_discount(self, 'delivery_note_details') #verify whether rate is not greater than max discount
sales_com_obj.get_allocated_sum(self) # this is to verify that the allocated % of sales persons is 100%
sales_com_obj.get_allocated_sum(self) # this is to verify that the allocated % of sales persons is 100%
sales_com_obj.check_conversion_rate(self)
# ::::::: Get total in Words ::::::::
dcc = TransactionBase().get_company_currency(self.doc.company)
self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total)
self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export)
# ::::::: Set Net Weight of each Packing
self.update_pack_nett_weight()
self.print_packing_slip()
# ::::::: Set actual qty for each item in selected warehouse :::::::
self.update_current_stock()
# :::::: set DN status :::::::
@ -181,8 +184,7 @@ class DocType(TransactionBase):
self.doc.status = 'Draft'
if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
if not self.doc.installation_status: self.doc.installation_status = 'Not Installed'
# ************** Validate Mandatory *************************
def validate_mandatory(self):
# :::::::::: Amendment Date ::::::::::::::
@ -198,20 +200,20 @@ class DocType(TransactionBase):
if not res:
msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
raise Exception
# Validate values with reference document
#----------------------------------------
def validate_reference_value(self):
get_obj('DocType Mapper', 'Sales Order-Delivery Note', with_children = 1).validate_reference_value(self, self.doc.name)
# ******* Validate Previous Document Details ************
def validate_prevdoc_details(self):
for d in getlist(self.doclist,'delivery_note_details'):
prevdoc = d.prevdoc_doctype
prevdoc_docname = d.prevdoc_docname
if prevdoc_docname and prevdoc:
# ::::::::::: Validates Transaction Date of DN and previous doc (i.e. SO , PO, PR) *********
trans_date = sql("select transaction_date from `tab%s` where name = '%s'" %(prevdoc,prevdoc_docname))[0][0]
@ -259,7 +261,7 @@ class DocType(TransactionBase):
ch = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
if d.prevdoc_doctype and d.prevdoc_detail_docname and ch and ch[0][0]=='Yes':
self.validate_items_with_prevdoc(d)
# validates whether item is not entered twice
e = [d.item_code, d.description, d.warehouse, d.prevdoc_docname or '', d.batch_no or '']
f = [d.item_code, d.description, d.prevdoc_docname or '']
@ -297,8 +299,8 @@ class DocType(TransactionBase):
for d in getlist(self.doclist, 'packing_details'):
bin = sql("select actual_qty, projected_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
# ON SUBMIT
# =================================================================================================
@ -322,7 +324,7 @@ class DocType(TransactionBase):
# on submit notification
self.notify_obj.notify_contact('Delivery Note',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person)
# *********** Checks whether actual quantity is present in warehouse *************
def check_qty_in_stock(self):
for d in getlist(self.doclist, 'packing_details'):
@ -334,7 +336,7 @@ class DocType(TransactionBase):
# ON CANCEL
# =================================================================================================
# =================================================================================================
def on_cancel(self):
sales_com_obj = get_obj(dt = 'Sales Common')
sales_com_obj.check_stop_sales_order(self)
@ -345,14 +347,14 @@ class DocType(TransactionBase):
# :::::: set DN status :::::::
set(self.doc, 'status', 'Cancelled')
# ******************** Check Next DocStatus **************************
def check_next_docstatus(self):
submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
if submit_rv:
msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
raise Exception , "Validation Error."
submit_in = sql("select t1.name from `tabInstallation Note` t1, `tabInstalled Item Details` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
if submit_in:
msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
@ -369,11 +371,11 @@ class DocType(TransactionBase):
if not d[0]:
msgprint("Message: Please enter Warehouse for item %s as it is stock item."% d[1])
raise Exception
# if prevdoc_doctype = "Sales Order"
# if prevdoc_doctype = "Sales Order"
if d[3] < 0 :
# Reduce Reserved Qty from warehouse
bin = get_obj('Warehouse', d[0]).update_bin(0, flt(update_stock) * flt(d[3]), 0, 0, 0, d[1], self.doc.transaction_date)
# Reduce actual qty from warehouse
self.make_sl_entry(d, d[0], - flt(d[2]) , 0, update_stock)
get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values)
@ -383,7 +385,7 @@ class DocType(TransactionBase):
def get_item_list(self, is_stopped):
return get_obj('Sales Common').get_item_list(self, is_stopped)
# ********************** Make Stock Entry ************************************
def make_sl_entry(self, d, wh, qty, in_value, update_stock):
self.values.append({
@ -394,8 +396,8 @@ class DocType(TransactionBase):
'posting_time' : self.doc.posting_time,
'voucher_type' : 'Delivery Note',
'voucher_no' : self.doc.name,
'voucher_detail_no' : '',
'actual_qty' : qty,
'voucher_detail_no' : '',
'actual_qty' : qty,
'stock_uom' : d[4],
'incoming_rate' : in_value,
'company' : self.doc.company,
@ -403,9 +405,9 @@ class DocType(TransactionBase):
'is_cancelled' : (update_stock==1) and 'No' or 'Yes',
'batch_no' : d[5],
'serial_no' : d[6]
})
})
# SEND SMS
# ============================================================================================
def send_sms(self):
@ -436,3 +438,44 @@ class DocType(TransactionBase):
# ===========================================
def repair_delivery_note(self):
get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self)
# Packing Slip Related
# ==========================================
def update_pack_nett_weight(self):
for d in getlist(self.doclist, 'delivery_note_details'):
if d.item_name:
item_wt = sql("select nett_weight from `tabItem` where item_name = '%s'" % (d.item_name))
d.pack_nett_wt = item_wt and flt(item_wt[0][0])*flt(d.qty) or 0
# ==========================================
def print_packing_slip(self):
prev_pack='0'
sno=0
html=''
tot_nett_wt,tot_gross_wt=0,0
for d in getlist(self.doclist, 'delivery_note_details'):
sno=sno+1
if sno!=1:#Footer goes here
html+='</table><table width="100%"><tr><td>CASE NO</td><td>'+cstr(d.pack_no)+'</td><td>NETT WT</td><td>'+cstr(tot_nett_wt)+'</td><td>CHECKED BY</td><td></td></tr><tr><td>SIZE</td><td></td><td>GROSS WT</td><td>'+cstr(tot_gross_wt)+'</td><td>PACKED BY</td><td></td></tr></table>'
if prev_pack!=d.pack_no: #Prepare Header Here
#Header code goes here
html+='<div align="center">[HEADER GOES HERE]</div><div><center><h2>Packing Slip</h2></center></div> <table width="100%"><tr><td>Order No.</td><td>'+cstr(self.doc.sales_order_no)+'</td><td>Shipping Marks</td><td>'+cstr(d.pack_no)+'</td></tr></table>'
html+='<table class="cust_tbl" style="page-break-after:always" width="100%"><tr><td>S.NO.</td><td>QUANTITY</td><td>CS.NO.</td><td>DESCRIPTION</td><td>WEIGHT</td><tr>'
sno=0
tot_nett_wt,to_gross_wt=flt(d.pack_nett_wt),flt(d.pack_gross_wt)
#Body code goes here
html+='<tr><td>'+cstr(sno+1)+'</td><td>'+cstr(d.qty)+'</td><td></td><td>'+d.item_code+'</td><td>'+cstr(d.pack_nett_wt)+'</td></tr>'
prev_pack=d.pack_no
tot_nett_wt+=flt(d.pack_nett_wt)
tot_gross_wt+=flt(d.pack_gross_wt)
html+='</html>'
self.doc.print_packing_slip=html

View File

@ -5,14 +5,23 @@
{
'creation': '2011-04-18 15:58:20',
'docstatus': 0,
'modified': '2011-08-09 17:10:45',
'modified': '2011-08-23 15:26:57',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocField
{
'doctype': 'DocField',
'name': '__common__',
'parent': 'Delivery Note',
'parentfield': 'fields',
'parenttype': 'DocType'
},
# These values are common for all DocType
{
'_last_update': '1311621379',
'_last_update': '1313665263',
'colour': 'White:FFF',
'doctype': 'DocType',
'document_type': 'Transaction',
@ -27,15 +36,16 @@
'show_in_menu': 0,
'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
'tag_fields': 'billing_status',
'version': 446
'version': 449
},
# These values are common for all DocField
# These values are common for all DocFormat
{
'doctype': 'DocField',
'doctype': 'DocFormat',
'format': 'Delivery Note Packing List Wise',
'name': '__common__',
'parent': 'Delivery Note',
'parentfield': 'fields',
'parentfield': 'formats',
'parenttype': 'DocType'
},
@ -109,21 +119,8 @@
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 5,
'permlevel': 0,
'role': 'Sales Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 6,
'permlevel': 1,
'role': 'All'
},
@ -131,11 +128,23 @@
# DocPerm
{
'doctype': 'DocPerm',
'idx': 7,
'idx': 6,
'permlevel': 2,
'role': 'All'
},
# DocFormat
{
'doctype': 'DocFormat',
'idx': 1
},
# DocFormat
{
'doctype': 'DocFormat',
'idx': 2
},
# DocField
{
'colour': 'White:FFF',
@ -1471,5 +1480,18 @@
'options': 'repair_delivery_note',
'permlevel': 0,
'print_hide': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'print_packing_slip',
'fieldtype': 'Text',
'hidden': 1,
'idx': 95,
'in_filter': 0,
'label': 'Print Packing Slip',
'permlevel': 0,
'print_hide': 0
}
]

View File

@ -5,7 +5,7 @@
{
'creation': '2010-08-08 17:08:58',
'docstatus': 0,
'modified': '2011-03-01 10:35:06',
'modified': '2011-08-22 12:11:51',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
@ -21,7 +21,7 @@
'section_style': 'Tray',
'server_code_error': ' ',
'show_in_menu': 0,
'version': 35
'version': 38
},
# These values are common for all DocField
@ -102,27 +102,13 @@
'width': '50px'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'no_of_packs',
'fieldtype': 'Int',
'idx': 5,
'label': 'No of Packs',
'oldfieldname': 'no_of_packs',
'oldfieldtype': 'Int',
'permlevel': 0,
'print_hide': 1,
'width': '100px'
},
# DocField
{
'default': '0.00',
'doctype': 'DocField',
'fieldname': 'qty',
'fieldtype': 'Currency',
'idx': 6,
'idx': 5,
'label': 'Quantity',
'oldfieldname': 'qty',
'oldfieldtype': 'Currency',
@ -138,7 +124,7 @@
'doctype': 'DocField',
'fieldname': 'ref_rate',
'fieldtype': 'Currency',
'idx': 7,
'idx': 6,
'label': 'Ref Rate',
'no_copy': 0,
'oldfieldname': 'ref_rate',
@ -156,7 +142,7 @@
'doctype': 'DocField',
'fieldname': 'adj_rate',
'fieldtype': 'Float',
'idx': 8,
'idx': 7,
'label': 'Discount (%)',
'oldfieldname': 'adj_rate',
'oldfieldtype': 'Float',
@ -171,7 +157,7 @@
'doctype': 'DocField',
'fieldname': 'export_rate',
'fieldtype': 'Currency',
'idx': 9,
'idx': 8,
'label': 'Rate',
'oldfieldname': 'export_rate',
'oldfieldtype': 'Currency',
@ -187,7 +173,7 @@
'doctype': 'DocField',
'fieldname': 'export_amount',
'fieldtype': 'Currency',
'idx': 10,
'idx': 9,
'label': 'Amount',
'oldfieldname': 'export_amount',
'oldfieldtype': 'Currency',
@ -202,7 +188,7 @@
'doctype': 'DocField',
'fieldname': 'base_ref_rate',
'fieldtype': 'Currency',
'idx': 11,
'idx': 10,
'label': 'Ref Rate*',
'oldfieldname': 'base_ref_rate',
'oldfieldtype': 'Currency',
@ -217,7 +203,7 @@
'doctype': 'DocField',
'fieldname': 'basic_rate',
'fieldtype': 'Currency',
'idx': 12,
'idx': 11,
'label': 'Rate*',
'oldfieldname': 'basic_rate',
'oldfieldtype': 'Currency',
@ -233,7 +219,7 @@
'doctype': 'DocField',
'fieldname': 'amount',
'fieldtype': 'Currency',
'idx': 13,
'idx': 12,
'label': 'Amount*',
'oldfieldname': 'amount',
'oldfieldtype': 'Currency',
@ -248,7 +234,7 @@
'doctype': 'DocField',
'fieldname': 'warehouse',
'fieldtype': 'Link',
'idx': 14,
'idx': 13,
'label': 'Warehouse',
'oldfieldname': 'warehouse',
'oldfieldtype': 'Link',
@ -264,7 +250,8 @@
'doctype': 'DocField',
'fieldname': 'serial_no',
'fieldtype': 'Text',
'idx': 15,
'idx': 14,
'in_filter': 1,
'label': 'Serial No',
'no_copy': 1,
'oldfieldname': 'serial_no',
@ -279,14 +266,13 @@
'doctype': 'DocField',
'fieldname': 'batch_no',
'fieldtype': 'Link',
'idx': 16,
'idx': 15,
'label': 'Batch No',
'oldfieldname': 'batch_no',
'oldfieldtype': 'Link',
'options': 'Batch',
'permlevel': 0,
'print_hide': 1,
'search_index': 0
'print_hide': 1
},
# DocField
@ -294,14 +280,13 @@
'doctype': 'DocField',
'fieldname': 'item_group',
'fieldtype': 'Link',
'idx': 17,
'idx': 16,
'label': 'Item Group',
'oldfieldname': 'item_group',
'oldfieldtype': 'Link',
'options': 'Item Group',
'permlevel': 1,
'print_hide': 1,
'search_index': 0
'print_hide': 1
},
# DocField
@ -309,23 +294,77 @@
'doctype': 'DocField',
'fieldname': 'brand',
'fieldtype': 'Link',
'idx': 18,
'idx': 17,
'label': 'Brand Name',
'oldfieldname': 'brand',
'oldfieldtype': 'Link',
'options': 'Brand',
'permlevel': 1,
'print_hide': 1,
'search_index': 0,
'width': '150px'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'pack_no',
'fieldtype': 'Data',
'idx': 18,
'label': 'Pack No',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'pack_gross_wt',
'fieldtype': 'Float',
'idx': 19,
'label': 'Pack Gross Wt',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'weight_uom',
'fieldtype': 'Link',
'idx': 20,
'label': 'Weight UOM',
'options': 'UOM',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'pack_nett_wt',
'fieldtype': 'Float',
'idx': 21,
'label': 'Pack Nett Wt',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'no_of_packs',
'fieldtype': 'Int',
'idx': 22,
'label': 'No of Packs',
'oldfieldname': 'no_of_packs',
'oldfieldtype': 'Int',
'permlevel': 0,
'print_hide': 1,
'width': '100px'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'pack_unit',
'fieldtype': 'Data',
'idx': 19,
'idx': 23,
'label': 'Pack Unit',
'oldfieldname': 'pack_unit',
'oldfieldtype': 'Data',
@ -339,7 +378,7 @@
'doctype': 'DocField',
'fieldname': 'installed_qty',
'fieldtype': 'Currency',
'idx': 20,
'idx': 24,
'label': 'Installed Qty',
'no_copy': 1,
'oldfieldname': 'installed_qty',
@ -354,7 +393,7 @@
'doctype': 'DocField',
'fieldname': 'actual_qty',
'fieldtype': 'Currency',
'idx': 21,
'idx': 25,
'label': 'Available Qty at Warehouse',
'no_copy': 1,
'oldfieldname': 'actual_qty',
@ -364,29 +403,12 @@
'width': '150px'
},
# DocField
{
'colour': 'White:FFF',
'default': '0.00',
'doctype': 'DocField',
'fieldname': 'billed_qty',
'fieldtype': 'Currency',
'idx': 22,
'label': 'Billed Qty',
'no_copy': 1,
'oldfieldname': 'billed_qty',
'oldfieldtype': 'Currency',
'permlevel': 1,
'print_hide': 1,
'width': '100px'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'billed_amt',
'fieldtype': 'Currency',
'idx': 23,
'idx': 26,
'label': 'Billed Amt',
'no_copy': 1,
'permlevel': 1,
@ -401,7 +423,7 @@
'fieldname': 'prevdoc_docname',
'fieldtype': 'Data',
'hidden': 0,
'idx': 24,
'idx': 27,
'in_filter': 1,
'label': 'Against Document No',
'no_copy': 1,
@ -419,14 +441,14 @@
'fieldname': 'prevdoc_doctype',
'fieldtype': 'Data',
'hidden': 1,
'idx': 25,
'idx': 28,
'in_filter': 1,
'label': 'Document Type',
'oldfieldname': 'prevdoc_doctype',
'oldfieldtype': 'Data',
'permlevel': 1,
'print_hide': 1,
'search_index': 0,
'search_index': 1,
'width': '150px'
},
@ -436,7 +458,7 @@
'fieldname': 'prevdoc_date',
'fieldtype': 'Date',
'hidden': 1,
'idx': 26,
'idx': 29,
'in_filter': 1,
'label': 'Against Document Date',
'oldfieldname': 'prevdoc_date',
@ -451,14 +473,14 @@
'fieldname': 'prevdoc_detail_docname',
'fieldtype': 'Data',
'hidden': 1,
'idx': 27,
'idx': 30,
'in_filter': 1,
'label': 'Against Document Detail No',
'oldfieldname': 'prevdoc_detail_docname',
'oldfieldtype': 'Data',
'permlevel': 1,
'print_hide': 1,
'search_index': 1,
'search_index': 0,
'width': '150px'
},
@ -468,7 +490,7 @@
'fieldname': 'item_tax_rate',
'fieldtype': 'Small Text',
'hidden': 1,
'idx': 28,
'idx': 31,
'label': 'Item Tax Rate',
'oldfieldname': 'item_tax_rate',
'oldfieldtype': 'Small Text',
@ -482,7 +504,7 @@
'doctype': 'DocField',
'fieldname': 'page_break',
'fieldtype': 'Check',
'idx': 29,
'idx': 32,
'label': 'Page Break',
'oldfieldname': 'page_break',
'oldfieldtype': 'Check',

View File

@ -1,17 +1,17 @@
cur_frm.cscript.refresh = function(doc) {
// make sensitive fields(has_serial_no, is_stock_item, valuation_method)
// read only if any stock ledger entry exists
if ((!doc.__islocal) && (doc.is_stock_item == 'Yes')) {
var callback = function(r, rt) {
if (r.message == 'exists') permlevel = 1;
else permlevel = 0;
set_field_permlevel('has_serial_no', permlevel);
set_field_permlevel('is_stock_item', permlevel);
set_field_permlevel('valuation_method', permlevel);
}
$c_obj(make_doclist(doc.doctype, doc.name),'check_if_sle_exists','',callback);
$c_obj(make_doclist(doc.doctype, doc.name),'check_if_sle_exists','',callback);
}
}
@ -24,25 +24,25 @@ cur_frm.fields_dict['default_bom'].get_query = function(doc) {
// Expense Account
// ---------------------------------
cur_frm.fields_dict['purchase_account'].get_query = function(doc){
cur_frm.fields_dict['purchase_account'].get_query = function(doc){
return 'SELECT DISTINCT `tabAccount`.`name` FROM `tabAccount` WHERE `tabAccount`.`debit_or_credit`="Debit" AND `tabAccount`.`group_or_ledger`="Ledger" AND `tabAccount`.`docstatus`!=2 AND `tabAccount`.`is_pl_account` = "Yes" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50'
}
// Income Account
// Income Account
// --------------------------------
cur_frm.fields_dict['default_income_account'].get_query = function(doc) {
return 'SELECT DISTINCT `tabAccount`.`name` FROM `tabAccount` WHERE `tabAccount`.`debit_or_credit`="Credit" AND `tabAccount`.`group_or_ledger`="Ledger" AND `tabAccount`.`is_pl_account` = "Yes" AND `tabAccount`.`docstatus`!=2 AND `tabAccount`.`account_type` ="Income Account" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50'
}
// Purchase Cost Center
// Purchase Cost Center
// -----------------------------
cur_frm.fields_dict['cost_center'].get_query = function(doc) {
return 'SELECT `tabCost Center`.`name` FROM `tabCost Center` WHERE `tabCost Center`.%(key)s LIKE "%s" AND `tabCost Center`.`group_or_ledger` = "Ledger" AND `tabCost Center`.`docstatus`!= 2 ORDER BY `tabCost Center`.`name` ASC LIMIT 50'
}
// Sales Cost Center
// Sales Cost Center
// -----------------------------
cur_frm.fields_dict['default_sales_cost_center'].get_query = function(doc) {
return 'SELECT `tabCost Center`.`name` FROM `tabCost Center` WHERE `tabCost Center`.%(key)s LIKE "%s" AND `tabCost Center`.`group_or_ledger` = "Ledger" AND `tabCost Center`.`docstatus`!= 2 ORDER BY `tabCost Center`.`name` ASC LIMIT 50'
@ -66,7 +66,7 @@ cur_frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) {
cur_frm.cscript.IGHelp = function(doc,dt,dn){
var call_back = function(){
var sb_obj = new SalesBrowser();
var sb_obj = new SalesBrowser();
sb_obj.set_val('Item Group');
}
@ -79,21 +79,34 @@ cur_frm.cscript.IGHelp = function(doc,dt,dn){
// in the "alternate_description" field
cur_frm.cscript['Add Image'] = function(doc, dt, dn) {
if(!doc.file_list) {
msgprint('Please attach a file first!');
msgprint('Please attach a file first!');
}
var f = doc.file_list.split('\n')[0];
var fname = f.split(',')[0];
var fid = f.split(',')[1];
if(!in_list(['jpg','jpeg','gif','png'], fname.split('.')[1].toLowerCase())) {
msgprint('File must be of extension jpg, jpeg, gif or png'); return;
}
doc.description_html = repl('<table style="width: 100%; table-layout: fixed;">'+
'<tr><td style="width:110px"><img src="%(imgurl)s" width="100px"></td>'+
'<td>%(desc)s</td></tr>'+
'</table>', {imgurl: wn.urllib.get_file_url(fid), desc:doc.description});
refresh_field('description_html');
}
//===================== Quotation to validation - either customer or lead mandatory ====================
cur_frm.cscript.weight_to_validate = function(doc,cdt,cdn){
if((doc.nett_weight || doc.gross_weight) && !doc.weight_uom)
{
alert('Weight is mentioned,\nPlease mention "Weight UOM" too');
validated=0;
}
}
//===================validation function =================================
cur_frm.cscript.validate = function(doc,cdt,cdn){
cur_frm.cscript.weight_to_validate(doc,cdt,cdn);
}

View File

@ -13,7 +13,7 @@ sql = webnotes.conn.sql
get_value = webnotes.conn.get_value
in_transaction = webnotes.conn.in_transaction
convert_to_lists = webnotes.conn.convert_to_lists
# -----------------------------------------------------------------------------------------
@ -21,7 +21,7 @@ class DocType:
def __init__(self, doc, doclist=[]):
self.doc = doc
self.doclist = doclist
def get_tax_rate(self, tax_type):
rate = sql("select tax_rate from tabAccount where name = %s", tax_type)
ret = {
@ -39,14 +39,14 @@ class DocType:
if not self.doc.stock_uom:
msgprint("Please enter Stock UOM first.")
raise Exception
if cstr(d.uom) in check_list:
msgprint("UOM %s has been entered more than once in Conversion Factor Details." % cstr(d.uom))
raise Exception
if not cstr(d.uom) in check_list:
check_list.append(cstr(d.uom))
if cstr(d.uom) == cstr(self.doc.stock_uom):
if flt(d.conversion_factor) != 1:
msgprint("Conversion Fator of UOM : %s should be equal to 1. As UOM : %s is Stock UOM of Item: %s." % ( cstr(d.uom), cstr(d.uom), cstr(self.doc.name)))
@ -56,14 +56,14 @@ class DocType:
elif cstr(d.uom) != cstr(self.doc.stock_uom) and flt(d.conversion_factor) == 1:
msgprint("Conversion Factor of UOM : %s should not be equal to 1. As UOM : %s is not Stock UOM of Item: %s." % ( cstr(d.uom), cstr(d.uom), cstr(self.doc.name)))
raise Exception
if not cstr(self.doc.stock_uom) in check_list :
child = addchild( self.doc, 'uom_conversion_details', 'UOM Conversion Detail', 1, self.doclist)
child.uom = self.doc.stock_uom
child.conversion_factor = 1
child.save()
# Check whether Ref Rate is not entered twice for same Price List and Currency
def check_ref_rate_detail(self):
check_list=[]
@ -73,7 +73,13 @@ class DocType:
raise Exception
else:
check_list.append([cstr(d.price_list_name),cstr(d.ref_currency)])
# Append all the customer codes and insert into "customer_code" field of item table
def fill_customer_code(self):
cust_code=[]
for d in getlist(self.doclist,'item_customer_details'):
cust_code.append(d.ref_code)
self.doc.customer_code=','.join(cust_code)
# Check whether Tax Rate is not entered twice for same Tax Type
def check_item_tax(self):
@ -89,7 +95,7 @@ class DocType:
msgprint("Rate is entered twice for Tax : '%s'." % (d.tax_type))
raise Exception
else:
check_list.append(d.tax_type)
check_list.append(d.tax_type)
def check_for_active_boms(self, check):
if check in ['Is Active', 'Is Purchase Item']:
@ -102,7 +108,7 @@ class DocType:
if bom and bom[0][0]:
msgprint("%s should be 'Yes'. As Item %s is present in one or many Active BOMs." % (cstr(check), cstr(self.doc.name)))
raise Exception
def validate(self):
fl = {'is_manufactured_item' :'Is Manufactured Item',
'is_sub_contracted_item':'Is Sub Contracted Item',
@ -112,18 +118,19 @@ class DocType:
if cstr(self.doc.fields[d]) != 'Yes':
self.check_for_active_boms(check = fl[d])
self.check_ref_rate_detail()
self.fill_customer_code()
self.check_item_tax()
if not self.doc.min_order_qty:
self.doc.min_order_qty = 0
self.check_non_asset_warehouse()
if self.doc.is_pro_applicable == 'Yes' and self.doc.is_manufactured_item != 'Yes':
msgprint("If making Production Order is allowed then, it should also allow to make Bill of Materials. Refer Manufacturing section.")
raise Exception
if self.doc.is_pro_applicable == 'Yes' and self.doc.is_stock_item == 'No':
msgprint("As Production Order can be made for this Item, then Is Stock Item Should be 'Yes' as we maintain it's stock. Refer Manufacturing and Inventory section.", raise_exception=1)
if self.doc.is_stock_item == "Yes" and not self.doc.default_warehouse:
msgprint("As we maintain stock of this item, its better to maintain default warehouse. To add default warehouse please go to 'Inventory' section. It will be fetched automatically while making Sales Order, Delivery Note, etc.. ", 1)
@ -146,7 +153,7 @@ class DocType:
if flt(total_qty) < flt(self.doc.minimum_inventory_level):
msgprint("Your minimum inventory level is reached")
send_to = []
send = sql("select t1.email from `tabProfile` t1,`tabUserRole` t2 where t2.role IN ('Material Master Manager','Purchase Manager') and t2.parent = t1.name")
send = sql("select t1.email from `tabProfile` t1,`tabUserRole` t2 where t2.role IN ('Material Master Manager','Purchase Manager') and t2.parent = t1.name")
for d in send:
send_to.append(d[0])
msg = '''
@ -167,10 +174,10 @@ Total Available Qty: %s
ret = {
'file_group' : file and file[0]['file_group'] or '',
'description' : file and file[0]['description'] or ''
}
return ret
def check_if_sle_exists(self):
"""
checks if any stock ledger entry exists for this item
@ -178,7 +185,7 @@ Total Available Qty: %s
sle = sql("select name from `tabStock Ledger Entry` where item_code = %s and ifnull(is_cancelled, 'No') = 'No'", self.doc.name)
return sle and 'exists' or 'not exists'
def on_rename(self,newdn,olddn):
sql("update tabItem set item_code = %s where name = %s", (newdn, olddn))
sql("update tabItem set item_code = %s where name = %s", (newdn, olddn))

View File

@ -5,14 +5,14 @@
{
'creation': '2010-08-08 17:09:05',
'docstatus': 0,
'modified': '2011-05-30 15:22:32',
'modified': '2011-08-18 13:03:31',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'_last_update': '1309508838',
'_last_update': '1313651083',
'allow_attach': 1,
'allow_trash': 1,
'autoname': 'field:item_code',
@ -22,13 +22,13 @@
'max_attachments': 1,
'module': 'Stock',
'name': '__common__',
'search_fields': 'item_name,description,item_group',
'search_fields': 'item_name,description,item_group,customer_code',
'section_style': 'Tray',
'server_code_error': ' ',
'show_in_menu': 0,
'subject': '%(item_name)s',
'tag_fields': 'item_group',
'version': 153
'version': 161
},
# These values are common for all DocField
@ -42,14 +42,12 @@
# These values are common for all DocPerm
{
'amend': 0,
'doctype': 'DocPerm',
'name': '__common__',
'parent': 'Item',
'parentfield': 'permissions',
'parenttype': 'DocType',
'read': 1,
'submit': 0
'read': 1
},
# DocType, Item
@ -60,44 +58,53 @@
# DocPerm
{
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'permlevel': 0,
'role': 'Material User',
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 1,
'permlevel': 1,
'role': 'Material Manager',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 2,
'permlevel': 0,
'role': 'Material Manager',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 3,
'permlevel': 1,
'role': 'Material User',
'submit': 0,
'write': 0
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 4,
'permlevel': 0,
'role': 'Material User',
'submit': 0,
'write': 0
},
@ -114,7 +121,6 @@
# DocPerm
{
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 6,
@ -136,13 +142,10 @@
# DocPerm
{
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 8,
'permlevel': 1,
'role': 'System Manager',
'write': 0
'role': 'System Manager'
},
# DocField
@ -197,7 +200,7 @@
'oldfieldtype': 'Data',
'permlevel': 0,
'reqd': 1,
'search_index': 0
'search_index': 1
},
# DocField
@ -241,8 +244,7 @@
'options': 'Brand',
'permlevel': 0,
'print_hide': 1,
'reqd': 0,
'search_index': 0
'reqd': 0
},
# DocField
@ -285,7 +287,7 @@
'description': 'Generates HTML to include image (1st attachment) in the description',
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 12,
'idx': 11,
'label': 'Add Image',
'permlevel': 0
},
@ -294,7 +296,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 13,
'idx': 12,
'label': 'Inventory',
'oldfieldtype': 'Section Break',
'permlevel': 0
@ -307,14 +309,13 @@
'doctype': 'DocField',
'fieldname': 'stock_uom',
'fieldtype': 'Link',
'idx': 14,
'idx': 13,
'label': 'Default UoM',
'oldfieldname': 'stock_uom',
'oldfieldtype': 'Link',
'options': 'UOM',
'permlevel': 0,
'reqd': 1,
'search_index': 0
'reqd': 1
},
# DocField
@ -325,7 +326,7 @@
'doctype': 'DocField',
'fieldname': 'is_stock_item',
'fieldtype': 'Select',
'idx': 15,
'idx': 14,
'label': 'Is Stock Item',
'oldfieldname': 'is_stock_item',
'oldfieldtype': 'Select',
@ -339,7 +340,7 @@
'doctype': 'DocField',
'fieldname': 'valuation_method',
'fieldtype': 'Select',
'idx': 16,
'idx': 15,
'label': 'Valuation Method',
'oldfieldname': 'valuation_method',
'oldfieldtype': 'Select',
@ -352,13 +353,12 @@
'doctype': 'DocField',
'fieldname': 'default_warehouse',
'fieldtype': 'Link',
'idx': 17,
'idx': 16,
'label': 'Default Warehouse',
'oldfieldname': 'default_warehouse',
'oldfieldtype': 'Link',
'options': 'Warehouse',
'permlevel': 0,
'search_index': 0
'permlevel': 0
},
# DocField
@ -368,7 +368,7 @@
'doctype': 'DocField',
'fieldname': 'tolerance',
'fieldtype': 'Currency',
'idx': 18,
'idx': 17,
'label': 'Allowance Percent',
'oldfieldname': 'tolerance',
'oldfieldtype': 'Currency',
@ -380,7 +380,7 @@
'doctype': 'DocField',
'fieldname': 're_order_level',
'fieldtype': 'Currency',
'idx': 19,
'idx': 18,
'label': 'Re-Order Level',
'oldfieldname': 're_order_level',
'oldfieldtype': 'Currency',
@ -395,7 +395,7 @@
'doctype': 'DocField',
'fieldname': 'minimum_inventory_level',
'fieldtype': 'Currency',
'idx': 20,
'idx': 19,
'label': 'Minimum Inventory Level',
'oldfieldname': 'minimum_inventory_level',
'oldfieldtype': 'Currency',
@ -412,7 +412,7 @@
'fieldname': 'min_order_qty',
'fieldtype': 'Currency',
'hidden': 0,
'idx': 21,
'idx': 20,
'label': 'Minimum Order Qty',
'oldfieldname': 'min_order_qty',
'oldfieldtype': 'Currency',
@ -423,7 +423,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 22,
'idx': 21,
'oldfieldtype': 'Column Break',
'permlevel': 0,
'width': '50%'
@ -437,7 +437,7 @@
'doctype': 'DocField',
'fieldname': 'is_asset_item',
'fieldtype': 'Select',
'idx': 23,
'idx': 22,
'label': 'Is Asset Item',
'oldfieldname': 'is_asset_item',
'oldfieldtype': 'Select',
@ -453,7 +453,7 @@
'doctype': 'DocField',
'fieldname': 'has_batch_no',
'fieldtype': 'Select',
'idx': 24,
'idx': 23,
'label': 'Has Batch No',
'oldfieldname': 'has_batch_no',
'oldfieldtype': 'Select',
@ -470,7 +470,8 @@
'doctype': 'DocField',
'fieldname': 'has_serial_no',
'fieldtype': 'Select',
'idx': 25,
'idx': 24,
'in_filter': 1,
'label': 'Has Serial No',
'oldfieldname': 'has_serial_no',
'oldfieldtype': 'Select',
@ -484,7 +485,7 @@
'doctype': 'DocField',
'fieldname': 'warranty_period',
'fieldtype': 'Data',
'idx': 26,
'idx': 25,
'label': 'Warranty Period (in days)',
'oldfieldname': 'warranty_period',
'oldfieldtype': 'Data',
@ -496,19 +497,50 @@
'doctype': 'DocField',
'fieldname': 'end_of_life',
'fieldtype': 'Date',
'idx': 27,
'idx': 26,
'label': 'End of Life',
'oldfieldname': 'end_of_life',
'oldfieldtype': 'Date',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'nett_weight',
'fieldtype': 'Float',
'idx': 27,
'label': 'Nett Weight',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'gross_weight',
'fieldtype': 'Float',
'idx': 28,
'label': 'Gross Weight',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'weight_uom',
'fieldtype': 'Link',
'idx': 29,
'label': 'Weight UOM',
'options': 'UOM',
'permlevel': 0
},
# DocField
{
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 28,
'idx': 30,
'label': 'Purchase Details',
'oldfieldtype': 'Section Break',
'permlevel': 0
@ -522,7 +554,7 @@
'doctype': 'DocField',
'fieldname': 'is_purchase_item',
'fieldtype': 'Select',
'idx': 29,
'idx': 31,
'label': 'Is Purchase Item',
'oldfieldname': 'is_purchase_item',
'oldfieldtype': 'Select',
@ -538,7 +570,7 @@
'doctype': 'DocField',
'fieldname': 'lead_time_days',
'fieldtype': 'Int',
'idx': 30,
'idx': 32,
'label': 'Lead Time Days',
'no_copy': 1,
'oldfieldname': 'lead_time_days',
@ -553,13 +585,12 @@
'doctype': 'DocField',
'fieldname': 'purchase_account',
'fieldtype': 'Link',
'idx': 31,
'idx': 33,
'label': 'Default Expense Account',
'oldfieldname': 'purchase_account',
'oldfieldtype': 'Link',
'options': 'Account',
'permlevel': 0,
'search_index': 0,
'trigger': 'Client'
},
@ -570,13 +601,12 @@
'doctype': 'DocField',
'fieldname': 'cost_center',
'fieldtype': 'Link',
'idx': 32,
'idx': 34,
'label': 'Default Cost Center',
'oldfieldname': 'cost_center',
'oldfieldtype': 'Link',
'options': 'Cost Center',
'permlevel': 0,
'search_index': 0
'permlevel': 0
},
# DocField
@ -586,7 +616,7 @@
'doctype': 'DocField',
'fieldname': 'buying_cost',
'fieldtype': 'Currency',
'idx': 33,
'idx': 35,
'label': 'Buying Cost',
'no_copy': 1,
'oldfieldname': 'buying_cost',
@ -600,7 +630,7 @@
'doctype': 'DocField',
'fieldname': 'last_purchase_rate',
'fieldtype': 'Currency',
'idx': 34,
'idx': 36,
'label': 'Last Purchase Rate',
'no_copy': 1,
'oldfieldname': 'last_purchase_rate',
@ -613,7 +643,7 @@
'doctype': 'DocField',
'fieldname': 'standard_rate',
'fieldtype': 'Currency',
'idx': 35,
'idx': 37,
'label': 'Standard Rate',
'oldfieldname': 'standard_rate',
'oldfieldtype': 'Currency',
@ -624,7 +654,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 36,
'idx': 38,
'oldfieldtype': 'Column Break',
'permlevel': 0,
'width': '50%'
@ -635,7 +665,7 @@
'doctype': 'DocField',
'fieldname': 'uom_conversion_details',
'fieldtype': 'Table',
'idx': 37,
'idx': 39,
'label': 'UOM Conversion Details',
'oldfieldname': 'uom_conversion_details',
'oldfieldtype': 'Table',
@ -647,7 +677,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 38,
'idx': 40,
'label': 'Sales Details',
'oldfieldtype': 'Section Break',
'permlevel': 0
@ -661,7 +691,8 @@
'doctype': 'DocField',
'fieldname': 'is_sales_item',
'fieldtype': 'Select',
'idx': 39,
'idx': 41,
'in_filter': 1,
'label': 'Is Sales Item',
'oldfieldname': 'is_sales_item',
'oldfieldtype': 'Select',
@ -678,7 +709,8 @@
'doctype': 'DocField',
'fieldname': 'is_service_item',
'fieldtype': 'Select',
'idx': 40,
'idx': 42,
'in_filter': 1,
'label': 'Is Service Item',
'oldfieldname': 'is_service_item',
'oldfieldtype': 'Select',
@ -695,7 +727,7 @@
'doctype': 'DocField',
'fieldname': 'is_sample_item',
'fieldtype': 'Select',
'idx': 41,
'idx': 43,
'label': 'Allow Samples',
'oldfieldname': 'is_sample_item',
'oldfieldtype': 'Select',
@ -709,7 +741,7 @@
'doctype': 'DocField',
'fieldname': 'max_discount',
'fieldtype': 'Currency',
'idx': 42,
'idx': 44,
'label': 'Max Discount (%)',
'oldfieldname': 'max_discount',
'oldfieldtype': 'Currency',
@ -721,11 +753,10 @@
'doctype': 'DocField',
'fieldname': 'default_income_account',
'fieldtype': 'Link',
'idx': 43,
'idx': 45,
'label': 'Default Income Account',
'options': 'Account',
'permlevel': 0,
'search_index': 0
'permlevel': 0
},
# DocField
@ -733,11 +764,10 @@
'doctype': 'DocField',
'fieldname': 'default_sales_cost_center',
'fieldtype': 'Link',
'idx': 44,
'idx': 46,
'label': 'Cost Center',
'options': 'Cost Center',
'permlevel': 0,
'search_index': 0
'permlevel': 0
},
# DocField
@ -746,7 +776,7 @@
'fieldname': 'sales_rate',
'fieldtype': 'Currency',
'hidden': 1,
'idx': 45,
'idx': 47,
'label': 'Sales Rate',
'oldfieldname': 'sales_rate',
'oldfieldtype': 'Currency',
@ -757,7 +787,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 46,
'idx': 48,
'oldfieldtype': 'Column Break',
'permlevel': 0,
'width': '50%'
@ -770,7 +800,7 @@
'doctype': 'DocField',
'fieldname': 'ref_rate_details',
'fieldtype': 'Table',
'idx': 47,
'idx': 49,
'label': 'Ref Rate Details',
'oldfieldname': 'ref_rate_details',
'oldfieldtype': 'Table',
@ -778,11 +808,23 @@
'permlevel': 0
},
# DocField
{
'description': 'For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes',
'doctype': 'DocField',
'fieldname': 'item_customer_details',
'fieldtype': 'Table',
'idx': 50,
'label': 'Customer Codes',
'options': 'Item Customer Detail',
'permlevel': 0
},
# DocField
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 48,
'idx': 51,
'label': 'Item Tax',
'oldfieldtype': 'Section Break',
'permlevel': 0
@ -793,7 +835,7 @@
'doctype': 'DocField',
'fieldname': 'item_tax',
'fieldtype': 'Table',
'idx': 49,
'idx': 52,
'label': 'Item Tax1',
'oldfieldname': 'item_tax',
'oldfieldtype': 'Table',
@ -805,7 +847,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 50,
'idx': 53,
'label': 'Inspection Criteria',
'oldfieldtype': 'Section Break',
'permlevel': 0
@ -817,7 +859,7 @@
'doctype': 'DocField',
'fieldname': 'inspection_required',
'fieldtype': 'Select',
'idx': 51,
'idx': 54,
'label': 'Inspection Required',
'no_copy': 0,
'oldfieldname': 'inspection_required',
@ -832,7 +874,7 @@
'doctype': 'DocField',
'fieldname': 'item_specification_details',
'fieldtype': 'Table',
'idx': 52,
'idx': 55,
'label': 'Item Specification Detail',
'oldfieldname': 'item_specification_details',
'oldfieldtype': 'Table',
@ -844,7 +886,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 53,
'idx': 56,
'label': 'Manufacturing',
'oldfieldtype': 'Section Break',
'permlevel': 0
@ -858,7 +900,7 @@
'doctype': 'DocField',
'fieldname': 'is_manufactured_item',
'fieldtype': 'Select',
'idx': 54,
'idx': 57,
'label': 'Allow Bill of Materials',
'oldfieldname': 'is_manufactured_item',
'oldfieldtype': 'Select',
@ -873,14 +915,13 @@
'doctype': 'DocField',
'fieldname': 'default_bom',
'fieldtype': 'Link',
'idx': 55,
'idx': 58,
'label': 'Default BOM',
'no_copy': 1,
'oldfieldname': 'default_bom',
'oldfieldtype': 'Link',
'options': 'Bill Of Materials',
'permlevel': 1,
'search_index': 0
'permlevel': 1
},
# DocField
@ -891,7 +932,7 @@
'doctype': 'DocField',
'fieldname': 'is_pro_applicable',
'fieldtype': 'Select',
'idx': 56,
'idx': 59,
'label': 'Allow Production Order',
'oldfieldname': 'is_pro_applicable',
'oldfieldtype': 'Select',
@ -908,7 +949,7 @@
'doctype': 'DocField',
'fieldname': 'is_sub_contracted_item',
'fieldtype': 'Select',
'idx': 57,
'idx': 60,
'label': 'Is Sub Contracted Item',
'oldfieldname': 'is_sub_contracted_item',
'oldfieldtype': 'Select',
@ -923,9 +964,23 @@
'fieldname': 'file_list',
'fieldtype': 'Text',
'hidden': 1,
'idx': 59,
'idx': 61,
'label': 'File List',
'permlevel': 0,
'print_hide': 1
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'customer_code',
'fieldtype': 'Data',
'hidden': 1,
'idx': 62,
'in_filter': 1,
'label': 'Customer Code',
'no_copy': 1,
'permlevel': 0,
'print_hide': 1
}
]

View File

@ -0,0 +1,73 @@
# DocType, Item Customer Detail
[
# These values are common in all dictionaries
{
'creation': '2011-08-18 11:38:43',
'docstatus': 0,
'modified': '2011-08-18 11:54:36',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'autoname': 'ITEMCUST/.#####',
'colour': 'White:FFF',
'description': 'For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes',
'doctype': 'DocType',
'in_create': 1,
'istable': 1,
'module': 'Stock',
'name': '__common__',
'read_only': 0,
'section_style': 'Tray',
'server_code_error': ' ',
'show_in_menu': 0,
'version': 7
},
# These values are common for all DocField
{
'doctype': 'DocField',
'in_filter': 1,
'name': '__common__',
'parent': 'Item Customer Detail',
'parentfield': 'fields',
'parenttype': 'DocType',
'permlevel': 0,
'reqd': 1,
'search_index': 1
},
# DocType, Item Customer Detail
{
'doctype': 'DocType',
'name': 'Item Customer Detail'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'customer_name',
'fieldtype': 'Link',
'idx': 1,
'label': 'Customer Name',
'oldfieldname': 'price_list_name',
'oldfieldtype': 'Select',
'options': 'Customer',
'width': '180px'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'ref_code',
'fieldtype': 'Data',
'idx': 2,
'label': 'Ref Code',
'oldfieldname': 'ref_rate',
'oldfieldtype': 'Currency',
'width': '120px'
}
]

View File

@ -59,7 +59,7 @@ class DocType(TransactionBase):
# ------------------------
# make stock ledger entry
# ------------------------
def make_stock_ledger_entry(self, update_stock):
def make_stock_ledger_entry(self, qty):
from webnotes.model.code import get_obj
values = [{
'item_code' : self.doc.item_code,
@ -70,12 +70,12 @@ class DocType(TransactionBase):
'voucher_type' : 'Serial No',
'voucher_no' : self.doc.name,
'voucher_detail_no' : '',
'actual_qty' : 1,
'actual_qty' : qty,
'stock_uom' : webnotes.conn.get_value('Item', self.doc.item_code, 'stock_uom'),
'incoming_rate' : self.doc.purchase_rate,
'company' : self.doc.company,
'fiscal_year' : self.doc.fiscal_year,
'is_cancelled' : update_stock and 'No' or 'Yes',
'is_cancelled' : 'No', # is_cancelled is always 'No' because while deleted it can not find creation entry if it not created directly, voucher no != serial no.
'batch_no' : '',
'serial_no' : self.doc.name
}]
@ -87,7 +87,7 @@ class DocType(TransactionBase):
# ----------
def on_update(self):
if self.doc.localname and self.doc.warehouse and self.doc.status == 'In Store' and not sql("select name from `tabStock Ledger Entry` where serial_no = '%s' and ifnull(is_cancelled, 'No') = 'No'" % (self.doc.name)):
self.make_stock_ledger_entry(update_stock = 1)
self.make_stock_ledger_entry(1)
# ---------
@ -98,7 +98,7 @@ class DocType(TransactionBase):
msgprint("Cannot trash Serial No : %s as it is already Delivered" % (self.doc.name), raise_exception = 1)
else:
webnotes.conn.set(self.doc, 'status', 'Not in Use')
self.make_stock_ledger_entry(update_stock = 0)
self.make_stock_ledger_entry(-1)
def on_cancel(self):
@ -108,4 +108,4 @@ class DocType(TransactionBase):
# on restore
# -----------
def on_restore(self):
self.make_stock_ledger_entry(update_stock = 1)
self.make_stock_ledger_entry(1)

View File

@ -68,7 +68,7 @@ class DocType:
bl = sql("select name from tabBin where warehouse=%s", self.doc.name)
for b in bl:
bobj = get_obj('Bin',b[0])
bobj.update_item_valuation()
bobj.update_item_valuation(posting_date = '2000-01-01', posting_time = '12:00')
sql("COMMIT")
sql("START TRANSACTION")

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:34',
'docstatus': 0,
'modified': '2011-05-18 13:37:43',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'ashwini@webnotestech.com'
},
@ -53,115 +53,14 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 1,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 2,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 3,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 4,
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 5,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 6,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 7,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 8,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 9,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 10,
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 11,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 12,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 13,
'match_id': 0,
'to_field': 'customer_issue_no'
},
@ -171,34 +70,14 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'complaint',
'idx': 14,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 15,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 16,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'doctype',
'idx': 17,
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
@ -207,7 +86,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 18,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -215,7 +93,6 @@
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'idx': 1,
'match_id': 1,
'reference_doctype_key': 'prevdoc_doctype',
'to_field': 'maintenance_visit_details',
@ -225,7 +102,6 @@
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
'idx': 2,
'match_id': 0,
'to_table': 'Maintenance Visit'
}

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:35',
'docstatus': 0,
'modified': '2011-05-18 11:05:26',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'Administrator'
},
@ -50,106 +50,14 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 1,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 2,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 3,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 4,
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 5,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 6,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 7,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 8,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 9,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 10,
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 11,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 12,
'match_id': 0,
'to_field': 'sales_order_no'
},
@ -159,34 +67,14 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 13,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 14,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 15,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 16,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -196,7 +84,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_order_details',
'from_table': 'Sales Order Detail',
'idx': 1,
'match_id': 1,
'to_field': 'item_maintenance_detail',
'to_table': 'Item Maintenance Detail',
@ -207,7 +94,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Sales Order',
'idx': 2,
'match_id': 0,
'to_table': 'Maintenance Schedule',
'validation_logic': 'docstatus=1'

View File

@ -6,7 +6,7 @@
'creation': '2010-08-08 17:09:36',
'docstatus': 0,
'modified': '2011-05-18 13:35:55',
'modified_by': 'Administrator',
'modified_by': 'umair@iwebnotes.com',
'owner': 'ashwini@webnotestech.com'
},
@ -51,151 +51,22 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'customer',
'idx': 1,
'match_id': 0,
'to_field': 'customer'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_address',
'idx': 2,
'match_id': 0,
'to_field': 'customer_address'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_person',
'idx': 3,
'match_id': 0,
'to_field': 'contact_person'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_name',
'idx': 4,
'match_id': 0,
'to_field': 'customer_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'address_display',
'idx': 5,
'match_id': 0,
'to_field': 'address_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_display',
'idx': 6,
'match_id': 0,
'to_field': 'contact_display'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_mobile',
'idx': 7,
'match_id': 0,
'to_field': 'contact_mobile'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'contact_email',
'idx': 8,
'match_id': 0,
'to_field': 'contact_email'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'territory',
'idx': 9,
'match_id': 0,
'to_field': 'territory'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'customer_group',
'idx': 10,
'match_id': 0,
'to_field': 'customer_group'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'company',
'idx': 11,
'match_id': 0,
'to_field': 'company'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'fiscal_year',
'idx': 12,
'match_id': 0,
'to_field': 'fiscal_year'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
'idx': 13,
'match_id': 0,
'to_field': 'sales_order_no'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
'idx': 14,
'match_id': 1,
'to_field': 'item_code'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'item_name',
'idx': 15,
'match_id': 1,
'to_field': 'item_name'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'description',
'idx': 16,
'match_id': 1,
'to_field': 'description'
},
# Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
'idx': 17,
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@ -204,7 +75,6 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
'idx': 18,
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
@ -214,7 +84,6 @@
'doctype': 'Table Mapper Detail',
'from_field': 'sales_order_details',
'from_table': 'Sales Order Detail',
'idx': 1,
'match_id': 1,
'to_field': 'maintenance_visit_details',
'to_table': 'Maintenance Visit Detail'
@ -224,7 +93,6 @@
{
'doctype': 'Table Mapper Detail',
'from_table': 'Sales Order',
'idx': 2,
'match_id': 0,
'to_table': 'Maintenance Visit'
}

View File

@ -61,15 +61,15 @@ class SupportMailbox(POP3Mailbox):
d.status = 'Open'
try:
d.save(1)
# update feed
update_feed(d)
# send auto reply
self.send_auto_reply(d)
except:
d.description = 'Unable to extract message'
d.save(1)
# update feed
update_feed(d)
# send auto reply
self.send_auto_reply(d)
def send_auto_reply(self, d):
"""