diff --git a/App_State.py b/App_State.py index 497949a..5eda9ce 100644 --- a/App_State.py +++ b/App_State.py @@ -22,6 +22,9 @@ class App_State : , 30 : "CNC generation started" , 35 : "CNC generation finished" , 40 : "Odoo Freigabe" + , 100 : "Article created" + , 110 : "Order Line created" + , 111 : "Order Line updated" } @classmethod def Create_Action (cls, kind, text, order = None) : @@ -51,7 +54,7 @@ class App_State : lh.setLevel (level) lh.setFormatter \ ( logging.Formatter - ( "%(asctime)s - %(levelname)s - %(message)s" + ( "%(asctime)s - %(message)s" , datefmt = "%Y-%m-%d %H:%M:%S" ) ) diff --git a/Order_Display.py b/Order_Display.py index ef319ce..49ef304 100644 --- a/Order_Display.py +++ b/Order_Display.py @@ -132,7 +132,7 @@ class Order_List (_With_Table_Widget_) : bno = row_data [0].text () with schema.orm.db_session () : state = schema.State.get () - order = schema.Order.get (basket_no = bno) + order = schema.Order.get (basket_no = bno, active = True) if order.state < 20 : order.state = 20 self.update_order (order, False, row_data [0].row ()) @@ -153,12 +153,13 @@ class Order_List (_With_Table_Widget_) : # end def _open_order_in_cad def _wait_for_cad_close (self, basket_no) : + App_State.L.info ("Auftrag %s im CAD geöffnet", basket_no) p = self._cad_processes [basket_no] while p.poll () is None : time.sleep (.5) del self._cad_processes [basket_no] with schema.orm.db_session () : - order = schema.Order.get (basket_no = basket_no) + order = schema.Order.get (basket_no = basket_no, active = True) order.state = 10 self.update_order (order, False) App_State.Create_Action \ @@ -166,6 +167,7 @@ class Order_List (_With_Table_Widget_) : , f"IMOS CAD closed {order.basket_no}: Error code {p.poll ()}" , order ) + App_State.L.info ("CAD für Auftrag %s beendet", basket_no) # end def _wait_for_cad_close def _start_recreate_cnc (self) : @@ -185,7 +187,7 @@ class Order_List (_With_Table_Widget_) : """ with schema.orm.db_session () : state = schema.State.get () - order = schema.Order.get (basket_no = bno) + order = schema.Order.get (basket_no = bno, active = True) job_file_name = ( pathlib.Path (state.imos_sim_root) / App_State.sim_batches / f"{bno}.xml" @@ -229,7 +231,7 @@ class Order_List (_With_Table_Widget_) : else : text = f"CNC Erzeugung für {basket_no} abgeschlossen" with schema.orm.db_session () : - order = schema.Order.get (basket_no = basket_no) + order = schema.Order.get (basket_no = basket_no, active = True) order.state = 10 self.update_order (order, False) App_State.Create_Action (35, text, order) @@ -255,7 +257,7 @@ class Order_List (_With_Table_Widget_) : bno = row_data [0].text () with schema.orm.db_session () : state = schema.State.get () - order = schema.Order.get (basket_no = bno) + order = schema.Order.get (basket_no = bno, active = True) factory = pathlib.Path (state.imos_factory_root) for ext in ".xml", ".txt" : sf = factory / App_State.imos_done_dir / f"{bno}{ext}" @@ -273,7 +275,7 @@ class Order_List (_With_Table_Widget_) : if row_data : bno = row_data [0].text () with schema.orm.db_session () : - order = schema.Order.get (basket_no = bno) + order = schema.Order.get (basket_no = bno, active = True) Action_Dialog \ (order.actions.order_by (schema.orm.desc (schema.Action.date))).exec () # end def _show_actions @@ -292,7 +294,7 @@ class Order_List (_With_Table_Widget_) : if r == QtWidgets.QMessageBox.No : return with schema.orm.db_session () : - order = schema.Order.get (basket_no = bno) + order = schema.Order.get (basket_no = bno, active = True) order.state = 10 self.update_order (order, False) App_State.Create_Action \ diff --git a/designbox_orders.py b/designbox_orders.py index 1717f43..a1f485e 100644 --- a/designbox_orders.py +++ b/designbox_orders.py @@ -132,9 +132,66 @@ class Order_Processing (Main_Window) : f"Auftrag geändert fom XML {basket_no}" , order = order ) + self._scan_order_pos (order, xml) order.active = True # end def _update_order_in_database + def _scan_order_pos (self, order, xml) : + bl = xml.xpath ("//BuilderList") [0] + changes = 0 + for a in bl.getchildren () : + art_name = a.xpath ("Pname") [0].text.strip () + count = int (a.xpath ("Count") [0].text) + pos = a.get ("LineNo") + text = a.xpath ("ARTICLE_TEXT_INFO1" ) [0].text.strip () + price = float (a.xpath ("ARTICLE_PRICE_INFO1") [0].text) + article = schema.Odoo_Article.get (name = art_name) + if not article : + article = schema.Odoo_Article \ + ( name = art_name + , default_text = art_name + , default_price = 0 + ) + App_State.Create_Action \ + ( 100 + , f"Artikel {art_name} wurde in der Datenbank angelegt" + , order + ) + order_line = schema.Order_Line.get (order = order, position = pos) + if not order_line : + order_line = schema.Order_Line \ + ( order = order + , position = pos + , count = count + , text = text + , price = price + , odoo_article = article + ) + App_State.Create_Action \ + ( 110 + , f"Auftragszeile {pos} für {order.basket_no} wurde in der " + "Datenbank angelegt" + , order + ) + changes += 1 + else : + if ( (order_line.text != text) + or (order_line.count != count) + or (order_line.price != price) + ) : + print ("Update") + order_line.text = text + order_line.price = price + order_line.count = count + changes += 1 + App_State.Create_Action \ + ( 111 + , f"Auftragszeile {pos} für {order.basket_no} wurde " + "in der Datenbank geändert" + , order + ) + # end def _scan_order_pos + def _restore_settings (self) : super ()._restore_settings () sp = self.centralWidget () diff --git a/schema.py b/schema.py index 21afffd..ebb03f1 100644 --- a/schema.py +++ b/schema.py @@ -81,6 +81,8 @@ class Odoo_Article (db.Entity) : class Order_Line (db.Entity) : order = orm.Required (Order) + position = orm.Required (str) + count = orm.Required (int) text = orm.Required (str) price = orm.Required (float) odoo_article = orm.Required (Odoo_Article)