Skip to Content

Odoo 19 Community: uno anfonebau drafft – ein modiwl cod agored Merge Draft Invoices

18 Medi 2026 by
Odoo 19 Community: uno anfonebau drafft – ein modiwl cod agored Merge Draft Invoices
Alexander Biringer | Biricon IT Services GmbH

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:

Odoo 19 Merge Draft Invoices

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_mergeMerge Draft Invoices
Canlyniadcaiff ei uno ag un o'r anfonebau a ddewiswydbob amser anfoneb newydd
Eitemaucaiff eitemau tebyg eu cyfuno, caiff meintiau eu hadiocaiff pob eitem ei throsglwyddo un i un
Tarddiadinvoice_origin / payment_reference wedi'u cysylltu â'i gilydd yn y pennawdmeysydd tarddiad ar gyfer pob eitem wedi'u copïo drwy fachyn _copy_data_extend_business_fields Odoo ei hun
Amserlenniheb eu hystyriedcaiff timesheet_invoice_id ei ailgyfeirio at yr anfoneb newydd
Darllenadwy i'r cwsmerdim bydpennawd uwchben eitemau pob ffynhonnell gyda'r archeb a'r tocyn
Anfonebau ffynhonnellcaiff eu canslocanslo (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:

CysylltiadTriniaeth
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 eitemyn awtomatig, os yw'r modiwl sy'n eu darparu yn gweithredu'r bachyn Odoo dogfenedig
Tarddiad a chyfeirnod ym mhennawd yr anfonebwedi'u huno, wedi'u dad-ddyblygu, y gellir eu golygu yn y dewin
Archeb werthu: invoice_ids, invoice_status, qty_invoicedcaiff 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 Helpdeskmae ynghlwm wrth yr amserlen ac felly'n pwyntio'n awtomatig at yr anfoneb newydd
Chatterneges 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_idscysylltiad 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:

  1. 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
  2. y tocynnau, a bennir drwy'r amserlen – a allbynnir fel Tocyn: HT00219 neu Docynnau: …, wedi'u cyfyngu i bump a „N arall"
  3. os nad oes yr un o'r ddau: rhif yr anfoneb ffynhonnell, yna ei chyfeirnod
  4. 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:

  1. Copïo cyfeiriadur y modiwl i lwybr addons wedi'i ffurfweddu.
  2. Diweddaru'r rhestr apiau yn Odoo.
  3. 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.