Odoo-bacode
(→chercher le packaging id qui correspond) |
(→ajout d'un script python "chapeau" lancé depuis le .bashrc) |
||
| (4 révisions intermédiaires par un utilisateur sont masquées) | |||
| Ligne 1 : | Ligne 1 : | ||
| + | = modification des données exportées depuis camduct = | ||
| + | Il me faut une référence dans le desc pour associé le devis avec une référence unique. | ||
| + | |||
| + | Je remplace le premier champ extrait qui ne sert pas pour mettre "N° d'article" | ||
| + | |||
= Avec ou sans fabrication = | = Avec ou sans fabrication = | ||
| Ligne 55 : | Ligne 60 : | ||
== chercher le packaging id qui correspond == | == chercher le packaging id qui correspond == | ||
| + | |||
| + | = ajout d'un script python "chapeau" lancé depuis le .bashrc = | ||
| + | ceci permet avec un auto login du user de lancer le script au boot du raspberry sur tty 0. | ||
| + | |||
| + | Ajouter à la fin du .bashrc | ||
| + | <pre> | ||
| + | tput setaf 2 | ||
| + | echo "" | ||
| + | echo Bonjour | ||
| + | echo "" | ||
| + | echo FACLIM SCAN : Livraison | ||
| + | echo "" | ||
| + | tput setaf tput sgr0 | ||
| + | python /usr/src/...../read-barcode.py | ||
| + | </pre> | ||
| + | |||
| + | = config de l'ecran = | ||
| + | https://trickiknow.com/raspberry-pi-3-complete-tutorial-2018-lets-get-started/ | ||
= un peu de code = | = un peu de code = | ||
| + | Va donc voir dans ton gitlab au moins c'est à jour ! | ||
| + | |||
<pre> | <pre> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Version actuelle en date du 28 octobre 2020 à 10:03
Sommaire |
modification des données exportées depuis camduct
Il me faut une référence dans le desc pour associé le devis avec une référence unique.
Je remplace le premier champ extrait qui ne sert pas pour mettre "N° d'article"
Avec ou sans fabrication
Dans l'inventaire on a 3 onglets. L'un avec les opérations et un autre avec la demande initiale.
Malgré l'ajout du plugin ajoutant les descriptions des articles, les articles identiques restent groupés dans l'onglet "opérations".
L'idée consiste à gérer manuellement les approvisionnements à défaut de gérer la fabrication. Ainsi les produits restent en attente de disponibilité dans l'onglet "demande initiale" (il n'y a pas d'onglet "opérations").
Approvisionnements :
- Reserve products immediately after the sale order confirmation - Reserve products manually or based on automatic scheduler
On peut jouer sur les statuts dans la demande initiale.
- draft => "nouveau" bouton "a faire" en brouillon reproductible lors d'une duplication d'un ordre de transfert - confirmed => "attente de disponibilité" Premier état si on a bien indiquer qu'on voulait gérer les approvisionnements manuellement. - assigned => "disponible" Etat de départ si on décide que les produits sont réservé dès validation du devis. - done => "fait" - cancel => "annulé"
Mais ça ne suffit pas ... il faut aussi mettre les quantités tant dans la demande initiale que dans les opérations.
L'idée c'est d'aller chercher l'ID de l'article dans la demande initiale avec le numéro de devis et la description venant de camduct. Ensuite on peut retrouver l'id de pack_operation correspondant et aller l'update.
récupérer l'id de mouvement d'inventaire
res_id = models.execute_kw(
db, uid, password, 'stock.picking', 'search',
[[['origin','like',origin], ['state','!=', 'cancel'], ['state', '!=','done']]] # get all WH/OUT except cancel and done ones
)
récupérer la liste de mouvements de stock
Une ligne pas ligne de devis
move_lines = models.execute_kw(
db, uid, password, 'stock.picking', 'read',
[[res_id],["move_lines"]]
)
aller chercher dans les mouvements celui qui correspond a la bonne ligne de descriptif
delivery_ids_search = models.execute_kw(
db, uid, password, 'stock.move', 'search',
[[["product_description","like", desc], ["id", "=", move_lines]]]
)
print "delivery_ids_search", delivery_ids_search
prendre l'ID d'article qui correspond
chercher le packaging id qui correspond
ajout d'un script python "chapeau" lancé depuis le .bashrc
ceci permet avec un auto login du user de lancer le script au boot du raspberry sur tty 0.
Ajouter à la fin du .bashrc
tput setaf 2 echo "" echo Bonjour echo "" echo FACLIM SCAN : Livraison echo "" tput setaf tput sgr0 python /usr/src/...../read-barcode.py
config de l'ecran
https://trickiknow.com/raspberry-pi-3-complete-tutorial-2018-lets-get-started/
un peu de code
Va donc voir dans ton gitlab au moins c'est à jour !
#!/usr/bin/python
import xmlrpclib
import datetime
import json
common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
version = common.version()
uid = common.authenticate(db, username, password, {})
models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
# Get delivery ID from Product ID and Origin
origin="11507" # to be set externaly !!
origin=int(origin)
print "numero devis", origin
desc = "ID01" # to be defined externaly
print "desc", desc
# SEARCH res_id from stock.picking => the WH/OUT object
res_id = models.execute_kw(
db, uid, password, 'stock.picking', 'search',
[[['origin','like',origin], ['state','!=', 'cancel'], ['state', '!=','done']]] # get all WH/OUT except cancel and done ones
)
# go around on each and every reservation id (WH/OUT object)
for res_id in res_id:
#res_id = int(res_id)
print "res_id = ",res_id
# Get move lines (a line by product) from res_id
move_lines = models.execute_kw(
db, uid, password, 'stock.picking', 'read',
[[res_id],["move_lines"]]
)
#print "move_lines", move_lines
# translate into json
move_lines = json.dumps( move_lines[0] )
#print "move_lines", move_lines
# get the move_lines array from the json
data = json.loads(move_lines)
#print "move_lines data",data
move_lines = data['move_lines']
#print move_lines
# SEARCH into move_lines the product desc we need and UPDATE the move state.
delivery_ids_search = models.execute_kw(
db, uid, password, 'stock.move', 'search',
[[["product_description","like", desc], ["id", "=", move_lines]]]
)
#print "delivery_ids_search", delivery_ids_search
delivery_productID = models.execute_kw(
db,uid,password,'stock.move','read',[delivery_ids_search],{'fields': ['product_id']}
)
#print "delivery_productID =", delivery_productID
delivery_productID=json.dumps(delivery_productID[0])
#print "delivery_productID dumps =", delivery_productID
data = json.loads(delivery_productID)
#print "delivery_productID load =", data
delivery_productID = data['product_id']
#print "delivery_productID =",delivery_productID
delivery_productID = delivery_productID[0]
#print "delivery_productID =",delivery_productID
# sera sans doute utile qd on gerera la fabrication et un etat de disponibilite
#check_ids_status = models.execute_kw(
#db, uid, password, 'stock.move', 'read',[delivery_ids_search],{'fields': ['state']}
#)
#print "check_ids_status =", check_ids_status
#change_ids_status = models.execute_kw(
#db, uid, password, 'stock.move', 'write',[delivery_ids_search,{
#'state': "assigned",
#}]
#)
#print "change_ids_status = ", change_ids_status
#check_ids_status = models.execute_kw(
#db, uid, password, 'stock.move', 'read',[delivery_ids_search],{'fields': ['state']}
#)
#print "check_ids_status =", check_ids_status
# SEARCH pack_operation_ids from res_id
pack_operation_ids = models.execute_kw(
db, uid, password, 'stock.picking', 'read',
[[res_id],["pack_operation_ids"]]
)
print "pack_operation_ids =", pack_operation_ids
pack_operation_ids = json.dumps(pack_operation_ids[0])
#print "pack_operation_ids =", pack_operation_ids
data = json.loads(pack_operation_ids)
#print "pack_operation_ids data =", data
pack_operation_ids = data['pack_operation_ids']
for pack_id in pack_operation_ids:
#print "pack_id =",pack_id
product_from_pack_id = models.execute_kw(
db, uid, password, 'stock.pack.operation', 'read',
[[pack_id]]
)
#print "product_from_pack_id =", product_from_pack_id
product_from_pack_id=json.dumps(product_from_pack_id[0])
#print "product_from_pack_id dumps =", product_from_pack_id
data=json.loads(product_from_pack_id)
#print "product_from_pack_id Load =", data
productQTY_rq = data['product_qty']
pack_productID = data['product_id']
pack_productID = pack_productID[0]
productQTY_done = data['qty_done']
print "pack_id", pack_id, "done :", productQTY_done, "/", productQTY_rq, "ID :", pack_productID
if pack_productID == delivery_productID:
print "We've found the product, let's add a quantity to it"
productQTY_done = data['qty_done']
productQTY_done = productQTY_done + 1
print "set product QTY done :",productQTY_done
set_productQTY_done = models.execute_kw(
db, uid, password, 'stock.pack.operation', 'write',[pack_id,{
'qty_done': productQTY_done,
}]
)
#print "set_productQTY_done =", set_productQTY_done
check_productQTY_done = models.execute_kw(
db, uid, password, 'stock.pack.operation', 'read',[pack_id],{'fields': ['qty_done']}
)
print 'check_productQTY_done = ',check_productQTY_done
quit()
# USED FOR CONTROLE ONLY
# GET delivery id from the order number (move_lines) and the desc
delivery_ids = models.execute_kw(
db, uid, password, 'stock.move', 'read',
[move_lines,["product_id","name","product_description","product_uom_qty","product_uom","location_id","create_date","date_expected","picking_type_id","scrapped","availability","reserved_availability","location_dest_id","remaining_qty","state"]]
)
#print "delivery_ids = ", delivery_ids
delivery_ids = json.dumps( delivery_ids )
data = json.loads(delivery_ids)
#print data
for array in data:
print "move ID = ", array['id'], "Desc = ", array['product_description'], "product ID = ", array["product_id"]