Kesê ku di Odoo de ji siparî, tîketên Helpdesk û tomarkirina demê hesab dike, encamê dizane: Mişterî di dawiya mehê de ne yek fature, lê pênc distîne. Her yek ji siparî an tîketeke cuda tê, her yek ji hêla pîşeyî ve rast e – û dîsa jî mişterî dipirse gelo ev nikare di yek belgeyê de cih bigire.
Bi rastî ji bo vê yekê di Odoo 19 Community de çareseriyeke paqij tune ye. Modula naskirî ya OCA account_invoice_merge hê ji bo Odoo 19 nehatiye berdestkirin, û pirsgirêkê bi awayekî çareser dike ku ji bo pêşkêşkerên karûbaran xetereyeke cidî ye: Rêzên wekhev têne berhevkirin, û bi vî awayî girêdana ber bi siparî, erk û demê ya hatî tomarkirin ve winda dibe.
Ji bo sazkirina xwe ya Odoo 19 Community me ji ber vê yekê modula Merge Draft Invoices pêş xist. Ji ber ku ev pirsgirêk ne tenê me, lê gelekan dihêle, em wê bi lîsansa azad a AGPL-3 belaş li ser GitHub pêşkêş dikin.
Biçe projeyê li ser GitHub:
Çima modulek xwe li şûna çareseriya OCA?
OCA bi salan e account_invoice_merge di depoya OCA/account-invoicing de diparêze. Di dema vê nivîsarê de koçberkirina ber bi 19.0 li wir hê Pull Requestek vekirî ye, ne modulek weşandî.
Lê girîngtir ew e ku her du modul tiştên cuda dikin:
| OCA account_invoice_merge | Merge Draft Invoices | |
|---|---|---|
| Encam | di yek ji fatureyên hilbijartî de tê yekkirin | her gav fatureyeke nû |
| Rêz | rêzên wekhev têne berhevkirin, mîqdar têne berhev kirin | her rêz yek bi yek tê girtin |
| Eslê | invoice_origin / payment_reference di serê fatureyê de bi hev ve girêdayî ne | qadên eslê ji bo her rêzê bi rêya Hook ya _copy_data_extend_business_fields ya Odoo bi xwe têne kopîkirin |
| Tomarkirina demê | nayê ber çavan | timesheet_invoice_id li ser fatureya nû tê veguhestin |
| Ji bo mişterî tê xwendin | tiştek | sernavek li ser rêzên her çavkaniyê bi siparî û tîketê |
| Fatureyên çavkaniyê | têne betalkirin | betal bike (standard), jêbibe an bihêle – bi encamên bi zelalî hatine binavkirin |
Berhevkirina rêzên wekhev cudahiya diyarker e. Rêzeke hatî berhevkirin tenê dikare eslekî hilgire. Gava ku du rêz ji du siparîşên cuda wekhev xuya bikin, girêdana ji fatureyê ber bi siparî, erk û tomara demê ve winda dibe. Di karsaziyeke karûbarî de ku hesabkirin bi rêya Tîket → Tomarkirina demê → Fature pêk tê, ev tê wateya: Heman saet du caran têne hesabkirin an jî winda dibin.
Modula me ji ber vê yekê bi prensîp tiştek bi hev re nake. Fatureya yekkirî tam bi qasî hemû çavkaniyên xwe bi hev re rêz hene.
Ti kod ji modula OCA nehatiye girtin. Her du modul di bin AGPL-3 de ne.
Modul çi dike
Di dîmena lîsteya fatureyan de du an bêtir pêşnivîsan nîşan bikin, di menûya çalakiyan de Fatureyên pêşnivîs bi hev re yek bike hilbijêrin – arîkar hilbijartin, kontrol û vebijarkên ji bo fatureyên çavkaniyê nîşan dide. Piştî pejirandinê mirov rasterast li fatureya nû digihîje.
Berî yekkirinê modul kontrol dike, û hemû xalan di heman demê de, da ku mirov piştî her rastkirinê xeletiya din nebîne:
- herî kêm du fature hatine hilbijartin
- hemû di rewşa Pêşnivîs de ne
- tu yek tu carî nehatiye tomarkirin (belgeyeke ku li pêşnivîsê hatiye vegerandin dîroka xwe ya tomarkirinê diparêze û tê red kirin)
- tu yek berê nehatiye yekkirin
- hemû fature, fatureya dabînkerê, nota krediyê an belge ne – ne tenê hevokên tomarkirinê
- heman partner, cureyê belgeyê, pargîdanî, diravê û Journal
Cudahiyên di şertê dayînê, danasîna bacê, navnîşana radestkirinê, hesabê bankê an firoşkar de asteng nakin. Arîkar hişyar dike û nirxa fatureya hilbijartî ya herî kevn digire.
Çi dimîne
Bingeha modulê ev e ku her girêdana ku rêzeke fatureyê bi eslê xwe re heye, li ser fatureya nû jî heye:
| Girêdan | Rêbaza birêvebirinê |
|---|---|
| Rêzên fermana firotinê (sale_line_ids) | ji bo her rêzê bi rêya _copy_data_extend_business_fields ya Odoo tê kopîkirin |
| Rêzên fermana kirînê (purchase_line_id) | bi heman awayî |
| Dabeşkirina navenda lêçûnê (analytic_distribution) | ji bo her rêzê tê kopîkirin |
| qadên din ên eslê ji bo her rêzê | bi awayekî otomatîk, heke modula peydakar Hook ya Odoo ya belgekirî pêk bîne |
| Eslê û referans di serê fatureyê de | yekkirî, dubarekirî hatiye rakirin, di arîkar de dikare were sererastkirin |
| Fermana firotinê: invoice_ids, invoice_status, qty_invoiced | ji rêzan têne hesabkirin – ferman fatureya nû bi xwe nas dike |
| Tomarkirina demê (timesheet_invoice_id) | li ser fatureya nû tê veguhestin, berî ku çavkanî bêbandor bibin |
| Tîketa Helpdesk | bi tomarkirina demê ve girêdayî ye û bi vî awayî bi awayekî otomatîk li fatureya nû dinêre |
| Chatter | Peyam li ser fatureya nû bi hemû çavkaniyan re, peyam li ser her çavkaniyê bi lînka ber bi ya nû ve |
| merged_into_move_id / merged_from_move_ids | girêdana tomarkirî di her du alî de |
Rêzên bacê, rêzên şertên dayînê, rêzên dorpêçkirin û Skonto nayên kopîkirin, lê ji aliyê Odoo ve ji naverokê ji nû ve têne hesabkirin. Fatureya yekkirî ji ber vê yekê ji bo her rêjeya bacê rêzeke bacê dihewîne, ne ji bo her çavkaniyê rêzek. Ew bêhejmar wekî pêşnivîs tê çêkirin; yekkirina bi xwe hejmareke belgeyê bi kar nîne.
Sernav: Mişterî dibîne ka her rêz ji ku tê
Ev fonksiyona ku di jiyana rojane de cudahiyê çêdike ye. Li ser rêzên her fatureya çavkaniyê modul rêzeke beşê datîne – heman elementê ku Odoo bi xwe ji bo beşa „Pêşdayîn" bi kar tîne:
BE10181 <- Sernav
22,500 x Saeta teknîkî 3.577,50
Berhevoka navîn 3.577,50
BE10182 · Tîket: HT00219 <- Sernav
3,000 x Saeta teknîkî 477,00
Berhevoka navîn 477,00
MEBLEGA NETO 4.054,50
Sernav li ser belgeya ku mişterî distîne tê çapkirin, û raporta fatureyê ya standard a Odoo bi xwe ji bo her beşê berhevokeke navîn zêde dike. Mişterî bi vî awayî dibîne ka her beş çiqas lê kiriye jî.
Sernav ji tiştê ku çavkanî bi rastî heye tê berhevkirin:
- sipariş, rasterast ji girêdanên rêzan – nav bi vî awayî tam in; heke girêdanên siparî kêm bin, nivîsa azad a ji invoice_origin tê bikaranîn
- tîket, bi rêya tomarkirina demê têne diyarkirin – wekî Tîket: HT00219 an Tîket: … têne nîşandan, heya pênc û „û N yên din" sînordar
- heke tu yek jî tune be: hejmara fatureya çavkaniyê, dû re referansa wê
- heke qet tiştek tune be: „Rêzên din" ya bêalî, da ku rêzên çavkaniyekê qet bêdeng di bloka li jorê de winda nebin
Tiştê ku kêm e tê berdan, nayê çêkirin. Tîket bi hejmara xwe ya xwe tê çapkirin – hejmara helpdesk_mgmt, ticket_ref ya Enterprise an navê nîşandanê yê modelê – tu carî bi ID ya databasê.
Sernav bi zimanê mişterî têne nivîsandin, wekî ku Odoo dema ji sipariyan fature çêdike dike. Chatter bi zimanê bikarhêner dimîne.
Sernav ne hilbijartin, ne mîqdar, ne biha, ne bac, ne hesab û ne jî dabeşkirina navenda lêçûnê hildigire. Ew nikare bandorê li berhevokan, bingeha bacê û hesabkirina lêçûnê bike. Kesê ku sernavan di arîkar de vemirîne, tam fatureya ku bêyî vê fonksiyonê çêdibû distîne – ceribandinek her du encaman heya santîmê bi hev re dide ber hev.
Bi fatureyên çavkaniyê re çi diqewime
Arîkar sê vebijarkan pêşkêş dike:
- Betal bike (standard, tê pêşniyarkirin). Betalkirina pêşnivîsekê bê encam e: ne hejmara belgeyê, ne tomarkirin. Fature wekî belgeyên betalkirî bi Chatter û lînka ber bi fatureya nû ve di databasê de dimînin. qty_invoiced li ser fermana firotinê belgeyên betalkirî derbas dike, tiştek du caran nayê jimartin. Ev vebijark e ku piştî şeş mehan jî hê şopandî ye.
- Jêbibe. Bê vegerîn. Chatter û girêdana vegerê bi tomarê re diçin; tenê peyam li ser fatureya nû dimîne. Ji bo pêşnivîsên avêtinê yên ku tu kes naxwaze dîsa bibîne watedar e.
- Wekî pêşnivîs bihêle. Çavkanî vekirî dimînin. Fermanên firotinê yên wan dûre çavkaniyê û fatureya nû wekî fatureyên hatine hesabkirin dihejmêrin – xebat wekî du caran hesabkirî xuya dike, heya ku kesek pêşnivîsan bi destî paqij bike. Ji bo rewşa kêm hatiye armanckirin ku mirov dixwaze berî biryarê bide ber hev. Ceribandinek tam vê du caran jimartinê tomar dike, da ku kesek bi wê şaşmayî nemîne.
Sînor – tiştên ku modul bi mebest nake
Ji kerema xwe berî bikaranîna çalak bixwînin:
- Tenê pêşnivîs. Fatureyên tomarkirî nayên yekkirin. Ev erkeke notên krediyê ye, ne pêvajoyeke kopîkirinê.
- Pêşnivîsên carekê tomarkirî û vegerandî têne red kirin. Ew xwedî hejmarek û dîroka tomarkirinê ne; veşartina vê di belgeyeke din de ne tiştek e ku çalakiyeke komî bêdeng bike.
- Yekkirin di nav partner, diravan, pargîdanî an Journalan de nayê kirin. Ji bo vê tu nirxeke tekane ya watedar tune ye, ji ber vê yekê modul red dike li şûna ku texmîn bike.
- payment_reference nayê girtin. Referansên dayînê yên strukturkirî belgeyekê nas dikin; du ji wan bi hev ve girêdayî bi tu tiştî re li bankê nayên guncandin. Fatureya nû di dema tomarkirinê de ya xwe distîne.
- Rêzên pêşdayînê wekî her rêzeke din têne kopîkirin. Heke çavkanî rêzên pêşdayînê yên ji sale dihewînin, divê encam berî tomarkirinê were kontrolkirin.
- Tenê timesheet_invoice_id bi awayekî otomatîk tê veguhestin. Her modela din a bi Many2one ber bi account.move (xebatên hesabkirinê yên xwe, girêdanên abonetiyê, şandinên EDI) hê jî li çavkaniyê dinêre. Ji bo vê Hook _merge_draft_relink heye.
- Rêzên wekhev nayên berhevkirin – bi mebest. Kesê ku fatureyeke kurt û paqij dixwaze li vir şaş e û ji bo wê dê bi girêdanên eslê bidaya.
- Sernav tenê carekê di dema yekkirinê de çêdibin. Piştî wê ew rêzên beşê yên asayî ne: dikarin werin sererastkirin, jêbirin û nayên nûvekirin heke sipariş an tîket paşê bên guhertin.
- Sernavek tîketên tevahiya fatureya çavkaniyê nav dike, ne yên rêzeke takekesî.
Sazkirin di Odoo 19 Community de
Sazkirin mîna her modulek zêde ya Odoo ya asayî pêk tê:
- Peldanka modulê li rêyeke Addons ya hatî mîhengkirin kopî bikin.
- Lîsteya Appan di Odoo de nûve bikin.
- Modula account_invoice_merge_draft saz bikin.
Modul tenê bi account ve girêdayî ye. Her tiştê ku ew ji sale, purchase, project, hr_timesheet, sale_timesheet an modulek Helpdesk dizane, di dema xebatê de tê diyarkirin – ew li ser databaseke hesabkirinê ya tenê jî saz dibe û dixebite.
Piştre: Hesabdarî → Mişterî → Fature (an Dabînker → Fature), du an bêtir pêşnivîsan nîşan bikin, menûya çerxê → Fatureyên pêşnivîs bi hev re yek bike. Çalakî ji hemû bikarhênerên bi koma Hesabkirin / Faturekirin re berdest e.
Kesê ku ji guhertoyeke berê ya modulê nûve dike, divê carekê bi -u account_invoice_merge_draft --i18n-overwrite nûve bike, da ku navên qadên guherandî di wergera Almanî de bigihîjin. Sazkirineke nû ji vê bandor nabe.
Ji bo pêşdebiran: API û Hook
Yekkirin dikare ji koda xwe jî were bangkirin:
python
merged = draft_moves.merge_draft_moves(
extra_vals={"invoice_date": date(2026, 3, 31), "ref": "Q1"},
source_handling="cancel", # "delete" an "keep"
add_source_sections=True, # Sernav; standard True
)
merge_draft_moves UserError bi hemû sedemên redkirinê diavêje, heke hilbijartin nikaribe were yekkirin. _merge_draft_get_errors() heman sedeman wekî lîsteyek bêyî Exception vedigerîne.
Kesê ku girêdanên xwe yên vegerê li ser account.move hene, _merge_draft_relink bi ser ve dinivîse:
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}
)
Kesê ku girêdanek vegerê li ser rêza fatureyê heye, qet ji vê modulê re hewce nake: Hook ya Odoo ya xwe account.move.line._copy_data_extend_business_fields bes e, û qad di dema yekkirinê, betalkirinê û kopîkirinê de bi heman awayî tê girtin. Ji bo modulên Helpdesk yên din an şêweyeke din a sernavan _merge_draft_get_source_tickets() û _merge_draft_section_name() hene.
Berî ku li ser daneyên çalak bixebite hatiye ceribandin
48 ceribandin rewşên tevlihev, partnerên cuda, diravan û cureyên belgeyê, rêzên bi û bêyî fermana firotinê an kirînê, bac, beş û nîşe, dabeşkirinên navenda lêçûnê, veguhestina tomarkirina demê, her sê vebijarkên ji bo fatureyên çavkaniyê, arîkar û sernavan vedigirin – ku ew bi standard çalak in, ku vemirandina wan encama kevn heya santîmê ji nû ve çêdike, ku sernav ne mebleg û ne hesab hildigire, ku rêzên çavkaniyekê bi hev re dimînin, ku tîket bi hejmara xwe xuya dibe û qet bi ID ya databasê.
Daneyên ceribandinê li ser plana hesaban a heyî ya pargîdaniya çalak têne avakirin, li şûna AccountTestInvoicingCommon – ev Helper li ser databasên çalak ên koçkirî pir caran dest pê nake, û modul bi rastî li ser wan bixebite.
odoo-bin -d <db> -u account_invoice_merge_draft --test-enable \
--test-tags /account_invoice_merge_draft --stop-after-init
Wekî di her berfirehkirineke di warê hesabdariyê de, em pêşniyar dikin ku sazkirin pêşî di jîngeheke ceribandinê de bi kopiyeke databasa xwe were kontrolkirin.
Belaş û Open Source ji bo Odoo Community
Em li Biricon IT Services GmbH çareseriyan pêşî ji bo daxwazên konkret ên ji xebata xwe pêş dixin. Heke ji vê modulek bi gelemperî bikarhatî çêbibe, em naxwazin wê di sazkirineke tekane de veşêrin.
Merge Draft Invoices ji ber vê yekê belaş wekî projeyeke open source berdest e. Koda çavkaniyê dikare were dîtin, kontrolkirin, guherandin û di çarçoveya lîsansa AGPL-3 de pêşve were birin.
Armanca me ne kurtirîn fatureya gengaz bû, lê fatureyek ku di salekê de jî her rêz ji wê re ber bi siparî, tîket û tomara demê ya xwe ve vedigerîne.
Proje, koda çavkaniyê û beşdarî
Koda çavkaniyê ya temam, nîşaneyên sazkirinê û belgekirina teknîkî li ser GitHub berdest in:
Odoo 19 Merge Draft Invoices li ser GitHub vebike
Em ji ezmûnên pratîkî, raporên xeletiyê, pêşniyarên başkirinê û beşdariyên ji Odoo Community şad dibin.
Belaş. Şopandî. Open Source. Ji bo Odoo 19 Community.