def update_naming_series(self): setter = frappe.new_doc("Property Setter") filters = { 'doc_type': "Sales Invoice", 'field_name': 'naming_series', 'doctype_or_field': 'DocField', 'property': "options", 'property_type': "Select" } if database.exists("Property Setter", filters): setter = frappe.get_doc("Property Setter", filters) series = [""] series += self.get_series() setter.update({ 'doc_type': "Sales Invoice", 'field_name': 'naming_series', 'doctype_or_field': 'DocField', 'property': "options", 'property_type': "Select", 'value': "\n".join(series) }) setter.save() database.commit()
def cover_po(self): for row in self.purchase_orders: po = frappe.get_doc("Purchase Order", row.purchase_order) po.forward_contract = self.name po.amount_covered = row.amount_covered po.amount_unhedged = so.grand_total - row.amount_covered po.save(ignore_permissions=True) db.commit()
def cover_so(self): for row in self.sales_orders: so = frappe.get_doc("Sales Order", row.sales_order) so.forward_contract = self.name so.amount_covered = row.amount_covered so.amount_unhedged = so.grand_total - row.amount_covered so.save(ignore_permissions=True) db.commit()
def on_submit(self): if self.status == "On Trip" and self.ending_datetime: self.db_set('status', 'Completed') db.commit() frappe.db.set_value("Truck Master", self.truck_no, 'status', 'On Trip') frappe.db.set_value("Driver Master", self.driver, 'status', 'On Trip') frappe.db.set_value("Khalasi Master", self.khalasi, 'status', 'On Trip')
def on_submit(self): if self.status == "Received": company_asset = frappe.get_doc("Company Asset", self.asset_number) company_asset.handover_date = '' company_asset.in_possession_with = "Company" company_asset.employee = '' company_asset.employee_name = '' company_asset.save(ignore_permissions=True) db.commit()
def cancel_jvs(self): if self.duty_drawback_jv: jv = frappe.get_doc("Journal Entry", self.duty_drawback_jv) jv.cancel() self.db_set('duty_drawback_jv', '') if self.gst_jv: jv = frappe.get_doc("Journal Entry", self.gst_jv) jv.cancel() self.db_set('gst_jv', '') db.commit()
def fwd_uti_cancel(self): if self.forward_contract: existing_row_id = db.get_value("Forward Booking Utilization", filters={ "parent": self.forward_contract, "payment_entry": self.name }, fieldname="name") frappe.delete_doc("Forward Booking Utilization", existing_row_id) db.commit()
def on_cancel(self): if self.status == "Completed": self.db_set('status', 'Cancelled') db.commit() frappe.db.set_value("Truck Master", self.truck_no, 'status', 'Available') frappe.db.set_value("Driver Master", self.driver, 'status', 'Available') frappe.db.set_value("Khalasi Master", self.khalasi, 'status', 'Available')
def set_to_expired(): doctype = "Cost Estimation" all_records = get_expired_and_valid_records() for name, in all_records: doc = get_doc(doctype, name) doc.update_status() database.commit()
def on_submit(self): # Push Changes in Driver and Khalasi Contact from Truck Engagement Form status if self.change_dcontact: driver = get_doc("Driver Master", self.driver) driver.db_set('contact_no', self.dcontact_no) if self.change_kcontact: khalasi = get_doc("Khalasi Master", self.khalasi) khalasi.db_set('contact_no', self.kcontact_no) frappe.db.set_value("Truck Master", self.truck_no, 'status', 'Booked') db.commit()
def update_projects(): doctype = "Project" filters = { "updated_tasks": False, } for name, in get_all(doctype, filters, as_list=True): doc = frappe.get_doc(doctype, name) update_tasks(doc) doc.db_set("updated_tasks", True) database.commit()
def after_install(): """runs after installation""" # add basic data add_party_groups() # create additional roles add_reqd_roles() # add customizations add_reqd_custom_fields() # save the changes to the database db.commit()
def upadte_item_price(item, price_list, per_unit_price): if db.exists("Item Price",{"item_code":item,"price_list":price_list}): name = db.get_value("Item Price",{"item_code":item,"price_list":price_list},'name') db.set_value("Item Price",name,"price_list_rate", per_unit_price) else: item_price = frappe.new_doc("Item Price") item_price.price_list = price_list item_price.item_code = item item_price.price_list_rate = per_unit_price item_price.save() db.commit() return "Item Price Updated!"
def total_uti(self): if self.forward_contract: target_doc = frappe.get_doc("Forward Booking", self.forward_contract) total = 0 if target_doc.hedge == "Export": for row in target_doc.payment_entries: total += row.paid_amount target_doc.total_utilization = total else: for row in target_doc.payment_entries: total += row.received_amount target_doc.total_utilization = total target_doc.amount_outstanding = target_doc.amount - target_doc.total_utilization - target_doc.total_cancelled target_doc.save() db.commit()
def po_payments(self, method): for row in self.references: if row.reference_doctype == "Purchase Order": target_po = get_doc("Purchase Order", row.reference_name) target_po.append("payments", { "reference_date": self.reference_date, "mode_of_payment": self.mode_of_payment, "reference_no": self.reference_no, "paid_amount" : row.allocated_amount, "payment_entry" : self.name, "difference_amount" : self.difference_amount }) target_po.save() db.commit()
def set_to_delayed(): doctype = "Planning Mission" for name in get_all_planning_missions(): doc = get_doc(doctype, name) if not doc.expected_end_date: # ignore if it has not been set yet continue doc.status = "Delayed" doc.db_update() database.commit()
def set_to_delayed(): doctype = "Payment Entry Request" for name, in get_all_payment_entry_request(): doc = get_doc(doctype, name) if not doc.due_date: # ignore if it has not been set yet continue doc.status = "Overdue" doc.db_update() database.commit()
def set_to_delayed(): doctype = "Planning Document" for planning_document in get_all_planning_documents(): name = planning_document.name doc = get_doc(doctype, name) if not doc.expected_end_date: # ignore if it has not been set yet continue doc.status = "Delayed" doc.db_update() database.commit()
def create_part_tool(self, method): parts = [] for row in self.items: if row.item_group == "Truck Part": part_tool = frappe.new_doc("Part Creation Tool") part_tool.truck_part = row.item_code part_tool.part_company = row.part_company part_tool.number_of_parts = int(row.qty) part_tool.warehouse = row.part_warehouse part_tool.purchase_invoice = self.name part_tool.supplier = self.supplier part_tool.purchase_date = self.posting_date part_tool.purchase_rate = row.rate part_tool.save() db.commit() link = get_url_to_form("Part Creation Tool", part_tool.name) parts.append("<b><a href='{0}'>{1}</a></b>".format(link.replace('localhost', 'localhost:8081'),row.item_code)) if parts: msgprint(_("Part Creation Tool updated for parts '%s'. Please submit the document to create parts."%(",".join(parts))))
def create_drawback_jv(self): if self.currency != "INR" and self.total_duty_drawback: drawback_receivable_account = db.get_value( "Company", {"company_name": self.company}, "duty_drawback_receivable_account") drawback_income_account = db.get_value("Company", {"company_name": self.company}, "duty_drawback_income_account") drawback_cost_center = db.get_value("Company", {"company_name": self.company}, "duty_drawback_cost_center") if not drawback_receivable_account: frappe.throw(_("Set Duty Drawback Receivable Account in Company")) elif not drawback_income_account: frappe.throw(_("Set Duty Drawback Income Account in Company")) elif not drawback_cost_center: frappe.throw(_("Set Duty Drawback Cost Center in Company")) else: jv = frappe.new_doc("Journal Entry") jv.voucher_type = "Duty Drawback Entry" jv.posting_date = self.posting_date jv.company = self.company jv.cheque_no = self.name jv.cheque_date = self.posting_date jv.user_remark = "Duty draw back against" + self.name + " for " + self.customer jv.append( "accounts", { "account": drawback_receivable_account, "cost_center": drawback_cost_center, "debit_in_account_currency": self.total_duty_drawback }) jv.append( "accounts", { "account": drawback_income_account, "cost_center": drawback_cost_center, "credit_in_account_currency": self.total_duty_drawback }) jv.save(ignore_permissions=True) self.db_set('duty_drawback_jv', jv.name) jv.submit() db.commit()
def create_igst_jv(self): if self.export_type == "With Payment of Tax" and self.currency != "INR" and self.total_igst_amount and self.shipping_bill_date: refund_receivable_account = db.get_value( "Company", {"company_name": self.company}, "refund_receivable_on_export_account") igst_payable_account = db.get_value("Company", {"company_name": self.company}, "igst_payable_account") cost_center = db.get_value("Company", {"company_name": self.company}, "cost_center") if not refund_receivable_account: frappe.throw( _("Set Refund Receivable on Export Account in Company")) elif not igst_payable_account: frappe.throw(_("Set IGST Payable Account in Company")) elif not cost_center: frappe.throw(_("Set Default Cost Center in Company")) else: jv = frappe.new_doc("Journal Entry") jv.voucher_type = "GST Payable Entry" jv.posting_date = self.shipping_bill_date jv.company = self.company jv.cheque_no = self.name jv.cheque_date = self.shipping_bill_date jv.user_remark = "IGST Payable against" + self.name + " for " + self.customer jv.append( "accounts", { "account": refund_receivable_account, "cost_center": cost_center, "debit_in_account_currency": self.total_igst_amount }) jv.append( "accounts", { "account": igst_payable_account, "cost_center": cost_center, "credit_in_account_currency": self.total_igst_amount }) jv.save(ignore_permissions=True) self.db_set('gst_jv', jv.name) jv.submit() db.commit()
def fwd_uti(self): if self.forward_contract: target_doc = frappe.get_doc("Forward Booking", self.forward_contract) existing_row_id = db.get_value("Forward Booking Utilization", filters={ "parent": self.forward_contract, "payment_entry": self.name }, fieldname="name") if not existing_row_id: target_doc.append( "payment_entries", { "date": self.posting_date, "party_type": self.party_type, "party": self.party, "paid_amount": self.paid_amount, "received_amount": self.received_amount, "payment_entry": self.name }) target_doc.save() db.commit()
def create_part(self, serial_number=''): inventory = new_doc("Truck Parts Inventory") if self.truck_part == 'Tyre': inventory.type = self.type inventory.position = self.position inventory.model_name = self.model_name inventory.creation_tool_link = self.name inventory.truck_part = self.truck_part inventory.part_company = self.part_company inventory.serial_number = serial_number inventory.warehouse = self.warehouse inventory.expected_life = self.expected_life inventory.purchase_through = "Purchase Invoice" inventory.ref_link = self.purchase_invoice inventory.purchase_date = self.purchase_date inventory.purchase_rate = self.purchase_rate inventory.supplier = self.supplier inventory.manufacturing_date = self.manufacturing_date inventory.expected_end_life = self.expected_end_life inventory.part_status = "New" inventory.title = serial_number and ( self.truck_part + "-" + serial_number) or self.truck_part inventory.save() db.commit()
def on_cancel(self): result = get_list("Truck Parts Inventory", filters={'ref_link': self.name}, fields='name') for row in result: delete_doc("Truck Parts Inventory", row.name) for d in self.service_detail: if d.type in ["Change from Inventory", "Change at Garage"]: old_part = get_doc("Truck Parts Inventory", d.part_no) old_part.part_status = "In Use" old_part.truck_no = self.truck_no old_part.save() if d.type == "Change from Inventory": new_part = get_doc("Truck Parts Inventory", d.new_part_no) new_part.part_status = "New" new_part.truck_no = "" new_part.save() if d.type == "Change at Garage": d.new_part_link = "" db.commit()
def before_submit(self): for d in self.service_detail: if d.type == "Change from Inventory" or d.type == "Change at Garage": old_part = get_doc("Truck Parts Inventory", d.part_no) old_part.part_status = "Available" old_part.truck_no = "" old_part.warehouse = d.warehouse old_part.save() if d.type == "Change from Inventory": if not d.new_part_no: throw( _("Please provide New Part No. in row %d" % d.idx)) update_part = get_doc("Truck Parts Inventory", d.new_part_no) update_part.part_status = "In Use" update_part.truck_no = self.truck_no update_part.save() else: if not d.serial_number: throw( _("Please provide serial number in row %d" % d.idx)) elif not d.part_company: throw( _("Please provide part company in row %d" % d.idx)) elif not d.purchase_rate: throw( _("Please provide purchase rate in row %d" % d.idx)) elif not d.purchase_date: throw( _("Please provide purchase date in row %d" % d.idx)) elif not d.new_part_link: inventory = new_doc("Truck Parts Inventory") inventory.truck_part = d.service_item inventory.part_company = d.part_company inventory.warehouse = d.warehouse inventory.purchase_through = "Maintenance Log" inventory.ref_link = self.name inventory.purchase_rate = d.purchase_rate inventory.purchase_date = d.purchase_date inventory.serial_number = d.serial_number inventory.title = d.service_item + "-" + d.serial_number inventory.part_status = "In Use" inventory.truck_no = self.truck_no inventory.save() d.new_part_link = inventory.name db.commit() stock_entry = None cost_center = db.get_value("Company", self.company, "cost_center") for d in self.consumable_details: if d.from_inventory: if not d.warehouse: throw( _("Please provide warehouse in row %d of Consumable Service Table" % d.idx)) else: if not stock_entry: stock_entry = new_doc("Stock Entry") stock_entry.company = self.company stock_entry.purpose = "Material Issue" stock_entry.append( "items", { "s_warehouse": d.warehouse, "item_code": d.item_code, "qty": d.used_qty, "expense_account": self.expense_account, "cost_center": cost_center }) else: stock_entry.append( "items", { "s_warehouse": d.warehouse, "item_code": d.item_code, "qty": d.used_qty, "expense_account": self.expense_account, "cost_center": cost_center }) if stock_entry: stock_entry.save() stock_entry.submit() db.commit() url = get_url_to_form("Stock Entry", stock_entry.name) idx = url.find("/desk#") stock_entry_url = url[:idx] + ":8081" + url[idx:] link = "<b><a href='{url}'>{name}</a></b>".format( url=stock_entry_url, name=stock_entry.name) msgprint(_("New Stock Entry {0} created!".format(link)), title="Success", indicator='green')
def on_submit(self): mlog_url = get_url_to_form('Maintenance Log', self.name) idx = mlog_url.find("/desk#") mlog_link = mlog_url[:idx] + ":8081" + mlog_url[idx:] content = "Maintenance Log No. - <b><a href='{url}'>{name}</a></b><br>Creation Date: {date} :-<p><b>Service Parts: </b></p><ol>".format( url=mlog_link, name=self.name, date=self.get_formatted('date')) for d in self.service_detail: content += "<li>" content += "Part Name: <b>" + d.service_item + "</b><br>" content += "Service Type: <b>" + d.type + "</b><br>" content += "Service Charge: <b>" + d.get_formatted( 'service_charge') + "</b><br>" part_content = "Maintenance Log No. - <b><a href='{url}'>{name}</a></b><br>Creation Date: {date}:-".format( url=mlog_link.replace('localhost', 'localhost:8081'), name=self.name, date=self.get_formatted('date')) if d.type == "Change at Garage": truck_part_url = get_url_to_form("Truck Parts Inventory", d.new_part_link) idx = truck_part_url.find("/desk#") truck_part_link = truck_part_url[: idx] + ":8081" + truck_part_url[ idx:] content += "New Part Log: <b><a href='{url}'>{name}</a></b><br>".format( url=truck_part_link, name=d.new_part_link) content += "New Part Rate: <b>{rate}</b><br>".format( rate=d.purchase_rate) part_content += "<p>Type: " + d.type + "</p>" part_content += "<p>Service Charge: " + d.get_formatted( 'service_charge') + "</p>" content += "</li>" com = new_doc("Communication") com.subject = self.name com.content = part_content com.communication_type = "Comment" com.comment_type = "Comment" com.reference_doctype = "Truck Parts Inventory" com.reference_name = d.part_no com.user = frappe.session.user com.save(ignore_permissions=True) db.commit() content += "</ol>" if self.consumable_details: content += "<p><b>Consumable Service: </b></p><ol>" for row in self.consumable_details: content += "<li>" content += "Item Code: <b>" + row.item_code + "</b><br>" content += "User Qty: <b>" + row.get_formatted( 'used_qty') + " " + row.uom + "</b><br>" if row.from_inventory: cost = flt(row.service_cost) else: cost = flt(row.amount) + flt(row.service_cost) content += "Cost: <b>" + str(cost) + "</b><br></li>" content += "</ol>" if self.other_service_charge: content += "<p>Other Service Charge: " + self.get_formatted( 'other_service_charge') + "</p>" content += "<p>Total Service Bill: " + self.get_formatted( 'total_service_bill') + "</p>" com = new_doc("Communication") com.subject = self.name com.content = content com.communication_type = "Comment" com.comment_type = "Comment" com.reference_doctype = "Truck Master" com.reference_name = self.truck_no com.user = frappe.session.user com.save(ignore_permissions=True) db.commit()