Exemple #1
0
    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()
Exemple #2
0
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()
Exemple #3
0
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()
Exemple #4
0
    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')
Exemple #5
0
 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()
Exemple #6
0
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()
Exemple #7
0
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()
Exemple #8
0
    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')
Exemple #9
0
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()
Exemple #10
0
    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()
Exemple #11
0
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()
Exemple #12
0
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()
Exemple #13
0
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!"
Exemple #14
0
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()
Exemple #15
0
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()
Exemple #16
0
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()
Exemple #17
0
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()
Exemple #18
0
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()
Exemple #19
0
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))))
Exemple #20
0
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()
Exemple #21
0
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()
Exemple #22
0
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()
Exemple #23
0
 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()
Exemple #24
0
    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()
Exemple #25
0
    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')
Exemple #26
0
    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()