master
Glueck Martin 2024-05-23 10:06:25 +02:00
parent d285fbf2bb
commit 4e5ee2cf59
4 changed files with 72 additions and 8 deletions

View File

@ -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"
)
)

View File

@ -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 \

View File

@ -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 ()

View File

@ -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)