コード例 #1
0
    def validate_production_qty(self):
        if flt(self.production_qty):
            return True

        errmsg = translate("Missing Fields")
        field = translate("Production Qty")

        frappe.throw("{}: {}".format(errmsg, field))
コード例 #2
0
        def _validate_item_set_uom():
            doctype = "Item Set"
            filters = {
                "parenttype": "List of Material Detail",
                "parentfield": "item_set",
                "parent": self.name,
            }

            fields = "item"

            doclist = frappe \
                .get_all(doctype,
                         filters,
                         fields,
                         as_list=True)

            for name, in doclist:
                doctype = "Item"
                doc = frappe.get_doc(doctype, name)

                if self.uom in [d.uom for d in doc.uoms]:
                    continue

                errmsg = \
                    translate("Conversion Factor not specified "
                              "in UOMs table in {0}: {1} for UOM: {2}")

                frappe.throw(
                    errmsg
                    .format(doc.item_code,
                            doc.item_name, self.uom)
                )
コード例 #3
0
    def validate_planning_document(self):
        if self.planning_document:
            return True

        errmsg = translate("Missing Value for Planning Document field")

        frappe.throw(errmsg)
コード例 #4
0
    def generate_hash_and_validate(self):

        # don't validate for compound products
        unique_hash = self.generate_hash()

        doctype = self.doctype
        filters = {
            "unique_hash": unique_hash,
        }

        if not self.is_new():
            filters.update({
                "name": ["!=", self.name]
            })

        exists = cstr(database.exists(doctype, filters))

        url_to_form = frappe.utils.get_url_to_form(doctype, exists)

        err_msg = """
            Ya existe un Producto con las mismas especificaciones
            <br>
            <strong>{doctype}</strong>
            <a href="{url_to_form}">{name}</a>
        """

        if exists and not self.is_compound_product:
            frappe.throw(
                err_msg
                .format(doctype=translate(doctype),
                        url_to_form=url_to_form,
                        name=exists)
            )

        self.unique_hash = unique_hash
コード例 #5
0
def get_filename(filename, attachment_type, doctype, docname):
    attachment_opts = get_attachment_opts(attachment_type)
    prefix = attachment_opts.prefix

    extension = get_extension(filename)

    common_name_part = "{prefix}-{name}" \
        .format(prefix=prefix, name=docname)

    current_count = get_current_count(common_name_part, doctype, docname)

    if cint(attachment_opts.limit):
        # validate attachment limits
        errmsg = translate("Attachment limit exceeded "
                           "for Attachment Type of: {0}")

        if current_count >= attachment_opts.limit:
            frappe.throw(errmsg.format(attachment_type))

        if cint(attachment_opts.limit) == 1:
            return "{prefix}-{name}.{extension}" \
                .format(prefix=prefix, name=docname, extension=extension)

    version = "{next_version}" \
        .format(next_version=cint(current_count) + 1)

    return "{prefix}-{name}-{version}.{extension}" \
        .format(prefix=prefix, name=docname,
                extension=extension, version=version)
コード例 #6
0
ファイル: __init__.py プロジェクト: YefriTavarez/peark
    def get_item(source_doc):
        ref_doctype = "Product Assembly"
        ref_docname = source_doc.product_assembly

        doctype = "Item"
        filters = {
            "ref_doctype": ref_doctype,
            "ref_docname": ref_docname,
        }

        errmsg = translate("Item not found for Product Assembly: {}")
        if not database.exists(doctype, filters):
            frappe.throw(errmsg.format(ref_docname))

        item_doc = frappe.get_doc(doctype, filters)

        args = {
            "item_code": item_doc.name,
            "item_name": item_doc.item_name,
            "parent": target_doc.name,
            "parentfield": "items",
            "parenttype": "Quotation",
            "description": source_doc.product_assembly_specification,
            "company": defaults.company,
            "doctype": "Quotation",
            "currency": source_doc.currency,
            "qty": source_doc.qty_to_produce,
            "rate": source_doc.rate_per_unit,
        }

        return get_item_details(args)
コード例 #7
0
    def validate_colors(self):
        validvalues = ("0", "1", "2", "3", "4")
        fields = (
            "front_colors",
            "pantone_colors",
            "back_colors",
            "pantone_back_colors",
        )

        err_msg = """
            Valor para el campo {0}
                debe estar en el rango (0-4)
        """

        for fieldname in fields:
            value = cstr(self.get(fieldname, 0))

            if value in validvalues:
                continue

            if fieldname.startswith("pantone") \
                    and cint(value) > 0:
                continue

            label = self.meta.get_field(fieldname) \
                .label

            translated_label = translate(label)

            frappe.throw(err_msg
                         .format(
                             bold(translated_label)
                         )
                         )
コード例 #8
0
        def _validate_item_group_uom():
            doctype = "Item"
            filters = {
                "disabled": 0,
                "is_stock_item": 1,
                "item_group": self.item_group,
            }

            doclist = frappe \
                .get_all(doctype,
                         filters,
                         as_list=True)

            for name, in doclist:
                doc = frappe.get_doc(doctype, name)

                if self.uom in [d.uom for d in doc.uoms]:
                    continue

                errmsg = \
                    translate("Conversion Factor not specified "
                              "in UOMs table in {0}: {1} for UOM: {2}")

                frappe.throw(
                    errmsg
                    .format(doc.item_code,
                            doc.item_name, self.uom)
                )
コード例 #9
0
def update_task(name, status):
    def update_project(task):
        doctype = "Project"
        name = task.get("project")

        doc = frappe.get_doc(doctype, name)

        doc.run_method("update_percent_complete")
        doc.db_update()

        return doc.as_dict()

    doctype = "Task"

    doc = frappe.get_doc(doctype, name)

    if status not in ("Open", "Completed"):
        return False

    doc.status = status

    if status == "Completed":
        doc.completed_by = frappe.session.user

        comment_type = "Edit"
        text = translate("Completed By")
        doc.add_comment(comment_type, "{}: {}".format(text, doc.completed_by))
    else:
        doc.completed_by = None

    doc.db_update()

    return update_project(doc)
コード例 #10
0
    def validate_cost_center(self):
        doctype = "Cost Center"
        name = self.cost_center
        fieldname = "company"

        if not name:
            return True

        cost_center_company = database \
            .get_value(doctype, name, fieldname)

        if cost_center_company == self.company:
            return True

        errmsg = \
            translate("Cost Center should belong to "
                      "<strong>{company}</strong> company and it belongs "
                      "to <strong>{cost_center_company}</strong> company")

        opts = {
            "company": self.company,
            "cost_center_company": cost_center_company,
        }

        frappe.throw(errmsg.format(opts))
コード例 #11
0
    def validate_planning_template(self):
        if self.planning_template:
            return True

        errmsg = translate("Missing Value for Planning Template field")

        frappe.throw(errmsg)
コード例 #12
0
    def validate_qty_to_produce(self):
        qty_to_produce = flt(self.qty_to_produce)

        errmsg = translate("Qty to produce must be greater than zero!")

        if qty_to_produce <= 0:
            frappe.throw(errmsg)
コード例 #13
0
ファイル: product_profile.py プロジェクト: YefriTavarez/peark
    def validate_paperboard_items(self):
        doctype = "Paperboard"
        fieldname = "backboard"
        err_msg = translate(
            "Material {paperboard} ({material_name}) cannot be in the"
            " {tablename} table at Row #{idx} as it is backboard.")

        for d in self.paperboards:
            docname = d.paperboard
            backboard = frappe.get_value(doctype, docname, fieldname)

            if backboard:
                opts = d.as_dict()

                opts.update({"tablename": translate("Paperboard")})

                frappe.throw(err_msg.format(**opts))
コード例 #14
0
    def on_fetch_materials_prevalidate(self):
        project_centers = self.project_centers

        errmsg = translate("There should be at least one Project Center "
                           "in the Production Project Centers' table")

        if not project_centers:
            frappe.throw(errmsg)
コード例 #15
0
ファイル: product_profile.py プロジェクト: YefriTavarez/peark
    def validate_packing_features_items(self):
        doctype = "Product Feature"
        fieldname = "product_feature_type"
        err_msg = translate("{product_feature} Feature cannot be in the"
                            " {tablename} table at Row #{idx}. Please check!")

        for d in self.packing_features:
            docname = d.product_feature
            product_feature_type = frappe.get_value(doctype, docname,
                                                    fieldname)

            if product_feature_type != "Packing":
                opts = d.as_dict()

                opts.update({"tablename": translate("Packing")})

                frappe.throw(err_msg.format(**opts))
コード例 #16
0
        def get_template():
            doctype = "Project Center Template"
            name = self.project_center_template

            errmsg = translate("Missing Fields")
            if not name:
                frappe.throw("{}: {}".format(errmsg, doctype))

            return frappe.get_doc(doctype, name)
コード例 #17
0
    def set_printing_sides(self):
        doctype = "Product Assembly"
        name = self.product_assembly
        fields = ("front_colors", "pantone_colors", "back_colors",
                  "pantone_back_colors")

        front_colors, pantone_colors, back_colors, pantone_back_colors \
            = database.get_value(doctype, name, fields)

        self.printing_sides = "Sin Impresión"

        if cint(front_colors) > 0 \
                or cint(pantone_colors) > 0:
            self.printing_sides = translate("One Side")

            if cint(back_colors) > 0 \
                    or cint(pantone_back_colors) > 0:
                self.printing_sides = translate("Two Sides")
コード例 #18
0
    def validate_if_doc_exists(self):
        item_doc = self.get_item_doc()

        doctype = item_doc.ref_doctype
        name = item_doc.ref_docname

        errmsg = translate("This Item cannot be used as it does "
                           "not have a Product Profile")

        if not doctype or not name:
            frappe.throw(errmsg)

        errmsg = translate(
            "This Item cannot be used as its "
            "references to a Product Profile does not exist anymore")

        if not database.exists(doctype, name):
            frappe.throw(errmsg)
コード例 #19
0
    def get_docfield(cls, label, fieldtype="Data", options="", length=100):
        kwargs = {
            "label": translate(label),
            "fieldtype": fieldtype,
            "options": options,
            "length": length,
        }

        return "{label}:{fieldtype}/{options}:{length}" \
            .format(**kwargs)
コード例 #20
0
ファイル: __init__.py プロジェクト: YefriTavarez/peark
def make_sales_quotation(source_name, target_doc=None):
    cost_estimation = database.get_value("Cost Estimation",
                                         source_name,
                                         ["generated_on", "valid_until"],
                                         as_dict=1)
    if cost_estimation.valid_until and (
            cost_estimation.valid_until < cost_estimation.generated_on
            or cost_estimation.valid_until < getdate(nowdate())):
        frappe.throw(translate("Validity period of this quotation has ended."))
    return _make_sales_quotation(source_name, target_doc)
コード例 #21
0
    def get_item_doc(self):
        doctype = "Item"
        name = self.item_code

        errmsg = translate("Item Code is missing")

        if not name:
            frappe.throw(errmsg)

        return frappe.get_doc(doctype, name)
コード例 #22
0
    def get_formatted_field(label, fieldtype="Data", options=str(), length=120):
        kwargs = {
            "label": translate(label),
            "fieldtype": fieldtype,
            "options": options,
            "length": length,
        }

        return "{label}:{fieldtype}/{options}:{length}" \
            .format(**kwargs)
コード例 #23
0
    def get_planning_mission_template(self):
        errmsg = translate("Missing value for Planning Template")
        if not self.planning_mission_template:
            frappe.throw(errmsg)

        doctype = self.meta.get_field("planning_mission_template") \
            .options

        name = self.planning_mission_template

        return frappe.get_doc(doctype, name)
コード例 #24
0
    def get_product_assembly(self):
        item_doc = self.get_item_doc()

        doctype = item_doc.ref_doctype
        name = item_doc.ref_docname

        errmsg = translate("Product Assembly not found for Item: {}")
        if not database \
                .exists(doctype, name):
            frappe.throw(errmsg.format(item_doc.name))

        return frappe.get_doc(doctype, name)
コード例 #25
0
    def validate_field_value(self, fieldname, datasource,
                             childfieldname, istable=False):

        value = self.get(fieldname)

        if not value:
            return True

        items = self.product_profile_doc \
            .get(datasource, list())

        item_list = (d.get(childfieldname) for d in items)

        if istable:
            for d in self.get(fieldname):
                value = d.get(childfieldname)

                if value in item_list:
                    continue
                break
            else:
                return True
        else:
            if value in item_list:
                return True

        label = self.meta.get_field(fieldname) \
            .label

        translated_label = translate(label)

        err_msg = translate(
            "The selected {} {} is not defined in the "
            "Product Profile. Please check!")

        frappe.throw(err_msg
                     .format(translated_label,
                             bold(value)
                             )
                     )
コード例 #26
0
ファイル: item.py プロジェクト: YefriTavarez/peark
def update_item_group(doc):
    item_group = doc.item_group_5 \
        or doc.item_group_4 \
        or doc.item_group_3 \
        or doc.item_group_2 \
        or doc.item_group_1

    errmsg = translate("Missing Item Group on Item {}: {}")
    if not item_group:
        frappe.throw(errmsg.format(doc.name, doc.item_name))

    doc.item_group = item_group
    doc.db_update()
コード例 #27
0
    def get_paperboard_name(self):
        if not self.paperboard:
            return translate("No Material")

        doctype = self.meta \
            .get_field("paperboard") \
            .options

        name = self.paperboard

        doc = frappe.get_doc(doctype, name)

        return doc \
            .get_full_name(ignore_trademark=True)
コード例 #28
0
    def update_projects(self, autocommit=True, force=False):
        if not force:
            return False

        status_list = list()

        def update_child_project(project):
            doctype = "Project"
            name = project.project

            fieldname = "status"

            value = frappe.get_value(doctype, name, fieldname)

            if value != project.status:
                project.set(fieldname, value)
                project.db_update()

            return project.status

        # remember project center status
        prev_status = self.status

        for project in self.projects:
            status = update_child_project(project=project)

            status_list.append(status)

        # just a bit of config
        status_change_comment = translate("Set to {}")

        if all(status == "Completed" for status in status_list):
            self.status = "Completed"
        else:
            if "Delayed" in status_list:
                self.status = "Delayed"
            else:
                self.status = "Open"

        if prev_status != self.status:
            comment = status_change_comment \
                .format(self.status)

            self.add_comment("Edit", comment)

            self.db_update()

        if autocommit:
            frappe.db.commit()
コード例 #29
0
    def validate_item_agaist_product_assembly(self):
        fields = ("ref_doctype", "ref_docname")

        doctype = "Item"
        name = self.item

        ref_doctype, ref_docname = database \
            .get_value(doctype, name, fields)

        field = self.meta.get_field("product_assembly")

        errmsg = translate("Item: {} is not a type of Product Assembly: {}")
        if field.options != ref_doctype \
                or self.product_assembly != ref_docname:
            frappe.throw(errmsg.format(name, self.product_assembly))
コード例 #30
0
    def get_compound_product(self, throw_error=True):
        if not self.is_compound_product:
            if throw_error:
                err_msg = translate(
                    "Product Assembly must be a marked as Compound Product")

                frappe.throw(err_msg)

            return False

        doctype = "Compound Product"
        filters = {
            "product_profile": self.product_profile,
            "product_assembly": self.name,
        }

        if not database.exists(doctype, filters):
            err_msg = translate(
                "A Compound Product linked to this "
                "Product Assembly does not exist")

            frappe.throw(err_msg)

        return frappe.get_doc(doctype, filters)