예제 #1
0
def make_delivery_trip(source_name, target_doc=None):
    def update_stop_details(source_doc, target_doc, source_parent):
        target_doc.customer = source_parent.customer
        target_doc.address = source_parent.shipping_address_name
        target_doc.customer_address = source_parent.shipping_address
        target_doc.contact = source_parent.contact_person
        target_doc.customer_contact = source_parent.contact_display
        target_doc.grand_total = source_parent.grand_total

        # Append unique Delivery Notes in Delivery Trip
        delivery_notes.append(target_doc.delivery_note)

    delivery_notes = []

    doclist = get_mapped_doc(
        "Delivery Note", source_name, {
            "Delivery Note": {
                "doctype": "Delivery Trip",
                "validation": {
                    "docstatus": ["=", 1]
                }
            },
            "Delivery Note Item": {
                "doctype": "Delivery Stop",
                "field_map": {
                    "parent": "delivery_note"
                },
                "condition": lambda item: item.parent not in delivery_notes,
                "postprocess": update_stop_details
            }
        }, target_doc)

    return doclist
예제 #2
0
def make_maintenance_visit(source_name, target_doc=None):
    from dataent.model.mapper import get_mapped_doc, map_child_doc

    def _update_links(source_doc, target_doc, source_parent):
        target_doc.prevdoc_doctype = source_parent.doctype
        target_doc.prevdoc_docname = source_parent.name

    visit = dataent.db.sql(
        """select t1.name
		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2
		where t2.parent=t1.name and t2.prevdoc_docname=%s
		and t1.docstatus=1 and t1.completion_status='Fully Completed'""",
        source_name)

    if not visit:
        target_doc = get_mapped_doc("Warranty Claim", source_name, {
            "Warranty Claim": {
                "doctype": "Maintenance Visit",
                "field_map": {}
            }
        }, target_doc)

        source_doc = dataent.get_doc("Warranty Claim", source_name)
        if source_doc.get("item_code"):
            table_map = {
                "doctype": "Maintenance Visit Purpose",
                "postprocess": _update_links
            }
            map_child_doc(source_doc, target_doc, table_map, source_doc)

        return target_doc
예제 #3
0
def make_maintenance_visit(source_name, target_doc=None):
    from dataent.model.mapper import get_mapped_doc

    def update_status(source, target, parent):
        target.maintenance_type = "Scheduled"

    doclist = get_mapped_doc(
        "Maintenance Schedule", source_name, {
            "Maintenance Schedule": {
                "doctype": "Maintenance Visit",
                "field_map": {
                    "name": "maintenance_schedule"
                },
                "validation": {
                    "docstatus": ["=", 1]
                },
                "postprocess": update_status
            },
            "Maintenance Schedule Item": {
                "doctype": "Maintenance Visit Purpose",
                "field_map": {
                    "parent": "prevdoc_docname",
                    "parenttype": "prevdoc_doctype",
                    "sales_person": "service_person"
                }
            }
        }, target_doc)

    return doclist
예제 #4
0
def make_supplier_scorecard(source_name, target_doc=None):
	def update_criteria_fields(obj, target, source_parent):
		target.max_score, target.formula = dataent.db.get_value('Supplier Scorecard Criteria',
			obj.criteria_name, ['max_score', 'formula'])

	def post_process(source, target):
		variables = []
		for cr in target.criteria:
			for var in get_variables(cr.criteria_name):
				if var not in variables:
					variables.append(var)

		target.extend('variables', variables)

	doc = get_mapped_doc("Supplier Scorecard", source_name,	{
		"Supplier Scorecard": {
			"doctype": "Supplier Scorecard Period"
		},
		"Supplier Scorecard Scoring Criteria": {
			"doctype": "Supplier Scorecard Scoring Criteria",
			"postprocess": update_criteria_fields,
		}
	}, target_doc, post_process)

	return doc
예제 #5
0
def make_supplier_quotation(source_name, for_supplier, target_doc=None):
    def postprocess(source, target_doc):
        target_doc.supplier = for_supplier
        args = get_party_details(for_supplier,
                                 party_type="Supplier",
                                 ignore_permissions=True)
        target_doc.currency = args.currency or get_party_account_currency(
            'Supplier', for_supplier, source.company)
        target_doc.buying_price_list = args.buying_price_list or dataent.db.get_value(
            'Buying Settings', None, 'buying_price_list')
        set_missing_values(source, target_doc)

    doclist = get_mapped_doc(
        "Request for Quotation", source_name, {
            "Request for Quotation": {
                "doctype": "Supplier Quotation",
                "validation": {
                    "docstatus": ["=", 1]
                }
            },
            "Request for Quotation Item": {
                "doctype": "Supplier Quotation Item",
                "field_map": {
                    "name": "request_for_quotation_item",
                    "parent": "request_for_quotation"
                },
            }
        }, target_doc, postprocess)

    return doclist
예제 #6
0
def _make_customer(source_name, target_doc=None, ignore_permissions=False):
    def set_missing_values(source, target):
        if source.company_name:
            target.customer_type = "Company"
            target.customer_name = source.company_name
        else:
            target.customer_type = "Individual"
            target.customer_name = source.lead_name

        target.customer_group = dataent.db.get_default("Customer Group")

    doclist = get_mapped_doc("Lead",
                             source_name, {
                                 "Lead": {
                                     "doctype": "Customer",
                                     "field_map": {
                                         "name": "lead_name",
                                         "company_name": "customer_name",
                                         "contact_no": "phone_1",
                                         "fax": "fax_1"
                                     }
                                 }
                             },
                             target_doc,
                             set_missing_values,
                             ignore_permissions=ignore_permissions)

    return doclist
예제 #7
0
def make_quotation(source_name, target_doc=None):
    def set_missing_values(source, target):
        from epaas.controllers.accounts_controller import get_default_taxes_and_charges
        quotation = dataent.get_doc(target)

        company_currency = dataent.get_cached_value('Company',
                                                    quotation.company,
                                                    "default_currency")

        if quotation.quotation_to == 'Customer' and quotation.party_name:
            party_account_currency = get_party_account_currency(
                "Customer", quotation.party_name, quotation.company)
        else:
            party_account_currency = company_currency

        quotation.currency = party_account_currency or company_currency

        if company_currency == quotation.currency:
            exchange_rate = 1
        else:
            exchange_rate = get_exchange_rate(quotation.currency,
                                              company_currency,
                                              quotation.transaction_date,
                                              args="for_selling")

        quotation.conversion_rate = exchange_rate

        # get default taxes
        taxes = get_default_taxes_and_charges(
            "Sales Taxes and Charges Template", company=quotation.company)
        if taxes.get('taxes'):
            quotation.update(taxes)

        quotation.run_method("set_missing_values")
        quotation.run_method("calculate_taxes_and_totals")
        if not source.with_items:
            quotation.opportunity = source.name

    doclist = get_mapped_doc(
        "Opportunity", source_name, {
            "Opportunity": {
                "doctype": "Quotation",
                "field_map": {
                    "opportunity_from": "quotation_to",
                    "opportunity_type": "order_type",
                    "name": "enq_no",
                }
            },
            "Opportunity Item": {
                "doctype": "Quotation Item",
                "field_map": {
                    "parent": "prevdoc_docname",
                    "parenttype": "prevdoc_doctype",
                    "uom": "stock_uom"
                },
                "add_if_empty": True
            }
        }, target_doc, set_missing_values)

    return doclist
예제 #8
0
def make_maintenance_visit(source_name, target_doc=None):
    visit = dataent.db.sql(
        """select t1.name
		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2
		where t2.parent=t1.name and t2.prevdoc_docname=%s
		and t1.docstatus=1 and t1.completion_status='Fully Completed'""",
        source_name)

    if not visit:
        doclist = get_mapped_doc(
            "Sales Order", source_name, {
                "Sales Order": {
                    "doctype": "Maintenance Visit",
                    "validation": {
                        "docstatus": ["=", 1]
                    }
                },
                "Sales Order Item": {
                    "doctype": "Maintenance Visit Purpose",
                    "field_map": {
                        "parent": "prevdoc_docname",
                        "parenttype": "prevdoc_doctype"
                    },
                    "add_if_empty": True
                }
            }, target_doc)

        return doclist
예제 #9
0
def enroll_student(source_name):
    """Creates a Student Record and returns a Program Enrollment.

	:param source_name: Student Applicant.
	"""
    dataent.publish_realtime('enroll_student_progress', {"progress": [1, 4]},
                             user=dataent.session.user)
    student = get_mapped_doc("Student Applicant",
                             source_name, {
                                 "Student Applicant": {
                                     "doctype": "Student",
                                     "field_map": {
                                         "name": "student_applicant"
                                     }
                                 }
                             },
                             ignore_permissions=True)
    student.save()
    program_enrollment = dataent.new_doc("Program Enrollment")
    program_enrollment.student = student.name
    program_enrollment.student_name = student.title
    program_enrollment.program = dataent.db.get_value("Student Applicant",
                                                      source_name, "program")
    dataent.publish_realtime('enroll_student_progress', {"progress": [4, 4]},
                             user=dataent.session.user)
    return program_enrollment
예제 #10
0
def make_project(source_name, target_doc=None):
    def postprocess(source, doc):
        doc.project_type = "External"
        doc.project_name = source.name

    doc = get_mapped_doc(
        "Sales Order", source_name, {
            "Sales Order": {
                "doctype": "Project",
                "validation": {
                    "docstatus": ["=", 1]
                },
                "field_map": {
                    "name": "sales_order",
                    "base_grand_total": "estimated_costing",
                }
            },
            "Sales Order Item": {
                "doctype": "Project Task",
                "field_map": {
                    "item_code": "title",
                },
            }
        }, target_doc, postprocess)

    return doc
예제 #11
0
def make_maintenance_schedule(source_name, target_doc=None):
    maint_schedule = dataent.db.sql(
        """select t1.name
		from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2
		where t2.parent=t1.name and t2.sales_order=%s and t1.docstatus=1""",
        source_name)

    if not maint_schedule:
        doclist = get_mapped_doc(
            "Sales Order", source_name, {
                "Sales Order": {
                    "doctype": "Maintenance Schedule",
                    "validation": {
                        "docstatus": ["=", 1]
                    }
                },
                "Sales Order Item": {
                    "doctype": "Maintenance Schedule Item",
                    "field_map": {
                        "parent": "sales_order"
                    },
                    "add_if_empty": True
                }
            }, target_doc)

        return doclist
예제 #12
0
파일: job_card.py 프로젝트: dataent/epaas
def make_stock_entry(source_name, target_doc=None):
    def update_item(obj, target, source_parent):
        target.t_warehouse = source_parent.wip_warehouse

    def set_missing_values(source, target):
        target.purpose = "Material Transfer for Manufacture"
        target.from_bom = 1
        target.fg_completed_qty = source.get('for_quantity', 0) - source.get(
            'transferred_qty', 0)
        target.calculate_rate_and_amount()
        target.set_missing_values()

    doclist = get_mapped_doc(
        "Job Card", source_name, {
            "Job Card": {
                "doctype": "Stock Entry",
                "field_map": {
                    "name": "job_card",
                    "for_quantity": "fg_completed_qty"
                },
            },
            "Job Card Item": {
                "doctype": "Stock Entry Detail",
                "field_map": {
                    "source_warehouse": "s_warehouse",
                    "required_qty": "qty",
                    "uom": "stock_uom"
                },
                "postprocess": update_item,
            }
        }, target_doc, set_missing_values)

    return doclist
예제 #13
0
파일: job_card.py 프로젝트: dataent/epaas
def make_material_request(source_name, target_doc=None):
    def update_item(obj, target, source_parent):
        target.warehouse = source_parent.wip_warehouse

    def set_missing_values(source, target):
        target.material_request_type = "Material Transfer"

    doclist = get_mapped_doc(
        "Job Card", source_name, {
            "Job Card": {
                "doctype": "Material Request",
                "field_map": {
                    "name": "job_card",
                },
            },
            "Job Card Item": {
                "doctype": "Material Request Item",
                "field_map": {
                    "required_qty": "qty",
                    "uom": "stock_uom"
                },
                "postprocess": update_item,
            }
        }, target_doc, set_missing_values)

    return doclist
예제 #14
0
def make_purchase_order(source_name):
    def update_item(source, target, source_parent):
        target_qty = source.get("qty") - source.get("ordered_qty")
        target.qty = target_qty if not flt(target_qty) < 0 else 0
        item = get_item_defaults(target.item_code, source_parent.company)
        if item:
            target.item_name = item.get("item_name")
            target.description = item.get("description")
            target.uom = item.get("stock_uom")
            target.warehouse = item.get("default_warehouse")

    target_doc = get_mapped_doc(
        "Blanket Order", source_name, {
            "Blanket Order": {
                "doctype": "Purchase Order"
            },
            "Blanket Order Item": {
                "doctype": "Purchase Order Item",
                "field_map": {
                    "rate": "blanket_order_rate",
                    "parent": "blanket_order"
                },
                "postprocess": update_item
            }
        })
    return target_doc
예제 #15
0
def make_installation_note(source_name, target_doc=None):
    def update_item(obj, target, source_parent):
        target.qty = flt(obj.qty) - flt(obj.installed_qty)
        target.serial_no = obj.serial_no

    doclist = get_mapped_doc(
        "Delivery Note", source_name, {
            "Delivery Note": {
                "doctype": "Installation Note",
                "validation": {
                    "docstatus": ["=", 1]
                }
            },
            "Delivery Note Item": {
                "doctype": "Installation Note Item",
                "field_map": {
                    "name": "prevdoc_detail_docname",
                    "parent": "prevdoc_docname",
                    "parenttype": "prevdoc_doctype",
                },
                "postprocess": update_item,
                "condition": lambda doc: doc.installed_qty < doc.qty
            }
        }, target_doc)

    return doclist
예제 #16
0
def generate_fee(fee_schedule):
    doc = dataent.get_doc("Fee Schedule", fee_schedule)
    error = False
    total_records = sum([int(d.total_students) for d in doc.student_groups])
    created_records = 0

    if not total_records:
        dataent.throw(_("Please setup Students under Student Groups"))

    for d in doc.student_groups:
        students = get_students(d.student_group, doc.academic_year,
                                doc.academic_term, doc.student_category)
        for student in students:
            try:
                fees_doc = get_mapped_doc(
                    "Fee Schedule", fee_schedule, {
                        "Fee Schedule": {
                            "doctype": "Fees",
                            "field_map": {
                                "name": "Fee Schedule"
                            }
                        }
                    })
                fees_doc.student = student.student
                fees_doc.student_name = student.student_name
                fees_doc.program = student.program
                fees_doc.student_batch = student.student_batch_name
                fees_doc.send_payment_request = doc.send_email
                fees_doc.save()
                fees_doc.submit()
                created_records += 1
                dataent.publish_realtime("fee_schedule_progress", {
                    "progress":
                    str(int(created_records * 100 / total_records))
                },
                                         user=dataent.session.user)

            except Exception as e:
                error = True
                err_msg = dataent.local.message_log and "\n\n".join(
                    dataent.local.message_log) or cstr(e)

    if error:
        dataent.db.rollback()
        dataent.db.set_value("Fee Schedule", fee_schedule,
                             "fee_creation_status", "Failed")
        dataent.db.set_value("Fee Schedule", fee_schedule, "error_log",
                             err_msg)

    else:
        dataent.db.set_value("Fee Schedule", fee_schedule,
                             "fee_creation_status", "Successful")
        dataent.db.set_value("Fee Schedule", fee_schedule, "error_log", None)

    dataent.publish_realtime("fee_schedule_progress", {
        "progress": "100",
        "reload": 1
    },
                             user=dataent.session.user)
예제 #17
0
def get_fee_structure(source_name, target_doc=None):
    fee_request = get_mapped_doc(
        "Fee Structure",
        source_name, {"Fee Structure": {
            "doctype": "Fee Schedule"
        }},
        ignore_permissions=True)
    return fee_request
예제 #18
0
def make_employee(source_name, target_doc=None):
	def set_missing_values(source, target):
		target.personal_email = dataent.db.get_value("Job Applicant", source.job_applicant, "email_id")
	doc = get_mapped_doc("Job Offer", source_name, {
			"Job Offer": {
				"doctype": "Employee",
				"field_map": {
					"applicant_name": "employee_name",
				}}
		}, target_doc, set_missing_values)
	return doc
예제 #19
0
def fetch_appraisal_template(source_name, target_doc=None):
    target_doc = get_mapped_doc(
        "Appraisal Template", source_name, {
            "Appraisal Template": {
                "doctype": "Appraisal",
            },
            "Appraisal Template Goal": {
                "doctype": "Appraisal Goal",
            }
        }, target_doc)

    return target_doc
예제 #20
0
def make_loan(source_name, target_doc=None):
    doclist = get_mapped_doc(
        "Loan Application", source_name, {
            "Loan Application": {
                "doctype": "Loan",
                "validation": {
                    "docstatus": ["=", 1]
                }
            }
        }, target_doc)

    return doclist
예제 #21
0
def make_fee_schedule(source_name, target_doc=None):
    return get_mapped_doc(
        "Fee Structure", source_name, {
            "Fee Structure": {
                "doctype": "Fee Schedule",
                "validation": {
                    "docstatus": ["=", 1],
                }
            },
            "Fee Component": {
                "doctype": "Fee Component"
            }
        }, target_doc)
def make_proof_submission(source_name, target_doc=None):
    doclist = get_mapped_doc(
        "Employee Tax Exemption Declaration", source_name, {
            "Employee Tax Exemption Declaration": {
                "doctype": "Employee Tax Exemption Proof Submission",
                "field_no_map":
                ["monthly_house_rent", "monthly_hra_exemption"]
            },
            "Employee Tax Exemption Declaration Category": {
                "doctype": "Employee Tax Exemption Proof Submission Detail",
                "add_if_empty": True
            }
        }, target_doc)

    return doclist
예제 #23
0
def make_request_for_quotation(source_name, target_doc=None):
    doclist = get_mapped_doc(
        "Opportunity", source_name, {
            "Opportunity": {
                "doctype": "Request for Quotation"
            },
            "Opportunity Item": {
                "doctype":
                "Request for Quotation Item",
                "field_map": [["name", "opportunity_item"],
                              ["parent", "opportunity"], ["uom", "uom"]]
            }
        }, target_doc)

    return doclist
예제 #24
0
def make_quotation(source_name, target_doc=None):
    target_doc = get_mapped_doc("Lead", source_name, {
        "Lead": {
            "doctype": "Quotation",
            "field_map": {
                "name": "party_name"
            }
        }
    }, target_doc)
    target_doc.quotation_to = "Lead"
    target_doc.run_method("set_missing_values")
    target_doc.run_method("set_other_charges")
    target_doc.run_method("calculate_taxes_and_totals")

    return target_doc
예제 #25
0
def make_packing_slip(source_name, target_doc=None):
    doclist = get_mapped_doc(
        "Delivery Note", source_name, {
            "Delivery Note": {
                "doctype": "Packing Slip",
                "field_map": {
                    "name": "delivery_note",
                    "letter_head": "letter_head"
                },
                "validation": {
                    "docstatus": ["=", 0]
                }
            }
        }, target_doc)

    return doclist
예제 #26
0
def get_item_from_material_requests_based_on_supplier(source_name,
                                                      target_doc=None):
    mr_items_list = dataent.db.sql("""
		SELECT
			mr.name, mr_item.item_code
		FROM
			`tabItem` as item,
			`tabItem Supplier` as item_supp,
			`tabMaterial Request Item` as mr_item,
			`tabMaterial Request`  as mr
		WHERE item_supp.supplier = %(supplier)s
			AND item.name = item_supp.parent
			AND mr_item.parent = mr.name
			AND mr_item.item_code = item.name
			AND mr.status != "Stopped"
			AND mr.material_request_type = "Purchase"
			AND mr.docstatus = 1
			AND mr.per_ordered < 99.99""", {"supplier": source_name},
                                   as_dict=1)

    material_requests = {}
    for d in mr_items_list:
        material_requests.setdefault(d.name, []).append(d.item_code)

    for mr, items in material_requests.items():
        target_doc = get_mapped_doc(
            "Material Request", mr, {
                "Material Request": {
                    "doctype": "Request for Quotation",
                    "validation": {
                        "docstatus": ["=", 1],
                        "material_request_type": ["=", "Purchase"],
                    }
                },
                "Material Request Item": {
                    "doctype":
                    "Request for Quotation Item",
                    "condition":
                    lambda row: row.item_code in items,
                    "field_map": [["name", "material_request_item"],
                                  ["parent", "material_request"],
                                  ["uom", "uom"]]
                }
            }, target_doc)

    return target_doc
예제 #27
0
def _make_sales_order(source_name, target_doc=None, ignore_permissions=False):
	customer = _make_customer(source_name, ignore_permissions)

	def set_missing_values(source, target):
		if customer:
			target.customer = customer.name
			target.customer_name = customer.customer_name
		target.ignore_pricing_rule = 1
		target.flags.ignore_permissions = ignore_permissions
		target.run_method("set_missing_values")
		target.run_method("calculate_taxes_and_totals")

	def update_item(obj, target, source_parent):
		target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor)

	doclist = get_mapped_doc("Quotation", source_name, {
			"Quotation": {
				"doctype": "Sales Order",
				"validation": {
					"docstatus": ["=", 1]
				}
			},
			"Quotation Item": {
				"doctype": "Sales Order Item",
				"field_map": {
					"parent": "prevdoc_docname"
				},
				"postprocess": update_item
			},
			"Sales Taxes and Charges": {
				"doctype": "Sales Taxes and Charges",
				"add_if_empty": True
			},
			"Sales Team": {
				"doctype": "Sales Team",
				"add_if_empty": True
			},
			"Payment Schedule": {
				"doctype": "Payment Schedule",
				"add_if_empty": True
			}
		}, target_doc, set_missing_values, ignore_permissions=ignore_permissions)

	# postprocess: fetch shipping address, set missing values

	return doclist
예제 #28
0
def make_stock_entry(source_name, target_doc=None):
	doc = get_mapped_doc("Purchase Invoice", source_name, {
		"Purchase Invoice": {
			"doctype": "Stock Entry",
			"validation": {
				"docstatus": ["=", 1]
			}
		},
		"Purchase Invoice Item": {
			"doctype": "Stock Entry Detail",
			"field_map": {
				"stock_qty": "transfer_qty",
				"batch_no": "batch_no"
			},
		}
	}, target_doc)

	return doc
예제 #29
0
def make_supplier_quotation(source_name, target_doc=None):
    doclist = get_mapped_doc(
        "Opportunity", source_name, {
            "Opportunity": {
                "doctype": "Supplier Quotation",
                "field_map": {
                    "name": "opportunity"
                }
            },
            "Opportunity Item": {
                "doctype": "Supplier Quotation Item",
                "field_map": {
                    "uom": "stock_uom"
                }
            }
        }, target_doc)

    return doclist
예제 #30
0
def make_opportunity(source_name, target_doc=None):
    target_doc = get_mapped_doc(
        "Lead", source_name, {
            "Lead": {
                "doctype": "Opportunity",
                "field_map": {
                    "campaign_name": "campaign",
                    "doctype": "opportunity_from",
                    "name": "party_name",
                    "lead_name": "contact_display",
                    "company_name": "customer_name",
                    "email_id": "contact_email",
                    "mobile_no": "contact_mobile"
                }
            }
        }, target_doc)

    return target_doc