An té a dhéanann billeáil in Odoo as orduithe, ticéid helpdesk agus rianú ama, tá an toradh ar eolas aige: ag deireadh na míosa faigheann custaiméir cúig sonrasc in ionad ceann amháin. Tagann gach ceann acu ó ordú nó ó thicéad difriúil, tá gach ceann acu ceart go teicniúil – agus fós fiafraíonn an custaiméir nach n-oirfeadh sé seo do dhoiciméad amháin.
Go beacht chuige seo níl aon réiteach glan in Odoo 19 Community. Níl an modúl aitheanta OCA account_invoice_merge scaoilte fós do Odoo 19, agus réitíonn sé an fhadhb ar bhealach is riosca tromchúiseach é do sholáthraithe seirbhíse: cuirtear míreanna comhionanna le chéile, agus ar an gcaoi sin cailltear an nasc ar ais chuig an ordú, chuig an tasc agus chuig an am a taifeadadh.
Dá bhrí sin d'fhorbraíomar an modúl Merge Draft Invoices dár suiteáil féin de Odoo 19 Community. Toisc nach linne amháin is ábhar don fhadhb seo, cuirimid ar fáil saor in aisce ar GitHub faoin gceadúnas saor AGPL-3 é.
Chuig an tionscadal ar GitHub:
Cén fáth modúl dár gcuid féin in ionad réiteach OCA?
Tá an OCA ag cothabháil account_invoice_merge le blianta fada sa stórlann OCA/account-invoicing. Ag am an phoist seo, is Pull Request oscailte fós é an t-aistriú go 19.0 ansin, ní modúl foilsithe.
Ach is tábhachtaí fós go ndéanann an dá mhodúl rudaí difriúla:
| OCA account_invoice_merge | Merge Draft Invoices | |
|---|---|---|
| Toradh | cumasctar isteach i gceann de na sonraisc roghnaithe | i gcónaí sonrasc nua |
| Míreanna | cuirtear míreanna comhionanna le chéile, suimítear cainníochtaí | glactar le gach mír ceann ar cheann |
| Tionscnamh | invoice_origin / payment_reference ceangailte le chéile sa cheannteideal | réimsí tionscnaimh do gach mír cóipeáilte tríd an hook _copy_data_extend_business_fields de chuid Odoo féin |
| Rianú ama | níl sé curtha san áireamh | athraítear timesheet_invoice_id go dtí an sonrasc nua |
| Inléite don chustaiméir | rud ar bith | ceannteideal os cionn mhíreanna gach foinse le hordú agus ticéad |
| Sonraisc foinse | cuirtear ar ceal iad | cur ar ceal (réamhshocrú), scriosadh nó coinneáil – le iarmhairtí ainmnithe go soiléir |
Is é cumasc míreanna comhionanna an difríocht chinniúnach. Ní féidir le mír chumaiscthe ach tionscnamh amháin a iompar. A luaithe a bhíonn dhá líne ó dhá ordú difriúla ar an gcuma chéanna, tá an nasc ón sonrasc ar ais chuig an ordú, chuig an tasc agus chuig an áirithint ama caillte. I ngnó seirbhíse ina ritheann an bhilleáil tríd Ticéad → Rianú ama → Sonrasc, ciallaíonn sé sin: Billítear na huaireanta céanna faoi dhó nó imíonn siad.
Dá bhrí sin, ní chumascann ár modúl aon rud i bprionsabal. Tá an oiread míreanna ag an sonrasc cumaiscthe agus atá ag a fhoinsí le chéile go díreach.
Níor glacadh aon chód ón modúl OCA. Tá an dá mhodúl faoi AGPL-3.
Cad a dhéanann an modúl
Marcáil dhá dhréacht nó níos mó sa radharc liosta sonraisc, roghnaigh Dréachtsonraisc a chumasc sa roghchlár gníomhaíochta – taispeánann cúntóir an roghnúchán, na seiceálacha agus na roghanna do na sonraisc foinse. Tar éis an deimhniú, tuirlingíonn tú go díreach ar an sonrasc nua.
Sula gcumasctar, déanann an modúl seiceáil, agus na pointí ar fad ag an am céanna, ionas nach bhfeiceann tú an chéad earráid eile tar éis gach ceartúcháin:
- dhá shonrasc ar a laghad roghnaithe
- iad ar fad sa stádas Dréacht
- níor áiríodh aon cheann acu riamh (coinníonn doiciméad a athshocraíodh go dréacht a stair áirithinte agus diúltaítear dó)
- níor cumascadh aon cheann acu cheana
- is sonrasc, sonrasc soláthraí, nóta creidmheasa nó admháil iad ar fad – ní hiontrálacha iris amháin
- an comhpháirtí, cineál an doiciméid, an chuideachta, an t-airgeadra agus an dialann céanna
Ní chuireann difríochtaí i dtéarmaí íocaíochta, i leithroinnt cánach, i seoladh seachadta, i gcuntas bainc nó i ndíoltóir bac ar an gcumasc. Tugann an cúntóir rabhadh agus glacann sé le luach an tsonraisc roghnaithe is sine.
Cad a choinnítear
Is é croí an mhodúil go bhfuil gach nasc a bhíonn ag mír sonraisc lena tionscnamh ann ar an sonrasc nua freisin:
| Nasc | Láimhseáil |
|---|---|
| Míreanna orduithe díola (sale_line_ids) | cóipeáilte do gach mír trí _copy_data_extend_business_fields de chuid Odoo |
| Míreanna orduithe ceannaigh (purchase_line_id) | mar an gcéanna |
| Dáileadh lárionaid costais (analytic_distribution) | cóipeáilte do gach mír |
| réimsí tionscnaimh eile in aghaidh na míre | go huathoibríoch, má chuireann an modúl soláthair an hook doiciméadaithe Odoo i bhfeidhm |
| Tionscnamh agus tagairt i gceannteideal an tsonraisc | cumasctha, dídhúbláilte, in-eagarthóireachta sa chúntóir |
| Ordú díola: invoice_ids, invoice_status, qty_invoiced | ríomhtar iad ó na míreanna – aithníonn an t-ordú an sonrasc nua leis féin |
| Rianú ama (timesheet_invoice_id) | athraítear go dtí an sonrasc nua sula n-éiríonn na foinsí neamhbhailí |
| Ticéad helpdesk | ceangailte leis an rianú ama agus dá bhrí sin díríonn sé go huathoibríoch ar an sonrasc nua |
| Chatter | teachtaireacht ar an sonrasc nua leis na foinsí ar fad, teachtaireacht ar gach foinse le nasc chuig an gceann nua |
| merged_into_move_id / merged_from_move_ids | nasc stóráilte sa dá threo |
Ní chóipeáiltear línte cánach, línte téarmaí íocaíochta, línte babhtála ná línte lascaine airgid thirim, ach ríomhann Odoo as an ábhar iad arís. Mar sin, tá líne cánach amháin in aghaidh an ráta cánach ag an sonrasc cumaiscthe, ní ceann in aghaidh na foinse. Cruthaítear é gan uimhir mar dhréacht; ní úsáideann an cumasc féin uimhir doiciméid.
Ceannteidil: Feiceann an custaiméir cárb as a dtagann gach mír
Is é seo an fheidhm a dhéanann an difríocht sa ghnáthobair. Os cionn mhíreanna gach sonrasc foinse cuireann an modúl líne ranna – an eilimint chéanna a úsáideann Odoo féin don roinn “Réamhíocaíochtaí”:
BE10181 <- Ceannteideal
22,500 x Uair an teicneora 3.577,50
Fo-iomlán 3.577,50
BE10182 · Ticéad: HT00219 <- Ceannteideal
3,000 x Uair an teicneora 477,00
Fo-iomlán 477,00
SUIM GLAN 4.054,50
Déantar an ceannteideal a phriontáil ar an doiciméad a fhaigheann an custaiméir, agus cuireann tuarascáil caighdeánach sonraisc Odoo fo-iomlán in aghaidh na roinne leis as a stuaim féin. Ar an gcaoi sin feiceann an custaiméir freisin cad a chosain gach cuid.
Déantar an lipéadú a chur le chéile as an méid atá ag an bhfoinse i ndáiríre:
- na horduithe, go díreach ó naisc na míreanna – tá na hainmneacha cruinn dá bhrí sin; mura bhfuil naisc orduithe ann, úsáidtear an saortéacs ó invoice_origin
- na ticéid, a shainaithnítear tríd an rianú ama – aschuir mar Ticéad: HT00219 nó Ticéid: …, teoranta do chúig móide “agus N eile”
- mura bhfuil ceachtar acu ann: uimhir an tsonraisc fhoinse, ansin a tagairt
- mura bhfuil rud ar bith ann: “Míreanna breise” neodrach, ionas nach n-imíonn línte foinse go ciúin sa bhloc os a chionn
Fágtar ar lár an méid atá ar iarraidh, ní cheapaimid é. Priontáiltear an ticéad lena uimhir féin – uimhir helpdesk_mgmt, ticket_ref Enterprise nó ainm taispeána an mhúnla – gan ID an bhunachair sonraí riamh.
Scríobhtar na ceannteidil i dteanga an chustaiméara, mar a dhéanann Odoo agus sonraisc á gcruthú ó orduithe. Fanann an Chatter i dteanga an úsáideora.
Ní iompraíonn ceannteideal táirge, cainníocht, praghas, cáin, cuntas ná dáileadh lárionaid costais. Ní féidir leis tionchar a imirt ar shuimeanna, bonn cánach ná costáil. An té a mhúchann na ceannteidil sa chúntóir, faigheann sé go beacht an sonrasc a thiocfadh gan an fheidhm seo – déanann tástáil comparáid idir an dá thoradh go dtí an cent.
Cad a tharlaíonn do na sonraisc foinse
Cuireann an cúntóir trí rogha ar fáil:
- Cur ar ceal (réamhshocrú, molta). Níl aon iarmhairt ag dréacht a chur ar ceal: gan uimhir doiciméid, gan áirithint. Fanann na sonraisc sa bhunachar sonraí mar dhoiciméid curtha ar ceal le Chatter agus nasc chuig an sonrasc nua. Léimeann qty_invoiced ar an ordú díola thar dhoiciméid curtha ar ceal, ní chuirtear aon rud san áireamh faoi dhó. Is é seo an rogha atá intuigthe fós i gceann sé mhí.
- Scriosadh. Dochúlaithe. Básaíonn Chatter agus an tagairt ar ais leis an taifead; ní fhanann ach an teachtaireacht ar an sonrasc nua. Úsáideach do dhréachtaí diúscartha nach mian le duine ar bith iad a fheiceáil a thuilleadh.
- Fág mar dhréacht. Fanann na foinsí oscailte. Áiríonn a n-orduithe díola ansin an fhoinse agus an sonrasc nua mar sonraisc eisithe – feictear an obair mar a bheith billithe faoi dhó go dtí go ndéanann duine na dréachtaí a ghlanadh de láimh. Beartaithe don chás annamh ina mbeadh tú ag iarraidh comparáid a dhéanamh sula ndéantar an cinneadh. Cuireann tástáil an dúbailt chomhairimh seo go beacht ar taifead, ionas nach gcuirfidh sé iontas ar aon duine.
Teorainneacha – cad nach ndéanann an modúl d'aon ghnó
Léigh seo le do thoil sula n-úsáidtear i dtáirgeacht é:
- Dréachtaí amháin. Ní chumasctar sonraisc áirithe. Is tasc nóta creidmheasa é sin, ní próiseas cóipeála.
- Diúltaítear do dhréachtaí a áiríodh uair amháin agus a athshocraíodh. Tá uimhir agus stair áirithinte acu; ní rud é sin a cheilt i ndoiciméad eile ar cheart do ghníomh comhchoiteann a dhéanamh go ciúin.
- Gan cumasc thar chomhpháirtithe, airgeadraí, cuideachtaí nó dialanna. Níl aon luach aonair ciallmhar ann chuige sin, mar sin diúltaíonn an modúl in ionad buille faoi thuairim a thabhairt.
- Ní ghlactar le payment_reference. Aithníonn tagairtí íocaíochta struchtúrtha doiciméad; ní oireann dhá cheann ceangailte le chéile d'aon rud ag an mbanc. Faigheann an sonrasc nua a thagairt féin nuair a áirithítear é.
- Cóipeáiltear míreanna réamhíocaíochta cosúil le haon mhír eile. Má tá línte réamhíocaíochta ó sale sna foinsí, ní mór an toradh a sheiceáil sula n-áirithítear é.
- Ní athraítear ach timesheet_invoice_id go huathoibríoch. Díríonn gach múnla eile a bhfuil Many2one aige ar account.move (rith billeála dá gcuid féin, naisc síntiúis, tarchuir EDI) fós ar an bhfoinse. Chuige sin tá an hook _merge_draft_relink ann.
- Gan míreanna comhionanna a chumasc – d'aon ghnó. An té a theastaíonn sonrasc gearr, néata uaidh, níl sé san áit cheart anseo agus d'íocfadh sé as le naisc tionscnaimh.
- Cruthaítear ceannteidil uair amháin le linn an chumaisc. Ina dhiaidh sin is gnáthlínte ranna iad: in-eagarthóireachta, in-scriosta, agus ní nuashonraítear iad má athainmnítear an t-ordú nó an ticéad níos déanaí.
- Luann ceannteideal ticéid an tsonraisc fhoinse iomláin, ní ticéid na míre aonair.
Suiteáil in Odoo 19 Community
Déantar an tsuiteáil mar a dhéantar le gnáthmhodúl breise Odoo:
- Cóipeáil fillteán an mhodúil isteach i gcosán addons cumraithe.
- An liosta aipeanna in Odoo a nuashonrú.
- Suiteáil an modúl account_invoice_merge_draft.
Ní bhíonn an modúl spleách ach ar account. Cinntear gach rud a bhfuil a fhios aige faoi sale, purchase, project, hr_timesheet, sale_timesheet nó modúl helpdesk le linn rite – suiteálann sé agus oibríonn sé fiú ar bhunachar sonraí billeála amháin.
Ina dhiaidh sin: Cuntasaíocht → Custaiméirí → Sonraisc (nó Soláthraithe → Sonraisc), marcáil dhá dhréacht nó níos mó, roghchlár na fiacla → Dréachtsonraisc a chumasc. Tá an gníomh ar fáil do gach úsáideoir leis an ngrúpa Billeáil / Sonrascú.
An té a nuashonraíonn ó leagan níos luaithe den mhodúl, ba cheart dó uair amháin nuashonrú a dhéanamh le -u account_invoice_merge_draft --i18n-overwrite ionas go sroichfidh ainmneacha réimsí athraithe an t-aistriúchán Gearmáinise. Níl tionchar aige seo ar shuiteáil nua.
Do fhorbróirí: API agus hooks
Is féidir an cumasc a ghlaoch ó chód dá chuid féin freisin:
python
merged = draft_moves.merge_draft_moves(
extra_vals={"invoice_date": date(2026, 3, 31), "ref": "Q1"},
source_handling="cancel", # "delete" nó "keep"
add_source_sections=True, # ceannteidil; réamhshocrú True
)
Caitheann merge_draft_moves UserError le gach cúis diúltaithe mura féidir an roghnúchán a chumasc. Cuireann _merge_draft_get_errors() na cúiseanna céanna ar ais mar liosta gan eisceacht.
An té a bhfuil tagairtí ar ais aige chuig account.move, sáraíonn sé _merge_draft_relink:
python
class AccountMove(models.Model):
_inherit = "account.move"
def _merge_draft_relink(self, new_move):
super()._merge_draft_relink(new_move)
if "my_move_id" not in self.env["my.model"]._fields:
return
self.env["my.model"].search([("my_move_id", "in", self.ids)]).write(
{"my_move_id": new_move.id}
)
An té a bhfuil tagairt ar ais aige ar an mír sonraisc, níl an modúl seo uaidh ar chor ar bith: is leor hook Odoo féin account.move.line._copy_data_extend_business_fields, agus glactar leis an réimse le linn cumaisc, cur ar ceal agus dúbláil mar an gcéanna. Do mhodúil helpdesk eile nó foirmliú eile ar na ceannteidil tá _merge_draft_get_source_tickets() agus _merge_draft_section_name() ann.
Tástáilte sula ritheann sé ar shonraí táirgeachta
Clúdaíonn 48 tástáil stádais mheasctha, comhpháirtithe, airgeadraí agus cineálacha doiciméad éagsúla, míreanna le hordú díola nó ceannaigh agus gan é, cánacha, rannóga agus nótaí, dáiltí lárionad costais, athrú an rianaithe ama, na trí rogha do na sonraisc foinse, an cúntóir agus na ceannteidil – go bhfuil siad gníomhach de réir réamhshocraithe, go n-atáirgeann a múchadh an seanthoradh go dtí an cent, nach n-iompraíonn ceannteideal suimeanna ná cuntais, go bhfanann míreanna foinse amháin le chéile, go dtaispeántar an ticéad lena uimhir agus ní le ID an bhunachair sonraí riamh.
Tógann na sonraí tástála ar chairt chuntas na cuideachta gníomhaí atá ann cheana in ionad AccountTestInvoicingCommon – is minic nach dtosaíonn an cúntóir sin ar bhunachair sonraí táirgeachta imirceacha, agus is ar a leithéid sin a bhfuil an modúl le rith.
odoo-bin -d <db> -u account_invoice_merge_draft --test-enable \
--test-tags /account_invoice_merge_draft --stop-after-init
Mar atá le gach síneadh i réimse na cuntasaíochta, molaimid an tsuiteáil a thástáil ar dtús i dtimpeallacht thástála le cóip de do bhunachar sonraí féin.
Saor in aisce agus foinse oscailte don Odoo Community
Forbraímid réitigh ag Biricon IT Services GmbH ar dtús do riachtanais shonracha ónár ngnó féin. Nuair a thagann modúl ginearálta úsáideach as sin, níl sé ar intinn againn é a cheilt i suiteáil amháin.
Dá bhrí sin tá Merge Draft Invoices ar fáil saor in aisce mar thionscadal foinse oscailte. Is féidir an cód foinse a fheiceáil, a sheiceáil, a oiriúnú agus a fhorbairt tuilleadh faoi cheadúnas AGPL-3.
Níorbh é ár sprioc an sonrasc is giorra is féidir, ach sonrasc a threoraíonn gach mír ar ais chuig a hordú, a ticéad agus a háirithint ama fiú i gceann bliana.
Tionscadal, cód foinse agus rannpháirtíocht
Tá an cód foinse iomlán, na nótaí suiteála agus an doiciméadú teicniúil ar fáil ar GitHub:
Odoo 19 Merge Draft Invoices a oscailt ar GitHub
Cuirimid fáilte roimh thaithí phraiticiúil, tuarascálacha fabhtanna, moltaí feabhsúcháin agus ranníocaíochtaí ó phobal Odoo.
Saor in aisce. Intuigthe. Foinse oscailte. Do Odoo 19 Community.