El detall del mètode que segueix és el del codi d'Odoo 20. El botó és a les branques 17, 18, 19 i 20, amb la mateixa condició de visibilitat.
On és i quan es veu
On és el botó Devolver Stock i quan apareix?
És a la fitxa de Shopify Refunds, que s'obre des de Vendes › Shopify › Operations › Refunds. La vista el mostra només quan el camp Stock Return és en pendent, en revisió o en fallit; amb qualsevol altre valor l'amaga. Amb els valors per defecte no es veu, perquè aquest camp arrenca en un valor que no és cap d'aquests. A Odoo en castellà el botó es diu Devolver Stock; el segon esquema recull com es rotula en altres idiomes.


Devolver Stock, en alemany Lager zurückgeben, en francès Retourner au stock, en italià Restituisci al magazzino i en portuguès Devolver ao stock.Què passa si la devolució d'estoc ja estava feta?
El mètode ho mira abans que res. Si el camp era en fallit però la transferència de devolució ja estava feta, el deixa com a fet i esborra el text de l'error. Si ja era fet i hi ha Return Transfer, obre aquesta transferència; si no n'hi ha cap, no fa res més.

Què comprova i què crea
Com decideix quins productes retorna?
Llegeix les línies de reposició del reemborsament, és a dir, el que Shopify va reposar a l'estoc. Descarta les de quantitat zero o menor. Per a cadascuna cerca primer el producte per l'ID de variant de Shopify i, si no el troba, per l'SKU. Les línies que no es resolen no entren a la devolució i deixen un avís al log. Si no queda cap producte, el mètode s'atura amb el missatge que veuràs més avall.
Què fa si el reemborsament té una comanda de venda amb lliuraments validats?
A la fitxa, el camp Sale Order és al grup Amounts. El codi cerca els lliuraments de sortida d'aquesta comanda que ja estan fets. Si n'hi ha algun, calcula què queda per retornar de cada producte: el que Shopify va reposar en tots els reemborsaments d'aquesta comanda, menys el que ja van tornar les devolucions no cancel·lades (també les que va fer el mateix Odoo), i mai més del que es va lliurar. El repartiment va del lliurament més antic al més nou, sense passar del que va enviar cadascun menys el que ja n'ha tornat.
Crea una devolució validada per cada lliurament afectat, de manera que en poden ser diverses. Quan el lliurament té el moviment d'aquest producte, la devolució queda enllaçada a aquest moviment com una devolució del mateix Odoo, de manera que el lliurament la compta com a retornada.
Si no queda res per retornar, no crea cap transferència: marca la devolució d'estoc com a feta, esborra l'error, deixa als lliuraments que van enviar aquests productes la nota Shopify refund …: nothing left to return from this delivery, Odoo already returned it. i obre el primer d'aquests.
I si no hi ha comanda o cap lliurament validat?
Llavors crea una transferència d'entrada manual, amb origen a la ubicació de clients i destí a la ubicació d'estoc del magatzem. El magatzem és el configurat a la instància de Shopify o, si no n'hi ha cap, el primer que trobi de l'empresa de la instància. Fa servir un tipus d'operació d'entrada d'aquest magatzem, posa a cada moviment la descripció Return: … amb el nom del producte, confirma la transferència, la reserva, dona com a feta la quantitat demanada i la valida.
Què canvia quan acaba bé?
La devolució d'estoc queda com a feta, el text d'error s'esborra i el camp Return Transfer, al grup Amounts de la fitxa, apunta a la primera transferència creada. Aquest camp s'amaga mentre és buit i l'omple el botó, no l'usuari. Totes les transferències porten com a origen Shopify Refund … amb el nom del reemborsament (el camp Name, grup Shopify).
El botó deixa notes a les transferències: a cada devolució, Stock returned from Shopify refund …. Transfer: … i, si ve d'un lliurament, en aquest lliurament, Shopify refund …: returned in …. Al final s'obre la primera transferència de devolució.
Errors i què fer
Què faig amb No restockable products found for this refund. Make sure products are linked by SKU or Shopify variant ID.?
És el missatge que dona el botó quan, després de llegir les línies, no queda cap producte: línies amb quantitat zero o menor, o productes que ni l'ID de variant ni l'SKU localitzen. Salta abans de crear res i no canvia el camp Stock Return. Revisa que els productes del reemborsament estiguin vinculats a Odoo per SKU o per ID de variant de Shopify, com demana el missatge, i torna a prémer.
Què vol dir Failed to create stock return: …?
És el missatge que surt quan falla alguna cosa mentre el mètode cerca lliuraments o crea i valida les transferències. Després dels dos punts hi va el text de l'error original, i és aquest text el que diu què corregir. Abans de mostrar-lo, el mètode deixa Stock Return en fallit i guarda el text de l'error. Com que la condició de la vista inclou el valor fallit, el botó segueix visible un cop corregida la causa.
Què costa i què necessito per fer-lo servir?
Shopify Connector costa 9 € per versió d'Odoo, per a 17, 18, 19 i 20, en pagament únic sense IVA (consulta la fitxa d'Odoo Apps). A més, necessita la subscripció a FlexigoTech Cloud: el pla Connector costa 49 €/mes o 490 €/any sense IVA, amb fins a 3 comptes de la plataforma. Si vols que el flux de devolucions encaixi amb els teus magatzems, FlexigoTech implanta Odoo i desenvolupa connectors i integracions a mida.
Continua llegint
Comprovat al codi del connector (versió 20.0) i a les fonts enllaçades
Fonts
- Codi del mòdul: flexigobe_shopify_connector 20.0 (c7078cd8): views/shopify_refund_views.xml
- Codi del mòdul: flexigobe_shopify_connector 20.0 (c7078cd8): models/shopify_refund.py
- apps.odoo.com/apps/modules/20.0/flexigobe_shopify_connector
- apps.odoo.com/apps/modules/17.0/flexigobe_shopify_connector
- apps.odoo.com/apps/modules/18.0/flexigobe_shopify_connector
- apps.odoo.com/apps/modules/19.0/flexigobe_shopify_connector
- flexigotech.com/en/services.html
- flexigotech.com/precios.html
