Exemplo n.º 1
0
class Rule(Model):
    _name = "wkf.rule"
    _string = "Workflow Rule"
    _name_field = "description"
    _fields = {
        "trigger_model_id":
        fields.Many2One("model", "Trigger Model", required=True, search=True),
        "trigger_event":
        fields.Char("Trigger Event", required=True, search=True),
        "condition_method":
        fields.Char("Condition Method"),
        "condition_args":
        fields.Text("Condition Arguments"),
        "action_model_id":
        fields.Many2One("model", "Action Model", required=True, search=True),
        "action_method":
        fields.Char("Action Method", required=True),
        "action_args":
        fields.Text("Action Arguments"),
        "description":
        fields.Text("Rule Description", search=True),
        "comments":
        fields.One2Many("message", "related_id", "Comments"),
        "state":
        fields.Selection([["active", "Active"], ["inactive", "Inactive"]],
                         "Status",
                         required=True,
                         search=True),
        "error":
        fields.Text("Error Message"),
    }
    _order = "trigger_model_id.name,trigger_event,action_model_id.name,action_method"
    _defaults = {
        "state": "active",
    }
class BatchImportSaleInvoice(Model):
    _name = "batch.import.sale.invoice"
    _fields = {
        "import_id":
        fields.Many2One("batch.import",
                        "Import",
                        required=True,
                        on_delete="cascade"),
        "date":
        fields.Date("Date", required=True),
        "number":
        fields.Text("Invoice No."),
        "contact":
        fields.Char("Customer Name"),
        "description":
        fields.Text("Description"),
        "amount":
        fields.Decimal("Amount"),
        "account_id":
        fields.Many2One("account.account", "Income Account"),
        "tax_id":
        fields.Many2One("account.tax.rate", "Tax Rate"),
        "invoice_id":
        fields.Many2One("account.invoice", "Invoice"),
    }
Exemplo n.º 3
0
class OpportCompet(Model):
    _name = "opport.compet"
    _string = "Opportunity Competitor"
    _fields = {
        "opport_id": fields.Many2One("sale.opportunity", "Opportunity"),
        "compet_id": fields.Many2One("competitor", "Competitor"),
        "strengths": fields.Text("Strengths"),
        "weaknesses": fields.Text("Weaknesses"),
        "comments": fields.One2Many("message", "related_id", "Comments"),
    }
Exemplo n.º 4
0
class ContactCateg(Model):
    _name = "contact.categ"
    _string = "Contact Category"
    _key = ["code"]
    _name_field = "name"
    _fields = {
        "name": fields.Char("Category Name", required=True, search=True),
        "code": fields.Char("Category Code", search=True),
        "parent_id": fields.Many2One("contact.categ", "Parent", search=True),
        "description": fields.Text("Description"),
        "comments": fields.One2Many("message", "related_id", "Comments"),
        "full_name": fields.Char("Full Name", function="get_full_name"),
    }
    _order = "code"

    def get_full_name(self, ids, context={}):
        vals = {}
        for obj in self.browse(ids):
            n = obj.name
            p = obj.parent_id
            while p:
                n = p.name + " / " + n
                p = p.parent_id
            vals[obj.id] = n
        return vals
Exemplo n.º 5
0
class Website(Model):
    _name = "website"
    _string = "Website"
    _fields = {
        "name": fields.Char("Website Title"),
        "parent_categ_id": fields.Many2One("product.categ", "Product Category"),
        "parent_group_id": fields.Many2One("product.group", "Product Group"),
        "contact_categ_id": fields.Many2One("contact.categ", "Customer Contact Category"),
        "user_profile_id": fields.Many2One("profile", "Customer User Profile"),
        "sale_account_id": fields.Many2One("account.account", "Sales Account"),
        "sale_tax_id": fields.Many2One("account.tax.rate", "Sales Tax"),
        "account_receivable_id": fields.Many2One("account.account", "Receivable Account"),
        "news_categ_id": fields.Many2One("contact.categ", "Newsletter Contact Category"),
        "target_list_id": fields.Many2One("mkt.target.list", "Newsletter Target List"),
        "invoice_flag": fields.Boolean("Use same invoice number as sale order number"),
        "ship_product_id": fields.Many2One("product", "Shipping Product"),
        "preview_doc_categ_id": fields.Many2One("document.categ", "Preview picture document category"),
        "invoice_template_id": fields.Many2One("report.template", "Invoice Template"),
        "payment_slip_template_id": fields.Many2One("report.template", "Payment Slip Template"),
        "auto_create_account": fields.Boolean("Auto-create customer account after checkout"),
        "ga_script": fields.Text("Google Analytic script"),
        "state": fields.Selection([["active", "Active"], ["inactive", "Inactive"]], "Status", required=True),
        "theme_id": fields.Many2One("theme", "Theme"),
        "settings": fields.One2Many("website.setting","website_id","Website Settings"),
        "sale_channel_id": fields.Many2One("sale.channel","Sales Channel"),
        "bank_method_id": fields.Many2One("payment.method","Bank Transfer",condition=[["type","=","bank"]]),
        "paypal_method_id": fields.Many2One("payment.method","Paypal",condition=[["type","=","paypal"]]),
        "paysbuy_method_id": fields.Many2One("payment.method","Paysbuy",condition=[["type","=","paysbuy"]]),
        "scb_method_id": fields.Many2One("payment.method","SCB Gateway",condition=[["type","=","scb_gateway"]]),
        "url": fields.Char("Website URL"),
    }
    _order="name"
    _defaults = {
        "state": "active",
    }
Exemplo n.º 6
0
class ProductBrand(Model):
    _name = "product.brand"
    _string = "Brand"
    _fields = {
        "name": fields.Char("Name", required=True, search=True),
        "description": fields.Text("Description", search=True),
        "image": fields.File("Image"),
        "code": fields.Char("Code"),
        "parent_id": fields.Many2One("product.brand","Parent Brand"),
        "sub_brands": fields.One2Many("product.brand","parent_id","Sub Brands"),
        "products": fields.One2Many("product","brand_id","Products", operator="child_of"),
        "num_products": fields.Integer("Number of products", function="get_num_products"),
        "groups": fields.Many2Many("product.brand.group","Group"),
    }
    _order = "name"

    def get_num_products(self, ids, context={}):
        vals = {}
        for obj in self.browse(ids):
            nums = 0
            for product in obj.products:
                if not product.parent_id:
                    nums += 1
            vals[obj.id] = nums
        return vals 
class CustomOption(Model):
    _name = "product.custom.option"
    _string = "Custom Option"
    _key = ["code"]
    _fields = {
        "name":
        fields.Char("Name", required=True, search=True, translate=True),
        "seq":
        fields.Char("Sequence", required=True),
        "code":
        fields.Char("Code", search=True),
        "type":
        fields.Selection([["text", "Text"], ["selection", "Selection"]],
                         "Type",
                         required=True),
        "required":
        fields.Boolean("Required"),
        "description":
        fields.Text("Description"),
        "price":
        fields.Decimal("Price"),
        "values":
        fields.One2Many("product.custom.option.value", "cust_opt_id",
                        "Values"),
    }
    _defaults = {
        "type": "text",
        "seq": '0',
    }
Exemplo n.º 8
0
class BarcodeIssueLine(Model):
    _name = "barcode.issue.line"
    _transient = True
    _fields = {
        "wizard_id":
        fields.Many2One("barcode.issue",
                        "Wizard",
                        required=True,
                        on_delete="cascade"),
        "product_id":
        fields.Many2One("product", "Product", required=True),
        "qty":
        fields.Decimal("Qty", required=True),
        "uom_id":
        fields.Many2One("uom", "UoM", required=True),
        "qty2":
        fields.Decimal("Secondary Qty"),
        "lot_id":
        fields.Many2One("stock.lot", "Lot / Serial Number"),
        "container_from_id":
        fields.Many2One("stock.container", "From Container"),
        "container_to_id":
        fields.Many2One("stock.container", "To Container"),
        "location_from_id":
        fields.Many2One("stock.location", "From Location"),
        "location_to_id":
        fields.Many2One("stock.location", "To Location"),
        "related_id":
        fields.Reference([["sale.order", "Sales Order"],
                          ["purchase.order", "Purchase Order"]], "Related To"),
        "qty2":
        fields.Decimal("Qty2"),
        "notes":
        fields.Text("Notes"),
    }
Exemplo n.º 9
0
class TaskTemplate(Model):
    _name = "task.template"
    _string = "Task Template"
    _name_field = "description"
    _fields = {
        "job_template_id":
        fields.Many2One("job.template", "Job Template",
                        on_delete="cascade"),  # XXX: deprecated
        "task_list_template_id":
        fields.Many2One("task.list.template",
                        "Task List Template",
                        required=True,
                        on_delete="cascade"),
        "sequence":
        fields.Integer("Sequence"),
        "title":
        fields.Char("Title", required=True),
        "description":
        fields.Text("Description"),
        "duration":
        fields.Integer("Duration (Days)", required=True),
        "start_after":
        fields.Integer("Start After (Days)"),
    }
    _order = "task_list_template_id.name,sequence"
Exemplo n.º 10
0
class customerMessage(Model):
    _name = "cms.customer.message"
    _fields = {
        "name": fields.Char("Name", required=True),
        "email": fields.Char("Email", required=True),
        "description": fields.Text("Description", required=True),
    }
Exemplo n.º 11
0
class Page(Model):
    _name = "cms.page"
    _string = "Page"
    _name_field = "title"
    _fields = {
        "title":
        fields.Char("Title", required=True, translate=True, search=True),
        "code":
        fields.Char("Code", required=True, search=True),
        "body":
        fields.Text("Body", translate=True),
        "blocks":
        fields.One2Many("cms.block", "related_id", "Blocks"),
        "comments":
        fields.One2Many("message", "related_id", "Comments"),
        "meta_description":
        fields.Char("Meta Description"),
        "meta_keywords":
        fields.Char("Meta Keywords"),
        "template":
        fields.Char("Template"),
        "state":
        fields.Selection([["active", "Active"], ["inactive", "Inactive"]],
                         "Status",
                         required=True),
    }
    _defaults = {
        "state": "active",
    }
Exemplo n.º 12
0
class RequiredDoc(Model):
    _name = "required.doc"
    _string = "Required Document"
    _fields = {
        "name": fields.Text("Document Name", required=True),
        "related_id": fields.Reference([], "Related To"),
    }
Exemplo n.º 13
0
class SaleCost(Model):
    _name = "sale.cost"
    _string = "Cost"
    _fields = {
        "sale_id": fields.Many2One("sale.order","Sales Order",required=True,on_delete="cascade"),
        "sequence": fields.Char("Apply To Item No."),
        "product_id": fields.Many2One("product","Cost Product"),
        "description": fields.Text("Description",required=True,search=True),
        "unit_price": fields.Decimal("Unit Price"), # XXX deprecated
        "list_price": fields.Decimal("Supplier List Price"),
        "purchase_price": fields.Decimal("Purchase Price"),
        "purchase_duty_percent": fields.Decimal("Import Duty (%)"),
        "purchase_ship_percent": fields.Decimal("Shipping Charge (%)"),
        "landed_cost": fields.Decimal("Landed Cost"),
        "qty": fields.Decimal("Qty"),
        "uom_id": fields.Many2One("uom","UoM"), # XXX deprecated
        "amount": fields.Decimal("Cost Amount",function="get_amount"),
        "currency_id": fields.Many2One("currency","Currency"),
        "currency_rate": fields.Decimal("Currency Rate"), # XXX: deprecated
        "supplier_id": fields.Many2One("contact","Supplier"),
    }

    def get_amount(self,ids,context={}):
        vals={}
        for obj in self.browse(ids):
            vals[obj.id]=(obj.qty or 0)*(obj.landed_cost or 0)
        return vals
Exemplo n.º 14
0
class InlineHelp(Model):
    _name = "inline.help"
    _string = "Help Item"
    _fields = {
        "action": fields.Char("Action Name", required=True, search=True),
        "title": fields.Char("Help Title", required=True, search=True),
        "content": fields.Text("Help Content", required=True, search=True),
        "hide": fields.Boolean("Hide"),
        "create_date": fields.DateTime("Date Created"),
        "modif_date": fields.DateTime("Date Modified"),
    }
    _order = "title"
    _defaults = {
        "create_date": lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"),
        "modif_date": lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"),
    }

    def create(self, vals, **kw):
        res = super().create(vals, **kw)
        static.clear_translations()  # XXX: rename this
        return res

    def write(self, ids, vals, **kw):
        super().write(ids, vals, **kw)
        static.clear_translations()  # XXX: rename this

    def delete(self, ids, **kw):
        super().delete(ids, **kw)
        static.clear_translations()  # XXX: rename this
Exemplo n.º 15
0
class EmailReject(Model):
    _name = "email.reject"
    _string = "Reject Email"
    _fields = {
        "email":
        fields.Char("Email", required=True, search=True),
        "reason":
        fields.Selection([["bounced", "Bounced"], ["rejected", "Rejected"],
                          ["unsubscribed", "Unsubscribed"],
                          ["complained", "Complained"], ["other", "Other"]],
                         "Reason",
                         search=True),
        "details":
        fields.Text("Details"),
        "date":
        fields.Date("Date Created", required=True, search=True),
    }
    _order = "date desc"
    _defaults = {
        "date": time.strftime("%Y-%m-%d %H:%M:%S"),
    }

    def add_to_black_list(self, email, reason):
        res = self.search([["email", "=", email]])
        if res:
            return
        vals = {
            "email": email,
            "reason": reason,
        }
        self.create(vals)
Exemplo n.º 16
0
class JobLine(Model):
    _name = "job.line"
    _fields = {
        "job_id":
        fields.Many2One("job", "Job", required=True, on_delete="cascade"),
        "sequence":
        fields.Integer("Sequence"),
        "type":
        fields.Selection(
            [["labor", "Labor"], ["part", "Parts"], ["other", "Other"]],
            "Type"),
        "description":
        fields.Text("Description"),
        "product_id":
        fields.Many2One("product", "Product"),
        "qty":
        fields.Decimal("Qty"),
        "uom_id":
        fields.Many2One("uom", "UoM"),
        "unit_price":
        fields.Decimal("Sale Unit Price"),
        "amount":
        fields.Decimal("Sale Amount", function="get_amount"),
        "payment_type":
        fields.Selection([["contract", "Included In Contract"],
                          ["job", "Not Included In Contract"]],
                         "Payment Type"),
    }
    _order = "sequence,id"

    def get_amount(self, ids, context={}):
        vals = {}
        for obj in self.browse(ids):
            vals[obj.id] = (obj.qty or 0) * (obj.unit_price or 0)
        return vals
Exemplo n.º 17
0
class FixedAssetType(Model):
    _name = "account.fixed.asset.type"
    _string = "Asset Type"
    _fields = {
        "name":
        fields.Char("Name", required=True, search=True),
        "dep_rate":
        fields.Decimal("Depreciation Rate (%)", search=True, required=True),
        "dep_method":
        fields.Selection(
            [["line", "Straight Line"], ["decline", "Declining Balance"]],
            "Depreciation Method",
            search=True,
            required=True),
        "fixed_asset_account_id":
        fields.Many2One("account.account",
                        "Fixed Asset Account",
                        required=True),
        "accum_dep_account_id":
        fields.Many2One("account.account",
                        "Accum. Depr. Account",
                        required=True),
        "dep_exp_account_id":
        fields.Many2One("account.account", "Depr. Exp. Account",
                        required=True),
        "description":
        fields.Text("Description"),
    }
Exemplo n.º 18
0
class Report(Model):
    _name = "report.custom"
    _name_field = "Custom Report"
    _fields = {
        "name": fields.Char("Report Name", required=True),
        "code": fields.Char("Report Code"),
        "config": fields.Text("Configuration Data"),
    }
Exemplo n.º 19
0
class ShipTerm(Model):
    _name = "ship.term"
    _string = "Shipping Terms"
    _fields = {
        "name": fields.Char("Name", required=True),
        "description": fields.Text("Description"),
    }
    _order = "name"
Exemplo n.º 20
0
class WebsiteSetting(Model):
    _name = "website.setting"
    _string = "Website Setting"
    _fields = {
        "website_id": fields.Many2One("website", "Website", required=True),
        "name": fields.Char("Setting Name", required=True),
        "value": fields.Text("Setting Value"),
    }
Exemplo n.º 21
0
class Team(Model):
    _name = "mfg.team"
    _string = "Team"
    _fields = {
        "name": fields.Char("Team Name", search=True, required=True),
        "description": fields.Text("Description"),
    }
    _order = "name"
Exemplo n.º 22
0
class Room(Model):
    _name = "room"
    _string = "Room"
    _fields = {
        "name": fields.Char("Name", search=True),
        "description": fields.Text("Description"),
        "comments": fields.One2Many("message", "related_id", "Comments")
    }
Exemplo n.º 23
0
class CompanyType(Model):
    _name = "company.type"
    _string = "Company Type"
    _key = ["name"]
    _fields = {
        "name": fields.Char("Name", required=True, search=True),
        "description": fields.Text("Description"),
    }
    _order = "name"
Exemplo n.º 24
0
class TranslationField(Model):
    _name = "translation.field"
    _fields = {
        "model": fields.Char("Model", required=True),
        "field": fields.Char("Field", required=True),
        "rec_id": fields.Integer("Record ID", required=True),
        "lang": fields.Selection([["zh_CN", "Chinese"], ["en_US", "English"], ["my_MM", "Myanmar"], ["th_TH", "Thai"]], "Language", required=True),
        "translation": fields.Text("Translation"),
    }
Exemplo n.º 25
0
class SmsTemplate(Model):
    _name = "sms.template"
    _string = "SMS Template"
    _name_field = "sender"
    _fields = {
        "name": fields.Char("Template Name", required=True, search=True),
        "phone": fields.Char("Phone Number",
                             required=True,
                             size=256,
                             search=True),
        "body": fields.Text("Body", search=True),
        "account_id": fields.Many2One("sms.account", "SMS Account"),
    }
    _order = "name"

    def create_sms(self,
                   ids,
                   data={},
                   name_id=None,
                   related_id=None,
                   context={}):
        print("SMSTemplate.create_sms", ids)
        obj = self.browse(ids)[0]
        try:
            phone = render_template(obj.phone or "", data)
        except:
            raise Exception("Failed to render 'Phone' in template: %s" %
                            obj.name)
        try:
            body = render_template(obj.body or "", data)
        except:
            raise Exception("Failed to render 'Body' in template: %s" %
                            obj.name)
        if obj.related and not related_id:
            try:
                related_id = render_template(obj.related or "", data)
            except:
                raise Exception(
                    "Failed to render 'Related To' in template: %s" % obj.name)
        if obj.contact and not name_id:
            try:
                name_id = render_template(obj.contact or "", data)
            except:
                raise Exception("Failed to render 'Contact' in template: %s" %
                                obj.name)
        else:
            name_id = None
        vals = {
            "date": time.strftime("%Y-%m-%d %H:%M:%S"),
            "phone": phone,
            "body": body,
            "state": "to_send",
            "account_id": obj.account_id.id,
        }
        print("vals", vals)
        sms_id = get_model("sms.message").create(vals)
        return sms_id
Exemplo n.º 26
0
class ContactRelationType(Model):
    _name = "contact.relation.type"
    _string = "Relation Type"
    _fields = {
        "name": fields.Char("Name", required=True, search=True),
        "description": fields.Text("Description"),
        "comments": fields.One2Many("message", "related_id", "Comments"),
    }
    _order = "name"
Exemplo n.º 27
0
class Bank(Model):
    _name = "bank"
    _string = "Bank"
    _key = ["name"]
    _fields = {
        "name": fields.Char("Name", required=True, search=True),
        "description": fields.Text("Description"),
    }
    _order = "name"
Exemplo n.º 28
0
class Application(Model):
    _name = "service.application"
    _string = "Application"
    _fields = {
        "name": fields.Char("Name", required=True, search=True),
        "code": fields.Char("Code", required=True, search=True),
        "industry_id": fields.Many2One("industry", "Industry", search=True),
        "description": fields.Text("Description", search=True),
    }
    _order = "name"
Exemplo n.º 29
0
class StoreType(Model):
    _name = "store.type"
    _string = "Storage Type"
    _fields = {
        "name": fields.Char("Name", required=True),
        "code": fields.Char("Code"),
        "description": fields.Text("Description"),
        "comments": fields.One2Many("message", "related_id", "Comments"),
    }
    _order = "name"
Exemplo n.º 30
0
class Leave_type(Model):
    _name = "hr.leave.type"
    _string = "Leave Type"
    _key = ["name"]
    _fields = {
        "name": fields.Char("Name", search=True),
        "description": fields.Text("Description"),
        "comments": fields.One2Many("message", "related_id", "Comments"),
        "employees": fields.Many2Many("hr.employee", "Employees"),
    }