addchild will never save added doc

This commit is contained in:
Anand Doshi 2012-12-24 17:02:38 +05:30
parent acc36be87f
commit f5d90abe92
27 changed files with 386 additions and 376 deletions

View File

@ -42,7 +42,7 @@ class DocType:
self.doc.total_amount = 0.0 self.doc.total_amount = 0.0
for d in dl: for d in dl:
nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', 1, self.doclist) nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', self.doclist)
nl.posting_date = cstr(d[5]) nl.posting_date = cstr(d[5])
nl.voucher_id = cstr(d[0]) nl.voucher_id = cstr(d[0])
nl.cheque_number = cstr(d[1]) nl.cheque_number = cstr(d[1])

View File

@ -31,7 +31,8 @@ class DocType:
'October','November','December'] 'October','November','December']
idx =1 idx =1
for m in month_list: for m in month_list:
mnth = addchild(self.doc,'budget_distribution_details','Budget Distribution Detail',1,self.doclist) mnth = addchild(self.doc, 'budget_distribution_details',
'Budget Distribution Detail', self.doclist)
mnth.month = m or '' mnth.month = m or ''
mnth.idx = idx mnth.idx = idx
idx += 1 idx += 1

View File

@ -223,7 +223,7 @@ class DocType:
obj.doclist = obj.doc.clear_table(obj.doclist,table_field_name) obj.doclist = obj.doc.clear_table(obj.doclist,table_field_name)
# Create advance table # Create advance table
for d in jv_detail: for d in jv_detail:
add = addchild(obj.doc, table_field_name, table_name, 1, obj.doclist) add = addchild(obj.doc, table_field_name, table_name, obj.doclist)
add.journal_voucher = d[0] add.journal_voucher = d[0]
add.jv_detail_no = d[3] add.jv_detail_no = d[3]
add.remarks = d[1] add.remarks = d[1]
@ -286,7 +286,7 @@ class DocType:
webnotes.conn.sql("update `tabJournal Voucher Detail` set %s = '%s', %s = '%s' where name = '%s'" % (dr_or_cr, flt(allocate), doctype == "Purchase Invoice" and 'against_voucher' or 'against_invoice',cstr(against_document_no), jv_detail_no)) webnotes.conn.sql("update `tabJournal Voucher Detail` set %s = '%s', %s = '%s' where name = '%s'" % (dr_or_cr, flt(allocate), doctype == "Purchase Invoice" and 'against_voucher' or 'against_invoice',cstr(against_document_no), jv_detail_no))
# new entry with balance amount # new entry with balance amount
add = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', 1, jv_obj.doclist) add = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', jv_obj.doclist)
add.account = account_head add.account = account_head
add.cost_center = cstr(jvd[0][1]) add.cost_center = cstr(jvd[0][1])
add.balance = cstr(jvd[0][2]) add.balance = cstr(jvd[0][2])
@ -353,7 +353,7 @@ class DocType:
if d['allocated_amt'] < d['unadjusted_amt']: if d['allocated_amt'] < d['unadjusted_amt']:
jvd = webnotes.conn.sql("select cost_center, balance, against_account, is_advance from `tabJournal Voucher Detail` where name = '%s'" % d['voucher_detail_no']) jvd = webnotes.conn.sql("select cost_center, balance, against_account, is_advance from `tabJournal Voucher Detail` where name = '%s'" % d['voucher_detail_no'])
# new entry with balance amount # new entry with balance amount
ch = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', 1) ch = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail')
ch.account = d['account'] ch.account = d['account']
ch.cost_center = cstr(jvd[0][0]) ch.cost_center = cstr(jvd[0][0])
ch.balance = cstr(jvd[0][1]) ch.balance = cstr(jvd[0][1])

View File

@ -174,7 +174,7 @@ class DocType:
# Set the diff in a new row # Set the diff in a new row
if flag == 0 and (flt(diff) != 0): if flag == 0 and (flt(diff) != 0):
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', 1, self.doclist) jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
if diff>0: if diff>0:
jd.credit = flt(diff) jd.credit = flt(diff)
elif diff<0: elif diff<0:
@ -256,7 +256,7 @@ class DocType:
total = 0 total = 0
for d in self.get_values(): for d in self.get_values():
total += flt(d[2]) total += flt(d[2])
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', 1, self.doclist) jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
jd.account = cstr(d[1]) jd.account = cstr(d[1])
if self.doc.write_off_based_on == 'Accounts Receivable': if self.doc.write_off_based_on == 'Accounts Receivable':
jd.credit = flt(d[2]) jd.credit = flt(d[2])
@ -265,7 +265,7 @@ class DocType:
jd.debit = flt(d[2]) jd.debit = flt(d[2])
jd.against_voucher = cstr(d[0]) jd.against_voucher = cstr(d[0])
jd.save(1) jd.save(1)
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', 1, self.doclist) jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
if self.doc.write_off_based_on == 'Accounts Receivable': if self.doc.write_off_based_on == 'Accounts Receivable':
jd.debit = total jd.debit = total
elif self.doc.write_off_based_on == 'Accounts Payable': elif self.doc.write_off_based_on == 'Accounts Payable':

View File

@ -100,7 +100,7 @@ class DocType:
#-------------------------------------------------- #--------------------------------------------------
def create_payment_table(self, gle): def create_payment_table(self, gle):
for d in gle: for d in gle:
ch = addchild(self.doc, 'ir_payment_details', 'Payment to Invoice Matching Tool Detail', 1, self.doclist) ch = addchild(self.doc, 'ir_payment_details', 'Payment to Invoice Matching Tool Detail', self.doclist)
ch.voucher_no = d.get('voucher_no') ch.voucher_no = d.get('voucher_no')
ch.posting_date = d.get('posting_date') ch.posting_date = d.get('posting_date')
ch.amt_due = self.acc_type == 'debit' and flt(d.get('amt_due')) or -1*flt(d.get('amt_due')) ch.amt_due = self.acc_type == 'debit' and flt(d.get('amt_due')) or -1*flt(d.get('amt_due'))

View File

@ -612,7 +612,8 @@ class DocType(TransactionBase):
idx = 0 idx = 0
for other in other_charge: for other in other_charge:
d = addchild(obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges', 1, obj.doclist) d = addchild(obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges',
obj.doclist)
d.category = other['category'] d.category = other['category']
d.add_deduct_tax = other['add_deduct_tax'] d.add_deduct_tax = other['add_deduct_tax']
d.charge_type = other['charge_type'] d.charge_type = other['charge_type']

View File

@ -314,7 +314,7 @@ class DocType(TransactionBase):
for i in bom_det: for i in bom_det:
if i and not sql("select name from `tabPurchase Order Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)): if i and not sql("select name from `tabPurchase Order Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)):
rm_child = addchild(self.doc, 'po_raw_material_details', 'Purchase Order Item Supplied', 1, self.doclist) rm_child = addchild(self.doc, 'po_raw_material_details', 'Purchase Order Item Supplied', self.doclist)
rm_child.reference_name = d.name rm_child.reference_name = d.name
rm_child.bom_detail_no = i and i[6] or '' rm_child.bom_detail_no = i and i[6] or ''

View File

@ -41,7 +41,7 @@ class DocType:
specification = sql("select specification, value from `tabItem Quality Inspection Parameter` \ specification = sql("select specification, value from `tabItem Quality Inspection Parameter` \
where parent = '%s' order by idx" % (self.doc.item_code)) where parent = '%s' order by idx" % (self.doc.item_code))
for d in specification: for d in specification:
child = addchild(self.doc, 'qa_specification_details', 'Quality Inspection Reading', 1, self.doclist) child = addchild(self.doc, 'qa_specification_details', 'Quality Inspection Reading', self.doclist)
child.specification = d[0] child.specification = d[0]
child.value = d[1] child.value = d[1]
child.status = 'Accepted' child.status = 'Accepted'

View File

@ -19,7 +19,7 @@ import webnotes
import webnotes.model import webnotes.model
from webnotes import _, msgprint from webnotes import _, msgprint
from webnotes.utils import cint, flt from webnotes.utils import cint, flt
from webnotes.model.utils import round_doc from webnotes.model.utils import round_floats_in_doc
import json import json
from controllers.transaction_controller import TransactionController from controllers.transaction_controller import TransactionController
@ -83,7 +83,7 @@ class TaxController(TransactionController):
self.precision.item[base_field]) self.precision.item[base_field])
for item in self.item_doclist: for item in self.item_doclist:
round_doc(item, self.precision.item) round_floats_in_doc(item, self.precision.item)
if item.fields.get(self.fmap.discount) == 100: if item.fields.get(self.fmap.discount) == 100:
if not item.fields.get(self.fmap.print_ref_rate): if not item.fields.get(self.fmap.print_ref_rate):
@ -126,7 +126,7 @@ class TaxController(TransactionController):
self.validate_included_tax(tax) self.validate_included_tax(tax)
# round relevant values # round relevant values
round_doc(tax, self.precision.tax) round_floats_in_doc(tax, self.precision.tax)
def calculate_net_total(self): def calculate_net_total(self):
self.doc.net_total = 0 self.doc.net_total = 0

View File

@ -99,7 +99,7 @@ class DocType:
yr_start_date, yr_end_date = self.get_fy_start_end_dates() yr_start_date, yr_end_date = self.get_fy_start_end_dates()
date_list = self.get_weekly_off_date_list(yr_start_date, yr_end_date) date_list = self.get_weekly_off_date_list(yr_start_date, yr_end_date)
for d in date_list: for d in date_list:
ch = addchild(self.doc, 'holiday_list_details', 'Holiday', 1, self.doclist) ch = addchild(self.doc, 'holiday_list_details', 'Holiday', self.doclist)
ch.description = self.doc.weekly_off ch.description = self.doc.weekly_off
ch.holiday_date = d ch.holiday_date = d

View File

@ -70,7 +70,7 @@ class DocType:
def make_table(self, doct_name, tab_fname, tab_name): def make_table(self, doct_name, tab_fname, tab_name):
list1 = sql("select name from `tab%s` where docstatus != 2" % doct_name) list1 = sql("select name from `tab%s` where docstatus != 2" % doct_name)
for li in list1: for li in list1:
child = addchild(self.doc, tab_fname, tab_name, 1, self.doclist) child = addchild(self.doc, tab_fname, tab_name, self.doclist)
if(tab_fname == 'earning_details'): if(tab_fname == 'earning_details'):
child.e_type = cstr(li[0]) child.e_type = cstr(li[0])
child.modified_value = 0 child.modified_value = 0

View File

@ -357,7 +357,8 @@ class DocType:
"Add items to Flat BOM table" "Add items to Flat BOM table"
self.doclist = self.doc.clear_table(self.doclist, 'flat_bom_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'flat_bom_details', 1)
for d in self.cur_exploded_items: for d in self.cur_exploded_items:
ch = addchild(self.doc, 'flat_bom_details', 'BOM Explosion Item', 1, self.doclist) ch = addchild(self.doc, 'flat_bom_details', 'BOM Explosion Item',
self.doclist)
for i in d.keys(): for i in d.keys():
ch.fields[i] = d[i] ch.fields[i] = d[i]
ch.docstatus = self.doc.docstatus ch.docstatus = self.doc.docstatus

View File

@ -101,7 +101,7 @@ class DocType:
for r in open_so: for r in open_so:
if cstr(r['name']) not in so_list: if cstr(r['name']) not in so_list:
pp_so = addchild(self.doc, 'pp_so_details', pp_so = addchild(self.doc, 'pp_so_details',
'Production Plan Sales Order', 1, self.doclist) 'Production Plan Sales Order', self.doclist)
pp_so.sales_order = r['name'] pp_so.sales_order = r['name']
pp_so.sales_order_date = cstr(r['transaction_date']) pp_so.sales_order_date = cstr(r['transaction_date'])
pp_so.customer = cstr(r['customer']) pp_so.customer = cstr(r['customer'])
@ -150,7 +150,7 @@ class DocType:
for p in items: for p in items:
item_details = sql("""select description, stock_uom, default_bom item_details = sql("""select description, stock_uom, default_bom
from tabItem where name=%s""", p['item_code']) from tabItem where name=%s""", p['item_code'])
pi = addchild(self.doc, 'pp_details', 'Production Plan Item', 1, self.doclist) pi = addchild(self.doc, 'pp_details', 'Production Plan Item', self.doclist)
pi.sales_order = p['parent'] pi.sales_order = p['parent']
pi.item_code = p['item_code'] pi.item_code = p['item_code']
pi.description = item_details and item_details[0][0] or '' pi.description = item_details and item_details[0][0] or ''

View File

@ -7,7 +7,7 @@ def execute():
webnotes.conn.sql("delete from `tabDocPerm` where role = 'All' and permlevel = 0 and parent in ('Appraisal', 'Ticket', 'Project')") webnotes.conn.sql("delete from `tabDocPerm` where role = 'All' and permlevel = 0 and parent in ('Appraisal', 'Ticket', 'Project')")
appr = get_obj('DocType', 'Appraisal', with_children=1) appr = get_obj('DocType', 'Appraisal', with_children=1)
ch = addchild(appr.doc, 'permissions', 'DocPerm', 0) ch = addchild(appr.doc, 'permissions', 'DocPerm')
ch.permlevel = 0 ch.permlevel = 0
ch.role = 'Employee' ch.role = 'Employee'
ch.read = 1 ch.read = 1

View File

@ -11,7 +11,7 @@ def execute():
addr = get_obj('DocType', 'Address', with_children=1) addr = get_obj('DocType', 'Address', with_children=1)
for d in role1+role2: for d in role1+role2:
ch = addchild(addr.doc, 'permissions', 'DocPerm', 0) ch = addchild(addr.doc, 'permissions', 'DocPerm')
ch.role = d ch.role = d
ch.read = 1 ch.read = 1
ch.write = 1 ch.write = 1

View File

@ -123,7 +123,7 @@ class DocType(TransactionBase):
user_lst.append(chk[0][0]) user_lst.append(chk[0][0])
for d in user_lst: for d in user_lst:
ch = addchild(ev, 'event_individuals', 'Event User', 0) ch = addchild(ev, 'event_individuals', 'Event User')
ch.person = d ch.person = d
ch.save(1) ch.save(1)

View File

@ -19,7 +19,7 @@ import webnotes
from webnotes.utils import cstr, load_json from webnotes.utils import cstr, load_json
from webnotes.model import db_exists from webnotes.model import db_exists
from webnotes.model.doc import Document, addchild from webnotes.model.doc import Document
from webnotes.model.wrapper import getlist, copy_doclist from webnotes.model.wrapper import getlist, copy_doclist
from webnotes.model.code import get_obj from webnotes.model.code import get_obj
from webnotes import msgprint from webnotes import msgprint

View File

@ -75,7 +75,7 @@ class DocType(TransactionBase):
obj.doclist = obj.doc.clear_table(obj.doclist,'sales_team') obj.doclist = obj.doc.clear_table(obj.doclist,'sales_team')
idx = 0 idx = 0
for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer): for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer):
ch = addchild(obj.doc, 'sales_team', 'Sales Team', 1, obj.doclist) ch = addchild(obj.doc, 'sales_team', 'Sales Team', obj.doclist)
ch.sales_person = d and cstr(d[0]) or '' ch.sales_person = d and cstr(d[0]) or ''
ch.allocated_percentage = d and flt(d[1]) or 0 ch.allocated_percentage = d and flt(d[1]) or 0
ch.allocated_amount = d and flt(d[2]) or 0 ch.allocated_amount = d and flt(d[2]) or 0
@ -265,8 +265,8 @@ class DocType(TransactionBase):
for field in default_fields: for field in default_fields:
if field in other: del other[field] if field in other: del other[field]
d = addchild(obj.doc, 'other_charges', 'Sales Taxes and Charges', 1, d = addchild(obj.doc, 'other_charges', 'Sales Taxes and Charges',
obj.doclist) obj.doclist)
d.fields.update(other) d.fields.update(other)
d.rate = flt(d.rate) d.rate = flt(d.rate)
d.tax_amount = flt(d.tax_rate) d.tax_amount = flt(d.tax_rate)
@ -481,7 +481,8 @@ class DocType(TransactionBase):
break break
if not exists: if not exists:
pi = addchild(obj.doc, 'packing_details', 'Delivery Note Packing Item', 1, obj.doclist) pi = addchild(obj.doc, 'packing_details', 'Delivery Note Packing Item',
obj.doclist)
pi.parent_item = line.item_code pi.parent_item = line.item_code
pi.item_code = packing_item_code pi.item_code = packing_item_code

View File

@ -239,13 +239,13 @@ class DocType:
def add_roles(self, pr): def add_roles(self, pr):
roles_list = ['Accounts Manager', 'Accounts User', 'Blogger', 'HR Manager', 'HR User', 'Maintenance User', 'Maintenance Manager', 'Material Manager', 'Material User', 'Material Master Manager', 'Manufacturing Manager', 'Manufacturing User', 'Projects User', 'Purchase Manager', 'Purchase User', 'Purchase Master Manager', 'Quality Manager', 'Sales Manager', 'Sales User', 'Sales Master Manager', 'Support Manager', 'Support Team', 'System Manager', 'Website Manager'] roles_list = ['Accounts Manager', 'Accounts User', 'Blogger', 'HR Manager', 'HR User', 'Maintenance User', 'Maintenance Manager', 'Material Manager', 'Material User', 'Material Master Manager', 'Manufacturing Manager', 'Manufacturing User', 'Projects User', 'Purchase Manager', 'Purchase User', 'Purchase Master Manager', 'Quality Manager', 'Sales Manager', 'Sales User', 'Sales Master Manager', 'Support Manager', 'Support Team', 'System Manager', 'Website Manager']
for r in roles_list: for r in roles_list:
d = addchild(pr, 'userroles', 'UserRole', 1) d = addchild(pr, 'userroles', 'UserRole')
d.role = r d.role = r
d.save(1) d.save(1)
# Add roles to Administrator profile # Add roles to Administrator profile
pr = Document('Profile','Administrator') pr = Document('Profile','Administrator')
for r in roles_list: for r in roles_list:
d = addchild(pr,'userroles', 'UserRole', 1) d = addchild(pr,'userroles', 'UserRole')
d.role = r d.role = r
d.save(1) d.save(1)

View File

@ -350,7 +350,7 @@ class DocType:
reaches re-order level when %s %s was created""" % (doc_type,doc_name) reaches re-order level when %s %s was created""" % (doc_type,doc_name)
indent.save(1) indent.save(1)
indent_obj = get_obj('Purchase Request',indent.name,with_children=1) indent_obj = get_obj('Purchase Request',indent.name,with_children=1)
indent_details_child = addchild(indent_obj.doc,'indent_details','Purchase Request Item',0) indent_details_child = addchild(indent_obj.doc,'indent_details','Purchase Request Item')
indent_details_child.item_code = self.doc.item_code indent_details_child.item_code = self.doc.item_code
indent_details_child.uom = self.doc.stock_uom indent_details_child.uom = self.doc.stock_uom
indent_details_child.warehouse = self.doc.warehouse indent_details_child.warehouse = self.doc.warehouse

View File

@ -70,7 +70,8 @@ class DocType:
raise Exception raise Exception
if not cstr(self.doc.stock_uom) in check_list : if not cstr(self.doc.stock_uom) in check_list :
child = addchild( self.doc, 'uom_conversion_details', 'UOM Conversion Detail', 1, self.doclist) child = addchild( self.doc, 'uom_conversion_details',
'UOM Conversion Detail', self.doclist)
child.uom = self.doc.stock_uom child.uom = self.doc.stock_uom
child.conversion_factor = 1 child.conversion_factor = 1
child.save() child.save()

View File

@ -51,7 +51,8 @@ class DocType:
msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.", raise_exception=1) msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.", raise_exception=1)
for i in pr: for i in pr:
ch = addchild(self.doc, 'lc_pr_details', 'Landed Cost Purchase Receipt', 1, self.doclist) ch = addchild(self.doc, 'lc_pr_details', 'Landed Cost Purchase Receipt',
self.doclist)
ch.purchase_receipt = i and i['name'] or '' ch.purchase_receipt = i and i['name'] or ''
ch.save() ch.save()
@ -62,7 +63,8 @@ class DocType:
idx = 0 idx = 0
landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1) landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1)
for cost in landed_cost: for cost in landed_cost:
lct = addchild(self.doc, 'landed_cost_details', 'Landed Cost Item', 1, self.doclist) lct = addchild(self.doc, 'landed_cost_details', 'Landed Cost Item',
self.doclist)
lct.account_head = cost['account_head'] lct.account_head = cost['account_head']
lct.description = cost['description'] lct.description = cost['description']
@ -100,7 +102,7 @@ class DocType:
pr_oc_row = sql("select name from `tabPurchase Taxes and Charges` where parent = %s and category = 'Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head)) pr_oc_row = sql("select name from `tabPurchase Taxes and Charges` where parent = %s and category = 'Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head))
if not pr_oc_row: # add if not exists if not pr_oc_row: # add if not exists
ch = addchild(pr_obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges', 1) ch = addchild(pr_obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges')
ch.category = 'Valuation' ch.category = 'Valuation'
ch.add_deduct_tax = 'Add' ch.add_deduct_tax = 'Add'
ch.charge_type = 'Actual' ch.charge_type = 'Actual'

View File

@ -390,7 +390,7 @@ class DocType(TransactionBase):
if i and not sql("select name from `tabPurchase Receipt Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)): if i and not sql("select name from `tabPurchase Receipt Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)):
rm_child = addchild(self.doc, 'pr_raw_material_details', 'Purchase Receipt Item Supplied', 1, self.doclist) rm_child = addchild(self.doc, 'pr_raw_material_details', 'Purchase Receipt Item Supplied', self.doclist)
rm_child.reference_name = d.name rm_child.reference_name = d.name
rm_child.bom_detail_no = i and i[6] or '' rm_child.bom_detail_no = i and i[6] or ''

View File

@ -8,11 +8,11 @@
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
import webnotes import webnotes
@ -26,45 +26,46 @@ sql = webnotes.conn.sql
class DocType : class DocType :
def __init__(self, doc, doclist=[]): def __init__(self, doc, doclist=[]):
self.doc = doc self.doc = doc
self.doclist = doclist self.doclist = doclist
# Pull Item Details # Pull Item Details
# --------------------------- # ---------------------------
def pull_item_details(self): def pull_item_details(self):
if self.doc.return_type == 'Sales Return': if self.doc.return_type == 'Sales Return':
if self.doc.delivery_note_no: if self.doc.delivery_note_no:
det = sql("select t1.name, t1.item_code, t1.description, t1.qty, t1.uom, t2.export_rate * t3.conversion_rate, t3.customer, t3.customer_name, t3.customer_address, t2.serial_no, t2.batch_no from `tabDelivery Note Packing Item` t1, `tabDelivery Note Item` t2, `tabDelivery Note` t3 where t1.parent = t3.name and t2.parent = t3.name and t1.parent_detail_docname = t2.name and t3.name = '%s' and t3.docstatus = 1" % self.doc.delivery_note_no) det = sql("select t1.name, t1.item_code, t1.description, t1.qty, t1.uom, t2.export_rate * t3.conversion_rate, t3.customer, t3.customer_name, t3.customer_address, t2.serial_no, t2.batch_no from `tabDelivery Note Packing Item` t1, `tabDelivery Note Item` t2, `tabDelivery Note` t3 where t1.parent = t3.name and t2.parent = t3.name and t1.parent_detail_docname = t2.name and t3.name = '%s' and t3.docstatus = 1" % self.doc.delivery_note_no)
elif self.doc.sales_invoice_no: elif self.doc.sales_invoice_no:
det = sql("select t1.name, t1.item_code, t1.description, t1.qty, t1.stock_uom, t1.export_rate * t2.conversion_rate, t2.customer, t2.customer_name, t2.customer_address, t1.serial_no from `tabSales Invoice Item` t1, `tabSales Invoice` t2 where t1.parent = t2.name and t2.name = '%s' and t2.docstatus = 1" % self.doc.sales_invoice_no) det = sql("select t1.name, t1.item_code, t1.description, t1.qty, t1.stock_uom, t1.export_rate * t2.conversion_rate, t2.customer, t2.customer_name, t2.customer_address, t1.serial_no from `tabSales Invoice Item` t1, `tabSales Invoice` t2 where t1.parent = t2.name and t2.name = '%s' and t2.docstatus = 1" % self.doc.sales_invoice_no)
elif self.doc.return_type == 'Purchase Return' and self.doc.purchase_receipt_no: elif self.doc.return_type == 'Purchase Return' and self.doc.purchase_receipt_no:
det = sql("select t1.name, t1.item_code, t1.description, t1.received_qty, t1.uom, t1.purchase_rate, t2.supplier, t2.supplier_name, t2.supplier_address, t1.serial_no, t1.batch_no from `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 where t1.parent = t2.name and t2.name = '%s' and t2.docstatus = 1" % self.doc.purchase_receipt_no) det = sql("select t1.name, t1.item_code, t1.description, t1.received_qty, t1.uom, t1.purchase_rate, t2.supplier, t2.supplier_name, t2.supplier_address, t1.serial_no, t1.batch_no from `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 where t1.parent = t2.name and t2.name = '%s' and t2.docstatus = 1" % self.doc.purchase_receipt_no)
self.doc.cust_supp = det and det[0][6] or '' self.doc.cust_supp = det and det[0][6] or ''
self.doc.cust_supp_name = det and det[0][7] or '' self.doc.cust_supp_name = det and det[0][7] or ''
self.doc.cust_supp_address = det and det[0][8] or '' self.doc.cust_supp_address = det and det[0][8] or ''
self.create_item_table(det) self.create_item_table(det)
self.doc.save() self.doc.save()
# Create Item Table # Create Item Table
# ----------------------------- # -----------------------------
def create_item_table(self, det): def create_item_table(self, det):
self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1)
for i in det: for i in det:
ch = addchild(self.doc, 'return_details', 'Sales and Purchase Return Item', 1, self.doclist) ch = addchild(self.doc, 'return_details', 'Sales and Purchase Return Item',
ch.detail_name = i and i[0] or '' self.doclist)
ch.item_code = i and i[1] or '' ch.detail_name = i and i[0] or ''
ch.description = i and i[2] or '' ch.item_code = i and i[1] or ''
ch.qty = i and flt(i[3]) or 0 ch.description = i and i[2] or ''
ch.uom = i and i[4] or '' ch.qty = i and flt(i[3]) or 0
ch.rate = i and flt(i[5]) or 0 ch.uom = i and i[4] or ''
ch.serial_no = i and i[9] or '' ch.rate = i and flt(i[5]) or 0
ch.batch_no = (len(i) == 11) and i[10] or '' ch.serial_no = i and i[9] or ''
ch.save() ch.batch_no = (len(i) == 11) and i[10] or ''
ch.save()
# Clear return table # Clear return table
# -------------------------------- # --------------------------------
def clear_return_table(self): def clear_return_table(self):
self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1)
self.doc.save() self.doc.save()

View File

@ -467,7 +467,8 @@ class DocType(TransactionBase):
def add_to_stock_entry_detail(self, source_wh, target_wh, item_dict, bom_no=None): def add_to_stock_entry_detail(self, source_wh, target_wh, item_dict, bom_no=None):
for d in item_dict: for d in item_dict:
se_child = addchild(self.doc, 'mtn_details', 'Stock Entry Detail', 0, self.doclist) se_child = addchild(self.doc, 'mtn_details', 'Stock Entry Detail',
self.doclist)
se_child.s_warehouse = source_wh se_child.s_warehouse = source_wh
se_child.t_warehouse = target_wh se_child.t_warehouse = target_wh
se_child.item_code = cstr(d) se_child.item_code = cstr(d)

View File

@ -8,11 +8,11 @@
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import unicode_literals from __future__ import unicode_literals
import webnotes import webnotes
@ -30,313 +30,314 @@ sql = webnotes.conn.sql
from utilities.transaction_base import TransactionBase from utilities.transaction_base import TransactionBase
class DocType(TransactionBase): class DocType(TransactionBase):
def __init__(self, doc, doclist=[]): def __init__(self, doc, doclist=[]):
self.doc = doc self.doc = doc
self.doclist = doclist self.doclist = doclist
# pull sales order details # pull sales order details
#-------------------------- #--------------------------
def pull_sales_order_detail(self): def pull_sales_order_detail(self):
self.doclist = self.doc.clear_table(self.doclist, 'item_maintenance_detail') self.doclist = self.doc.clear_table(self.doclist, 'item_maintenance_detail')
self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail') self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule').dt_map('Sales Order', 'Maintenance Schedule', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Maintenance Schedule'],['Sales Order Item', 'Maintenance Schedule Item']]") self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule').dt_map('Sales Order', 'Maintenance Schedule', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Maintenance Schedule'],['Sales Order Item', 'Maintenance Schedule Item']]")
#pull item details #pull item details
#------------------- #-------------------
def get_item_details(self, item_code): def get_item_details(self, item_code):
item = sql("select item_name, description from `tabItem` where name = '%s'" %(item_code), as_dict=1) item = sql("select item_name, description from `tabItem` where name = '%s'" %(item_code), as_dict=1)
ret = { ret = {
'item_name': item and item[0]['item_name'] or '', 'item_name': item and item[0]['item_name'] or '',
'description' : item and item[0]['description'] or '' 'description' : item and item[0]['description'] or ''
} }
return ret return ret
# generate maintenance schedule # generate maintenance schedule
#------------------------------------- #-------------------------------------
def generate_schedule(self): def generate_schedule(self):
import datetime import datetime
self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail') self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
count = 0 count = 0
sql("delete from `tabMaintenance Schedule Detail` where parent='%s'" %(self.doc.name)) sql("delete from `tabMaintenance Schedule Detail` where parent='%s'" %(self.doc.name))
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
self.validate_maintenance_detail() self.validate_maintenance_detail()
s_list =[] s_list =[]
s_list = self.create_schedule_list(d.start_date, d.end_date, d.no_of_visits) s_list = self.create_schedule_list(d.start_date, d.end_date, d.no_of_visits)
for i in range(d.no_of_visits): for i in range(d.no_of_visits):
child = addchild(self.doc,'maintenance_schedule_detail','Maintenance Schedule Detail',1,self.doclist) child = addchild(self.doc, 'maintenance_schedule_detail',
child.item_code = d.item_code 'Maintenance Schedule Detail', self.doclist)
child.item_name = d.item_name child.item_code = d.item_code
child.scheduled_date = s_list[i].strftime('%Y-%m-%d') child.item_name = d.item_name
if d.serial_no: child.scheduled_date = s_list[i].strftime('%Y-%m-%d')
child.serial_no = d.serial_no if d.serial_no:
child.idx = count child.serial_no = d.serial_no
count = count+1 child.idx = count
child.incharge_name = d.incharge_name count = count+1
child.save(1) child.incharge_name = d.incharge_name
child.save(1)
self.on_update()
self.on_update()
def on_submit(self): def on_submit(self):
if not getlist(self.doclist, 'maintenance_schedule_detail'): if not getlist(self.doclist, 'maintenance_schedule_detail'):
msgprint("Please click on 'Generate Schedule' to get schedule") msgprint("Please click on 'Generate Schedule' to get schedule")
raise Exception raise Exception
self.check_serial_no_added() self.check_serial_no_added()
self.validate_serial_no_warranty() self.validate_serial_no_warranty()
self.validate_schedule() self.validate_schedule()
email_map ={} email_map ={}
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.serial_no: if d.serial_no:
self.update_amc_date(d.serial_no, d.end_date) self.update_amc_date(d.serial_no, d.end_date)
if d.incharge_name not in email_map: if d.incharge_name not in email_map:
e = sql("select email_id, name from `tabSales Person` where name='%s' " %(d.incharge_name),as_dict=1)[0] e = sql("select email_id, name from `tabSales Person` where name='%s' " %(d.incharge_name),as_dict=1)[0]
email_map[d.incharge_name] = (e['email_id']) email_map[d.incharge_name] = (e['email_id'])
scheduled_date =sql("select scheduled_date from `tabMaintenance Schedule Detail` \ scheduled_date =sql("select scheduled_date from `tabMaintenance Schedule Detail` \
where incharge_name='%s' and item_code='%s' and parent='%s' " %(d.incharge_name, \ where incharge_name='%s' and item_code='%s' and parent='%s' " %(d.incharge_name, \
d.item_code, self.doc.name), as_dict=1) d.item_code, self.doc.name), as_dict=1)
for key in scheduled_date: for key in scheduled_date:
if email_map[d.incharge_name]: if email_map[d.incharge_name]:
self.add_calender_event(key["scheduled_date"],email_map[d.incharge_name],d.item_code) self.add_calender_event(key["scheduled_date"],email_map[d.incharge_name],d.item_code)
webnotes.conn.set(self.doc, 'status', 'Submitted') webnotes.conn.set(self.doc, 'status', 'Submitted')
def add_calender_event(self,scheduled_date,incharge_email,item_code): def add_calender_event(self,scheduled_date,incharge_email,item_code):
""" Add calendar event for Maintenece Schedule in calendar of Allocated person""" """ Add calendar event for Maintenece Schedule in calendar of Allocated person"""
event = Document('Event') event = Document('Event')
event.owner = incharge_email event.owner = incharge_email
event.description = "Reference:%s, Item Code:%s and Customer: %s" %(self.doc.name, item_code, self.doc.customer) event.description = "Reference:%s, Item Code:%s and Customer: %s" %(self.doc.name, item_code, self.doc.customer)
event.event_date = scheduled_date event.event_date = scheduled_date
event.event_hour = '10:00' event.event_hour = '10:00'
event.event_type = 'Private' event.event_type = 'Private'
event.ref_type = 'Maintenance Schedule' event.ref_type = 'Maintenance Schedule'
event.ref_name = self.doc.name event.ref_name = self.doc.name
event.save(1) event.save(1)
#get schedule dates #get schedule dates
#---------------------- #----------------------
def create_schedule_list(self, start_date, end_date, no_of_visit): def create_schedule_list(self, start_date, end_date, no_of_visit):
schedule_list = [] schedule_list = []
start_date1 = start_date start_date1 = start_date
date_diff = (getdate(end_date) - getdate(start_date)).days date_diff = (getdate(end_date) - getdate(start_date)).days
add_by = date_diff/no_of_visit add_by = date_diff/no_of_visit
#schedule_list.append(start_date1) #schedule_list.append(start_date1)
while(getdate(start_date1) < getdate(end_date)): while(getdate(start_date1) < getdate(end_date)):
start_date1 = add_days(start_date1, add_by) start_date1 = add_days(start_date1, add_by)
if len(schedule_list) < no_of_visit: if len(schedule_list) < no_of_visit:
schedule_list.append(getdate(start_date1)) schedule_list.append(getdate(start_date1))
return schedule_list return schedule_list
#validate date range and periodicity selected #validate date range and periodicity selected
#------------------------------------------------- #-------------------------------------------------
def validate_period(self, arg): def validate_period(self, arg):
arg1 = eval(arg) arg1 = eval(arg)
if getdate(arg1['start_date']) >= getdate(arg1['end_date']): if getdate(arg1['start_date']) >= getdate(arg1['end_date']):
msgprint("Start date should be less than end date ") msgprint("Start date should be less than end date ")
raise Exception raise Exception
period = (getdate(arg1['end_date'])-getdate(arg1['start_date'])).days+1 period = (getdate(arg1['end_date'])-getdate(arg1['start_date'])).days+1
if (arg1['periodicity']=='Yearly' or arg1['periodicity']=='Half Yearly' or arg1['periodicity']=='Quarterly') and period<365: if (arg1['periodicity']=='Yearly' or arg1['periodicity']=='Half Yearly' or arg1['periodicity']=='Quarterly') and period<365:
msgprint(cstr(arg1['periodicity'])+ " periodicity can be set for period of atleast 1 year or more only") msgprint(cstr(arg1['periodicity'])+ " periodicity can be set for period of atleast 1 year or more only")
raise Exception raise Exception
elif arg1['periodicity']=='Monthly' and period<30: elif arg1['periodicity']=='Monthly' and period<30:
msgprint("Monthly periodicity can be set for period of atleast 1 month or more") msgprint("Monthly periodicity can be set for period of atleast 1 month or more")
raise Exception raise Exception
elif arg1['periodicity']=='Weekly' and period<7: elif arg1['periodicity']=='Weekly' and period<7:
msgprint("Weekly periodicity can be set for period of atleast 1 week or more") msgprint("Weekly periodicity can be set for period of atleast 1 week or more")
raise Exception raise Exception
#get count on the basis of periodicity selected #get count on the basis of periodicity selected
#---------------------------------------------------- #----------------------------------------------------
def get_no_of_visits(self, arg): def get_no_of_visits(self, arg):
arg1 = eval(arg) arg1 = eval(arg)
start_date = arg1['start_date'] start_date = arg1['start_date']
self.validate_period(arg) self.validate_period(arg)
period = (getdate(arg1['end_date'])-getdate(arg1['start_date'])).days+1 period = (getdate(arg1['end_date'])-getdate(arg1['start_date'])).days+1
count =0 count =0
if arg1['periodicity'] == 'Weekly': if arg1['periodicity'] == 'Weekly':
count = period/7 count = period/7
elif arg1['periodicity'] == 'Monthly': elif arg1['periodicity'] == 'Monthly':
count = period/30 count = period/30
elif arg1['periodicity'] == 'Quarterly': elif arg1['periodicity'] == 'Quarterly':
count = period/91 count = period/91
elif arg1['periodicity'] == 'Half Yearly': elif arg1['periodicity'] == 'Half Yearly':
count = period/182 count = period/182
elif arg1['periodicity'] == 'Yearly': elif arg1['periodicity'] == 'Yearly':
count = period/365 count = period/365
ret = {'no_of_visits':count} ret = {'no_of_visits':count}
return ret return ret
def validate_maintenance_detail(self): def validate_maintenance_detail(self):
if not getlist(self.doclist, 'item_maintenance_detail'): if not getlist(self.doclist, 'item_maintenance_detail'):
msgprint("Please enter Maintaince Details first") msgprint("Please enter Maintaince Details first")
raise Exception raise Exception
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if not d.item_code: if not d.item_code:
msgprint("Please select item code") msgprint("Please select item code")
raise Exception raise Exception
elif not d.start_date or not d.end_date: elif not d.start_date or not d.end_date:
msgprint("Please select Start Date and End Date for item "+d.item_code) msgprint("Please select Start Date and End Date for item "+d.item_code)
raise Exception raise Exception
elif not d.no_of_visits: elif not d.no_of_visits:
msgprint("Please mention no of visits required") msgprint("Please mention no of visits required")
raise Exception raise Exception
elif not d.incharge_name: elif not d.incharge_name:
msgprint("Please select Incharge Person's name") msgprint("Please select Incharge Person's name")
raise Exception raise Exception
if getdate(d.start_date) >= getdate(d.end_date): if getdate(d.start_date) >= getdate(d.end_date):
msgprint("Start date should be less than end date for item "+d.item_code) msgprint("Start date should be less than end date for item "+d.item_code)
raise Exception raise Exception
#check if maintenance schedule already created against same sales order #check if maintenance schedule already created against same sales order
#----------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------
def validate_sales_order(self): def validate_sales_order(self):
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.prevdoc_docname: if d.prevdoc_docname:
chk = sql("select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1", d.prevdoc_docname) chk = sql("select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1", d.prevdoc_docname)
if chk: if chk:
msgprint("Maintenance Schedule against "+d.prevdoc_docname+" already exist") msgprint("Maintenance Schedule against "+d.prevdoc_docname+" already exist")
raise Exception raise Exception
# Validate values with reference document # Validate values with reference document
#---------------------------------------- #----------------------------------------
def validate_reference_value(self): def validate_reference_value(self):
get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule', with_children = 1).validate_reference_value(self, self.doc.name) get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule', with_children = 1).validate_reference_value(self, self.doc.name)
def validate_serial_no(self): def validate_serial_no(self):
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
cur_s_no=[] cur_s_no=[]
if d.serial_no: if d.serial_no:
cur_serial_no = d.serial_no.replace(' ', '') cur_serial_no = d.serial_no.replace(' ', '')
cur_s_no = cur_serial_no.split(',') cur_s_no = cur_serial_no.split(',')
for x in cur_s_no: for x in cur_s_no:
chk = sql("select name, status from `tabSerial No` where docstatus!=2 and name=%s", (x)) chk = sql("select name, status from `tabSerial No` where docstatus!=2 and name=%s", (x))
chk1 = chk and chk[0][0] or '' chk1 = chk and chk[0][0] or ''
status = chk and chk[0][1] or '' status = chk and chk[0][1] or ''
if not chk1: if not chk1:
msgprint("Serial no "+x+" does not exist in system.") msgprint("Serial no "+x+" does not exist in system.")
raise Exception raise Exception
else: else:
if status=='In Store' or status=='Note in Use' or status=='Scrapped': if status=='In Store' or status=='Note in Use' or status=='Scrapped':
msgprint("Serial no "+x+" is '"+status+"'") msgprint("Serial no "+x+" is '"+status+"'")
raise Exception raise Exception
def validate(self): def validate(self):
self.validate_maintenance_detail() self.validate_maintenance_detail()
self.validate_sales_order() self.validate_sales_order()
if self.doc.sales_order_no: if self.doc.sales_order_no:
self.validate_reference_value() self.validate_reference_value()
self.validate_serial_no() self.validate_serial_no()
self.validate_start_date() self.validate_start_date()
# validate that maintenance start date can not be before serial no delivery date # validate that maintenance start date can not be before serial no delivery date
#------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------
def validate_start_date(self): def validate_start_date(self):
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.serial_no: if d.serial_no:
cur_serial_no = d.serial_no.replace(' ', '') cur_serial_no = d.serial_no.replace(' ', '')
cur_s_no = cur_serial_no.split(',') cur_s_no = cur_serial_no.split(',')
for x in cur_s_no: for x in cur_s_no:
dt = sql("select delivery_date from `tabSerial No` where name = %s", x) dt = sql("select delivery_date from `tabSerial No` where name = %s", x)
dt = dt and dt[0][0] or '' dt = dt and dt[0][0] or ''
if dt: if dt:
if dt > getdate(d.start_date): if dt > getdate(d.start_date):
msgprint("Maintenance start date can not be before delivery date "+dt.strftime('%Y-%m-%d')+" for serial no "+x) msgprint("Maintenance start date can not be before delivery date "+dt.strftime('%Y-%m-%d')+" for serial no "+x)
raise Exception raise Exception
#update amc expiry date in serial no #update amc expiry date in serial no
#------------------------------------------ #------------------------------------------
def update_amc_date(self,serial_no,amc_end_date): def update_amc_date(self,serial_no,amc_end_date):
#get current list of serial no #get current list of serial no
cur_serial_no = serial_no.replace(' ', '') cur_serial_no = serial_no.replace(' ', '')
cur_s_no = cur_serial_no.split(',') cur_s_no = cur_serial_no.split(',')
for x in cur_s_no: for x in cur_s_no:
sql("update `tabSerial No` set amc_expiry_date = '%s', maintenance_status = 'Under AMC' where name = '%s'"% (amc_end_date,x)) sql("update `tabSerial No` set amc_expiry_date = '%s', maintenance_status = 'Under AMC' where name = '%s'"% (amc_end_date,x))
def on_update(self): def on_update(self):
webnotes.conn.set(self.doc, 'status', 'Draft') webnotes.conn.set(self.doc, 'status', 'Draft')
#validate that new maintenance start date does not clash with existing mntc end date #validate that new maintenance start date does not clash with existing mntc end date
#------------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------------
def validate_serial_no_warranty(self): def validate_serial_no_warranty(self):
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.serial_no: if d.serial_no:
dt = sql("select warranty_expiry_date, amc_expiry_date from `tabSerial No` where name = %s", d.serial_no, as_dict=1) dt = sql("select warranty_expiry_date, amc_expiry_date from `tabSerial No` where name = %s", d.serial_no, as_dict=1)
if dt[0]['warranty_expiry_date']: if dt[0]['warranty_expiry_date']:
if dt[0]['warranty_expiry_date'] >= getdate(d.start_date): if dt[0]['warranty_expiry_date'] >= getdate(d.start_date):
msgprint("Serial no "+d.serial_no+" for item "+d.item_code+" is already under warranty till "+(dt[0]['warranty_expiry_date']).strftime('%Y-%m-%d')+". You can schedule AMC start date after "+(dt[0]['warranty_expiry_date']).strftime('%Y-%m-%d')) msgprint("Serial no "+d.serial_no+" for item "+d.item_code+" is already under warranty till "+(dt[0]['warranty_expiry_date']).strftime('%Y-%m-%d')+". You can schedule AMC start date after "+(dt[0]['warranty_expiry_date']).strftime('%Y-%m-%d'))
raise Exception raise Exception
if dt[0]['amc_expiry_date']: if dt[0]['amc_expiry_date']:
if dt[0]['amc_expiry_date'] >= getdate(d.start_date): if dt[0]['amc_expiry_date'] >= getdate(d.start_date):
msgprint("Serial no "+d.serial_no+" for item "+d.item_code+" is already under AMC till "+(dt[0]['amc_expiry_date']).strftime('%Y-%m-%d')+". You can schedule new AMC start date after "+(dt[0]['amc_expiry_date']).strftime('%Y-%m-%d')) msgprint("Serial no "+d.serial_no+" for item "+d.item_code+" is already under AMC till "+(dt[0]['amc_expiry_date']).strftime('%Y-%m-%d')+". You can schedule new AMC start date after "+(dt[0]['amc_expiry_date']).strftime('%Y-%m-%d'))
raise Exception raise Exception
#validate if schedule generated for all items #validate if schedule generated for all items
#------------------------------------------------- #-------------------------------------------------
def validate_schedule(self): def validate_schedule(self):
item_lst1 =[] item_lst1 =[]
item_lst2 =[] item_lst2 =[]
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.item_code not in item_lst1: if d.item_code not in item_lst1:
item_lst1.append(d.item_code) item_lst1.append(d.item_code)
for m in getlist(self.doclist, 'maintenance_schedule_detail'): for m in getlist(self.doclist, 'maintenance_schedule_detail'):
if m.item_code not in item_lst2: if m.item_code not in item_lst2:
item_lst2.append(m.item_code) item_lst2.append(m.item_code)
if len(item_lst1) != len(item_lst2): if len(item_lst1) != len(item_lst2):
msgprint("Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule'") msgprint("Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule'")
raise Exception raise Exception
else: else:
for x in item_lst1: for x in item_lst1:
if x not in item_lst2: if x not in item_lst2:
msgprint("Maintenance Schedule is not generated for item "+x+". Please click on 'Generate Schedule'") msgprint("Maintenance Schedule is not generated for item "+x+". Please click on 'Generate Schedule'")
raise Exception raise Exception
#check if serial no present in item maintenance table #check if serial no present in item maintenance table
#----------------------------------------------------------- #-----------------------------------------------------------
def check_serial_no_added(self): def check_serial_no_added(self):
serial_present =[] serial_present =[]
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.serial_no: if d.serial_no:
serial_present.append(d.item_code) serial_present.append(d.item_code)
for m in getlist(self.doclist, 'maintenance_schedule_detail'): for m in getlist(self.doclist, 'maintenance_schedule_detail'):
if serial_present: if serial_present:
if m.item_code in serial_present and not m.serial_no: if m.item_code in serial_present and not m.serial_no:
msgprint("Please click on 'Generate Schedule' to fetch serial no added for item "+m.item_code) msgprint("Please click on 'Generate Schedule' to fetch serial no added for item "+m.item_code)
raise Exception raise Exception
def on_cancel(self): def on_cancel(self):
for d in getlist(self.doclist, 'item_maintenance_detail'): for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.serial_no: if d.serial_no:
self.update_amc_date(d.serial_no, '') self.update_amc_date(d.serial_no, '')
webnotes.conn.set(self.doc, 'status', 'Cancelled') webnotes.conn.set(self.doc, 'status', 'Cancelled')
sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name)) sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name))
def on_trash(self): def on_trash(self):
sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name)) sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name))

View File

@ -220,7 +220,7 @@ class TransactionBase:
self.doclist = self.doc.clear_table(self.doclist,'sales_team') self.doclist = self.doc.clear_table(self.doclist,'sales_team')
idx = 0 idx = 0
for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name): for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name):
ch = addchild(self.doc, 'sales_team', 'Sales Team', 1, self.doclist) ch = addchild(self.doc, 'sales_team', 'Sales Team', self.doclist)
ch.sales_person = d and cstr(d[0]) or '' ch.sales_person = d and cstr(d[0]) or ''
ch.allocated_percentage = d and flt(d[1]) or 0 ch.allocated_percentage = d and flt(d[1]) or 0
ch.allocated_amount = d and flt(d[2]) or 0 ch.allocated_amount = d and flt(d[2]) or 0