import time from netforce.model import Model, fields, get_model from netforce.access import get_active_company, get_active_user, set_active_user class Dialyzer(Model): _name="clinic.dialyzer" _string="Dialyzer" _audit_log=True _name_field="number" _multi_company=True _fields={ "number": fields.Char("Number",required=True,search=True), "description": fields.Text("Description",search=True), "date": fields.Date("Create Date",search=True), "use_time": fields.Integer("Use Time"), "max_use_time": fields.Integer("Max Use Time"), "exp_date": fields.Date("Expiry Date",search=True), "patient_id": fields.Many2One("clinic.patient","Patient"), "member_type": fields.Selection([("unsub","Unsub cellul"),("sub","Sub cellul"),("synthetic","Synthetic")],"Membrane Type"), "dialyzer_type": fields.Selection([("low","low flux"),("high","high flux"),("dbl","dbl hifulx")],"Dialyzer Type"), "bid_flow_rate": fields.Integer("Bid Flow Rate (ml/min)",search=True), "ultrafittration": fields.Float("Ultrafittration Kg.",search=True), "state": fields.Selection([("new","New"),("active","Active"),("drop","Drop"),('cancelled','Cancelled')],"Status"), "comments": fields.One2Many("message","related_id","Comments"), "company_id": fields.Many2One("company","Company"), 'product_id': fields.Many2One("product", "Product",required=True), "pickings": fields.One2Many("stock.picking","related_id","Pickings"), } def _get_number(self,context={}): while 1: seq_id=get_model("sequence").find_sequence(name="Clinic Dializer") num=get_model("sequence").get_next_number(seq_id,context=context) if not num: return None user_id=get_active_user() set_active_user(1) res=self.search([["number","=",num]]) set_active_user(user_id) if not res: return num get_model("sequence").increment_number(seq_id,context=context) _defaults={ "state": "new", "date": lambda *a: time.strftime("%Y-%m-%d"), "number": _get_number, "max_use_time": 10, "use_time": 0, "company_id": lambda *a: get_active_company(), 'product_id': 48, # TODO search product with categ name is "Dialyzer" } _order="date desc,number desc" def void(self,ids,context={}): obj=self.browse(ids)[0] obj.write({"state":"voided"}) def confirm(self,ids,context={}): id=ids[0] obj=self.browse(id) prod=obj.product_id ship_address_id=0 #TODO contract address pick_vals={ "type": "out", "ref": obj.number, "related_id": "clinic.dialyzer,%s"%obj.id, "partner_id": obj.patient_id.partner_id.id, "ship_address_id": ship_address_id, "lines": [], "state": "draft", } res=get_model("stock.location").search([["type","=","customer"]]) if not res: raise Exception("Customer location not found") cust_loc_id=res[0] wh_loc_id=prod.location_id.id if not wh_loc_id: res=get_model("stock.location").search([["type","=","internal"]]) if not res: raise Exception("Warehouse not found") wh_loc_id=res[0] line_vals={ "product_id": prod.id, "qty": 1, "uom_id": prod.uom_id.id, "location_from_id": wh_loc_id, "location_to_id": cust_loc_id, } pick_vals["lines"].append(("create",line_vals)) if not pick_vals["lines"]: return { "flash": "Nothing left to deliver", } pick_id=get_model("stock.picking").create(pick_vals,context={"pick_type": "out"}) pick=get_model("stock.picking").browse(pick_id) print("Done!") Dialyzer.register()