Mae unrhyw un sy'n bilio yn Odoo o archebion, tocynnau Helpdesk ac amserlenni yn gwybod y canlyniad: ar ddiwedd y mis, nid un anfoneb a gaiff cwsmer, ond pump. Daw pob un o archeb neu docyn gwahanol, mae pob un yn gywir yn broffesiynol – ac eto mae'r cwsmer yn gofyn a fyddai hyn ddim yn gallu ffitio ar un ddogfen.
Yn union ar gyfer hyn nid oes ateb glân yn Odoo 19 Community. Nid yw'r modiwl OCA adnabyddus account_invoice_merge wedi'i ryddhau eto ar gyfer Odoo 19, ac mae'n datrys y broblem mewn ffordd sy'n risg ddifrifol i ddarparwyr gwasanaeth: caiff eitemau tebyg eu cyfuno, ac felly collir y cysylltiad yn ôl â'r archeb, y dasg a'r amser a gofnodwyd.
Ar gyfer ein gosodiad Odoo 19 Community ein hunain, felly, rydym wedi datblygu'r modiwl Merge Draft Invoices. Gan nad ydym ni'n unig yn wynebu'r broblem hon, rydym yn ei ddarparu am ddim ar GitHub o dan y drwydded rydd AGPL-3.
I'r prosiect ar GitHub:
Pam modiwl ein hunain yn hytrach na'r ateb OCA?
Mae'r OCA wedi cynnal account_invoice_merge ers blynyddoedd lawer yn y storfa OCA/account-invoicing. Ar adeg y cofnod hwn, mae'r mudo i 19.0 yno yn dal i fod yn Pull Request agored, nid modiwl a gyhoeddwyd.
Yn bwysicach, fodd bynnag, mae'r ddau fodiwl yn gwneud pethau gwahanol:
| OCA account_invoice_merge | Merge Draft Invoices | |
|---|---|---|
| Canlyniad | caiff ei uno ag un o'r anfonebau a ddewiswyd | bob amser anfoneb newydd |
| Eitemau | caiff eitemau tebyg eu cyfuno, caiff meintiau eu hadio | caiff pob eitem ei throsglwyddo un i un |
| Tarddiad | invoice_origin / payment_reference wedi'u cysylltu â'i gilydd yn y pennawd | meysydd tarddiad ar gyfer pob eitem wedi'u copïo drwy fachyn _copy_data_extend_business_fields Odoo ei hun |
| Amserlenni | heb eu hystyried | caiff timesheet_invoice_id ei ailgyfeirio at yr anfoneb newydd |
| Darllenadwy i'r cwsmer | dim byd | pennawd uwchben eitemau pob ffynhonnell gyda'r archeb a'r tocyn |
| Anfonebau ffynhonnell | caiff eu canslo | canslo (safonol), dileu neu gadw – gyda chanlyniadau wedi'u henwi'n glir |
Cyfuno eitemau tebyg yw'r gwahaniaeth hollbwysig. Dim ond un tarddiad y gall eitem gyfunol ei gario. Cyn gynted ag y bydd dwy linell o ddwy archeb wahanol yn edrych yr un fath, mae'r cysylltiad o'r anfoneb yn ôl i'r archeb, y dasg a'r cofnod amser wedi mynd. Mewn busnes gwasanaeth lle mae bilio yn rhedeg drwy Tocyn → Amserlen → Anfoneb, mae hynny'n golygu: caiff yr un oriau eu bilio ddwywaith neu maent yn diflannu.
Felly nid yw ein modiwl yn cyfuno unrhyw beth yn sylfaenol. Mae gan yr anfoneb unedig yn union gymaint o eitemau â'i ffynonellau gyda'i gilydd.
Ni chymerwyd unrhyw god o'r modiwl OCA. Mae'r ddau fodiwl o dan AGPL-3.
Yr hyn y mae'r modiwl yn ei wneud
Yn olwg rhestr yr anfonebau, marciwch ddau ddrafft neu fwy, dewiswch Uno anfonebau drafft yn y ddewislen gweithredoedd – mae dewin yn dangos y dewis, y gwiriadau a'r opsiynau ar gyfer yr anfonebau ffynhonnell. Ar ôl cadarnhau, rydych yn glanio'n uniongyrchol ar yr anfoneb newydd.
Cyn uno, mae'r modiwl yn gwirio, a hynny'r holl bwyntiau ar unwaith, fel nad ydych yn gweld y gwall nesaf ar ôl pob cywiriad:
- o leiaf dwy anfoneb wedi'u dewis
- pob un â statws Drafft
- ni chofnodwyd yr un erioed (mae dogfen a ailosodwyd i drafft yn cadw ei hanes cofnodi ac yn cael ei gwrthod)
- nid oes yr un wedi'i huno eisoes
- pob un yn anfoneb, anfoneb cyflenwr, nodyn credyd neu ddogfen – dim cofnodion dyddlyfr pur
- yr un partner, math o ddogfen, cwmni, arian cyfred a dyddlyfr
Nid yw gwahaniaethau o ran telerau talu, neilltuo trethi, cyfeiriad cyflwyno, cyfrif banc neu werthwr yn blocio. Mae'r dewin yn rhybuddio ac yn cymryd gwerth yr anfoneb hynaf a ddewiswyd.
Yr hyn sy'n cael ei gadw
Craidd y modiwl yw bod pob cysylltiad sydd gan eitem anfoneb â'i tharddiad hefyd yn bodoli ar yr anfoneb newydd:
| Cysylltiad | Triniaeth |
|---|---|
| Eitemau archeb werthu (sale_line_ids) | wedi'u copïo ar gyfer pob eitem drwy _copy_data_extend_business_fields Odoo |
| Eitemau archeb brynu (purchase_line_id) | yr un modd |
| Dosbarthiad canolfan gost (analytic_distribution) | wedi'i gopïo ar gyfer pob eitem |
| meysydd tarddiad eraill ar gyfer pob eitem | yn awtomatig, os yw'r modiwl sy'n eu darparu yn gweithredu'r bachyn Odoo dogfenedig |
| Tarddiad a chyfeirnod ym mhennawd yr anfoneb | wedi'u huno, wedi'u dad-ddyblygu, y gellir eu golygu yn y dewin |
| Archeb werthu: invoice_ids, invoice_status, qty_invoiced | caiff eu cyfrifo o'r eitemau – mae'r archeb yn adnabod yr anfoneb newydd ohoni ei hun |
| Amserlen (timesheet_invoice_id) | caiff ei hailgyfeirio at yr anfoneb newydd cyn i'r ffynonellau ddod yn annilys |
| Tocyn Helpdesk | mae ynghlwm wrth yr amserlen ac felly'n pwyntio'n awtomatig at yr anfoneb newydd |
| Chatter | neges ar yr anfoneb newydd gyda'r holl ffynonellau, neges ar bob ffynhonnell gyda dolen i'r un newydd |
| merged_into_move_id / merged_from_move_ids | cysylltiad wedi'i gadw i'r ddau gyfeiriad |
Ni chaiff llinellau treth, llinellau telerau talu, llinellau talgrynnu a llinellau disgownt talu prydlon eu copïo, ond cânt eu hail-gyfrifo gan Odoo o'r cynnwys. Felly mae gan yr anfoneb unedig un llinell dreth ar gyfer pob cyfradd dreth, nid un ar gyfer pob ffynhonnell. Caiff ei chreu heb rif fel drafft; nid yw'r uno ei hun yn defnyddio rhif dogfen.
Penawdau: mae'r cwsmer yn gweld o ble mae pob eitem yn dod
Dyma'r swyddogaeth sy'n gwneud y gwahaniaeth o ddydd i ddydd. Uwchben eitemau pob anfoneb ffynhonnell, mae'r modiwl yn gosod llinell adran – yr un elfen y mae Odoo ei hun yn ei defnyddio ar gyfer yr adran „Taliadau ymlaen llaw":
BE10181 <- Pennawd
22,500 x Technikerstunde 3.577,50
Zwischensumme 3.577,50
BE10182 · Ticket: HT00219 <- Pennawd
3,000 x Technikerstunde 477,00
Zwischensumme 477,00
NETTOBETRAG 4.054,50
Caiff y pennawd ei argraffu ar y ddogfen y mae'r cwsmer yn ei chael, ac mae adroddiad anfoneb safonol Odoo yn ychwanegu is-gyfanswm ar gyfer pob adran ohono'i hun. Felly mae'r cwsmer hefyd yn gweld faint gostiodd pob rhan.
Caiff y label ei lunio o'r hyn sydd gan y ffynhonnell mewn gwirionedd:
- yr archebion, yn uniongyrchol o gysylltiadau'r eitemau – mae'r enwau felly'n gywir; os yw cysylltiadau archeb ar goll, defnyddir y testun rhydd o invoice_origin
- y tocynnau, a bennir drwy'r amserlen – a allbynnir fel Tocyn: HT00219 neu Docynnau: …, wedi'u cyfyngu i bump a „N arall"
- os nad oes yr un o'r ddau: rhif yr anfoneb ffynhonnell, yna ei chyfeirnod
- os nad oes dim o gwbl: „Eitemau eraill" niwtral, fel nad yw llinellau ffynhonnell byth yn diflannu'n dawel yn y bloc uwchben
Caiff yr hyn sydd ar goll ei adael allan, nid ei ddyfeisio. Caiff y tocyn ei argraffu â'i rif ei hun – rhif helpdesk_mgmt, ticket_ref Enterprise neu enw arddangos y model – byth gydag ID y gronfa ddata.
Caiff y penawdau eu hysgrifennu yn iaith y cwsmer, fel y mae Odoo yn ei wneud wrth greu anfonebau o archebion. Mae'r Chatter yn aros yn iaith y defnyddiwr.
Nid yw pennawd yn cario cynnyrch, maint, pris, treth, cyfrif na dosbarthiad canolfan gost. Ni all effeithio ar gyfansymiau, sail treth a chostio. Mae pwy bynnag sy'n diffodd y penawdau yn y dewin yn cael yn union yr anfoneb a fyddai wedi codi heb y swyddogaeth hon – mae prawf yn cymharu'r ddau ganlyniad i'r ceiniog.
Beth sy'n digwydd i'r anfonebau ffynhonnell
Mae'r dewin yn cynnig tri opsiwn:
- Canslo (safonol, argymhellir). Nid oes canlyniadau i ganslo drafft: dim rhif dogfen, dim cofnodi. Mae'r anfonebau'n aros fel dogfennau wedi'u canslo gyda Chatter a dolen i'r anfoneb newydd yn y gronfa ddata. Mae qty_invoiced ar yr archeb werthu yn hepgor dogfennau wedi'u canslo, ni chyfrifir dim ddwywaith. Dyma'r opsiwn sy'n dal yn ddealladwy ymhen chwe mis.
- Dileu. Yn anadferadwy. Mae'r Chatter a'r cyfeirnod yn ôl yn diflannu gyda'r cofnod; dim ond y neges ar yr anfoneb newydd sy'n aros. Yn ddefnyddiol ar gyfer drafftiau tafladwy na ddylai neb eu gweld mwyach.
- Gadael fel drafft. Mae'r ffynonellau'n aros ar agor. Yna mae eu harchebion gwerthu yn cyfrif y ffynhonnell a'r anfoneb newydd fel rhai a anfonebwyd – mae'r gwaith yn ymddangos fel pe bai wedi'i filio ddwywaith, nes i rywun lanhau'r drafftiau â llaw. Wedi'i fwriadu ar gyfer yr achos prin y mae rhywun am gymharu cyn penderfynu. Mae prawf yn cofnodi'r union gyfrif dwbl hwn, fel nad yw'n synnu neb.
Terfynau – yr hyn nad yw'r modiwl yn ei wneud yn fwriadol
Darllenwch cyn defnyddio'n gynhyrchiol, os gwelwch yn dda:
- Drafftiau yn unig. Ni chaiff anfonebau a gofnodwyd eu huno. Tasg nodyn credyd yw honno, nid proses gopïo.
- Gwrthodir drafftiau a gofnodwyd unwaith ac a ailosodwyd. Mae ganddynt rif a hanes cofnodi; nid yw cuddio hynny mewn dogfen arall yn rhywbeth y dylai gweithred swp ei wneud yn dawel.
- Dim uno ar draws partneriaid, arian cyfred, cwmnïau na dyddlyfrau. Nid oes gwerth unigol synhwyrol ar gyfer hynny, felly mae'r modiwl yn gwrthod yn hytrach na dyfalu.
- Ni chaiff payment_reference ei throsglwyddo. Mae cyfeirnodau talu strwythuredig yn adnabod dogfen; nid yw dau wedi'u cysylltu â'i gilydd yn cyfateb i ddim yn y banc. Mae'r anfoneb newydd yn cael ei chyfeirnod ei hun wrth gofnodi.
- Caiff eitemau taliad ymlaen llaw eu copïo fel unrhyw eitem arall. Os yw'r ffynonellau'n cynnwys llinellau taliad ymlaen llaw o sale, dylid gwirio'r canlyniad cyn cofnodi.
- Dim ond timesheet_invoice_id sy'n cael ei ailgyfeirio'n awtomatig. Mae pob model arall sydd â Many2one at account.move (cylchoedd bilio eich hun, cysylltiadau tanysgrifio, trosglwyddiadau EDI) yn dal i bwyntio at y ffynhonnell. Ar gyfer hynny mae'r bachyn _merge_draft_relink.
- Dim cyfuno eitemau tebyg – yn fwriadol. Mae pwy bynnag sydd eisiau anfoneb fer, daclus yn y lle anghywir a byddai'n talu amdani gyda'r cysylltiadau tarddiad.
- Caiff penawdau eu creu unwaith wrth uno. Wedyn maent yn llinellau adran arferol: y gellir eu golygu, eu dileu ac na chânt eu diweddaru os caiff archeb neu docyn ei ailenwi'n ddiweddarach.
- Mae pennawd yn enwi tocynnau'r anfoneb ffynhonnell gyfan, nid yr eitem unigol.
Gosod yn Odoo 19 Community
Mae'r gosod yn digwydd fel gydag unrhyw fodiwl ychwanegol Odoo cyffredin:
- Copïo cyfeiriadur y modiwl i lwybr addons wedi'i ffurfweddu.
- Diweddaru'r rhestr apiau yn Odoo.
- Gosod y modiwl account_invoice_merge_draft.
Mae'r modiwl yn dibynnu ar account yn unig. Caiff popeth y mae'n ei wybod am sale, purchase, project, hr_timesheet, sale_timesheet neu fodiwl Helpdesk ei bennu ar adeg rhedeg – mae'n gosod ac yn gweithio hefyd ar gronfa ddata bilio bur.
Wedyn: Cyfrifeg → Cwsmeriaid → Anfonebau (neu Cyflenwyr → Anfonebau), marciwch ddau ddrafft neu fwy, dewislen olwyn gêr → Uno anfonebau drafft. Mae'r weithred ar gael i bob defnyddiwr sydd â'r grŵp Bilio / Anfonebu.
Dylai pwy bynnag sy'n diweddaru o fersiwn gynharach o'r modiwl ddiweddaru unwaith gyda -u account_invoice_merge_draft --i18n-overwrite, fel bod labeli maes a newidiwyd yn cyrraedd y cyfieithiad Almaeneg. Nid yw gosodiad newydd yn cael ei effeithio gan hyn.
I ddatblygwyr: API a bachau
Gellir galw'r uno hefyd o'ch cod eich hun:
python
merged = draft_moves.merge_draft_moves(
extra_vals={"invoice_date": date(2026, 3, 31), "ref": "Q1"},
source_handling="cancel", # "delete" neu "keep"
add_source_sections=True, # penawdau; safonol True
)
Mae merge_draft_moves yn taflu UserError gyda'r holl resymau dros wrthod os na ellir uno'r dewis. Mae _merge_draft_get_errors() yn dychwelyd yr un rhesymau fel rhestr heb eithriad.
Mae pwy bynnag sydd â chyfeirnodau yn ôl eu hunain at account.move yn trechu _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}
)
Nid oes angen y modiwl hwn o gwbl ar bwy bynnag sydd â chyfeirnod yn ôl ar yr eitem anfoneb: mae bachyn Odoo ei hun account.move.line._copy_data_extend_business_fields yn ddigon, a chaiff y maes ei drosglwyddo wrth uno, wrth ganslo ac wrth ddyblygu yn yr un modd. Ar gyfer modiwlau Helpdesk eraill neu eiriad gwahanol y penawdau mae _merge_draft_get_source_tickets() a _merge_draft_section_name().
Wedi'i brofi cyn iddo redeg ar ddata cynhyrchu
Mae 48 prawf yn cwmpasu statws cymysg, partneriaid, arian cyfred a mathau o ddogfennau gwahanol, eitemau gyda neu heb archeb werthu neu brynu, trethi, adrannau a nodiadau, dosbarthiadau canolfan gost, ailgyfeirio amserlenni, pob un o'r tri opsiwn ar gyfer yr anfonebau ffynhonnell, y dewin a'r penawdau – eu bod yn weithredol yn ddiofyn, bod eu diffodd yn atgynhyrchu'r hen ganlyniad i'r ceiniog, nad yw pennawd yn cario symiau na chyfrifon, bod eitemau ffynhonnell yn aros gyda'i gilydd, a bod y tocyn yn ymddangos gyda'i rif ac byth gydag ID y gronfa ddata.
Mae'r data prawf yn adeiladu ar siart cyfrifon presennol y cwmni gweithredol yn hytrach nag ar AccountTestInvoicingCommon – yn aml nid yw'r helper hwn yn cychwyn ar gronfeydd data cynhyrchu wedi'u mudo, ac ar rai o'r fath yn union y dylai'r modiwl redeg.
odoo-bin -d <db> -u account_invoice_merge_draft --test-enable \
--test-tags /account_invoice_merge_draft --stop-after-init
Fel gydag unrhyw estyniad yn y maes cyfrifeg, rydym yn argymell gwirio'r gosodiad yn gyntaf mewn amgylchedd prawf gyda chopi o'ch cronfa ddata eich hun.
Am ddim a chod agored ar gyfer cymuned Odoo
Rydym ni yn Biricon IT Services GmbH yn datblygu atebion yn gyntaf ar gyfer gofynion penodol o'n gweithrediadau ein hunain. Os daw modiwl y gellir ei ddefnyddio'n gyffredinol o hynny, nid ydym am ei guddio mewn un gosodiad.
Felly mae Merge Draft Invoices ar gael am ddim fel prosiect cod agored. Gellir edrych ar y cod ffynhonnell, ei wirio, ei addasu a'i ddatblygu ymhellach o dan drwydded AGPL-3.
Nid yr anfoneb fyrraf posibl oedd ein nod, ond anfoneb lle mae pob eitem, hyd yn oed ymhen blwyddyn, yn dal i arwain yn ôl at ei harcheb, ei thocyn a'i chofnod amser.
Prosiect, cod ffynhonnell a chydweithio
Mae'r cod ffynhonnell cyflawn, y nodiadau gosod a'r ddogfennaeth dechnegol ar gael ar GitHub:
Agor Odoo 19 Merge Draft Invoices ar GitHub
Rydym yn croesawu profiadau ymarferol, adroddiadau namau, awgrymiadau gwella a chyfraniadau gan gymuned Odoo.
Am ddim. Dealladwy. Cod agored. Ar gyfer Odoo 19 Community.