Kesê ku di Odoo de pakêtan difiroşe, mînak amûrek pîvandinê bi pêvek û sazkirinê, cihê kar bi hardware û sazkirinê, an pakêta xizmeta lênêrînê ji çend xizmetan, di pêşniyarê de du tiştan bi hev re hewce dike: Pêkhate divê di fermanê de hebe, da ku embar, teknîk û fatûrekirin bizanin çi tê radestkirin. Lê li ser çapa ji bo xerîdar divê her cara her pozîsyonek bi her bihayekî xwe neyê nîşandan.
Modûla OCA sale_product_set dihêle ku setên hilberan (lîsteyên parçeyan ji bo firotinê) bi yek klîkê di pêşniyarekê de werin danîn. Ew li ser wêneya çapê biryar nade. Ji bo wê me modûla Sale Product Set Layout (sale_product_set_layout) pêş xist. Ew ji bo Odoo 19 hatiye nivîsandin û wekî nermalava azad di bin lîsansa AGPL-3 de belaş li GitHub heye:
github.com/Alex0176/odoo-sale-product-set-layout
Pirsgirêk: Setên hilberan bêyî bandor li ser wêneya çapê
Seta hilberan di Odoo de lîsteyeke amadekirî ya hilberan bi mîqdaran e. Li şûna ku deh hilberan yek bi yek bigerin, di pêşniyarê de Set lê zêde bike tê hilbijartin û hemû rêz bi carekê têne. Ev wext xilas dike û pozîsyonên ji bîr çûyî asteng dike. Modûla sale_product_set ji depoya OCA/sale-workflow tam vê yekê dike; setên bi xwe ji product_set ya di depoya OCA/product-attribute.
tên. Di pratîkê de sê kêmasî dimînin:
- Komkirineke diyar tune. Rêzên setê wekî pozîsyonên serbixwe di pêşniyarê de dimînin. Piştî danînê êdî nayê dîtin ka kîjan rêz bi hev ve girêdayî ne, û tevahiya setê li ti derê nayê nîşandan.
- Bandor li ser çapê tune. Carinan divê xerîdar her pozîsyonê bi bihayê bibîne, carinan tenê bihayê pakêtê, carinan jî tenê rêzek yekane. Ev biryarek e ji bo her setê an her xerîdarî, ne ku her pêşniyarekê ji nû ve bi destan.
- Rastkirinên bihayê ne xweş in. Heke pakêtek bihayekî sabît hebe ku ji kombera bihayên lîsteyê cuda ye, rêzeke rastkirinê pêwîst e. Ew di hesabkirinê de cih digire, lê ne hewce ye ku li ser kaxeza xerîdar be.
Odoo 19 bloqên avakirinê yên ji bo çareserkirina vê bi awayekî paqij tîne: beş û binbeş di rêzên pêşniyarê de bi vebijarkên Bihayan veşêre û Pêkhateyê veşêre (qadên collapse_prices û collapse_composition). Modûl seta hilberan bi van vebijarkên standard ve girê dide, li şûna ku formateke çapê ya xwe bi dest bixe.
Modul çi dike
- Setê wekî beş têxe. Arîkarê Set lê zêde bike rêzeke beşê bi navê setê diafirîne, mînak 2 × Messkit Standard, û rêzên setê di bin wê de datîne. Beşên di hundirê setê de dibin binbeş.
- Moda çapê ji bo her setê. Di setê de carekê tê diyarkirin ka çawa were çapkirin. Dema danînê, moda ji bo wê rewşa yekane di arîkar de dikare were guhertin.
- Rêzan veşêre. Rêzên takekesî dikarin wekî Neçap bike (di setê de: Veşartî) bên nîşankirin. Ew di kombera giştî de tên hesibandin, lê ne têne çapkirin û ne jî di portala xerîdar de têne nîşandan. Nîşan ji pêşniyarê diçe fatûreyê.
- Bihayê sabît ji bo her rêza setê. Rêzeke setê dikare bihayê yekîneyê yê sabît hilgire ku bihayê ji lîsteya bihayan diguherîne, mînak ji bo rastkirineke bihayê ya veşartî.
Bêyî modûlê (tenê sale_product_set) | Bi sale_product_set_layout |
|---|---|
| Rêzên setê wekî pozîsyonên serbixwe | Rêzeke beşê bi navê setê, mîqdar di nav navê de, rêz di bin de |
| Beşên di setê de wekî beş dimînin û avahiyê diqetînin | Beşên di setê de dibin binbeş (line_subsection) |
| Wêneya çapê her tim wekhev | Moda çapê ji bo her setê, dema danînê dikare were guhertin |
| Rastkirina bihayê li ser pêşniyar û fatûreyê tê dîtin | Rêz dikare were veşartin, lê di kombera giştî de tê hesibandin |
| Biha tenê ji lîsteya bihayan | Bi vebijarkî bihayê sabît ji bo her rêza setê |
| Layout li pêşniyarê diqede | Layout û veşartin ji bo pêşniyar, ferman, fatûre û portala xerîdar derbasdar in |
Sê modên çapê bi hûrgilî
Moda çapê qadeke hilbijartinê ye, print_mode, li ser seta hilberan. Ew dema danînê di du guhêzkerên standard ên rêza beşê de tê wergerandin. Ji bo wê di modûlê de yek diyarkirina hêsan a xwendinê heye:
# Druckmodus -> (collapse_prices, collapse_composition) der Abschnittszeile
PRINT_MODE_FLAGS = {
"detailed": (False, False),
"total_only": (True, False),
"summary": (False, True),
}
Mod (print_mode) | Nîşandan di setê de | Vebijarka standard di Odoo de | Wêneya çapê |
|---|---|---|---|
detailed | Her rêz bi biha | tune | Beş, hemû rêz bi mîqdar |
total_only | Rêz bêyî biha, tenê kombera setê | collapse_prices (Bihayan veşêre) | Beş bi kombera giştî, rêz tenê bi nav û mîqdar |
summary | Tenê rêzek bi kombera setê | collapse_composition (Pêkhateyê veşêre) | Tenê rêza beşê bi kombera giştî |
Ji ber ku modûl vebijarkên standard ên Odoo 19 bi kar tîne û ne formateke çapê ya xwe, pêşniyar, pejirandina fermanê, fatûre û portala xerîdar bêyî şablonên rapora adaptekirî dixebitin. Kesên ku şablonên rapora xwe hene û vebijarkên beşan li ber çavan digirin, heman tevgerê jî distînin.
Rêzên veşartî û bihayê sabît
Rewşeke gelemperî: Pakêtek bihayekî pakêtê heye ku ji kombera bihayên yekane kêmtir e. Li şûna ku bihayên yekane werin xwar kirin, rêzeke rastkirinê bi bihayê sabît (mînak −50,00 € ji bo her setê) tê girtin û tê veşartin. Di backend de fatûre bi hêsanî tê şopandin, li ser çapê bihayê pakêtê heye.
Ji bo fêmkirinê girîng e: Nîşana hide_in_report ti guhertinê li hesabkirinê nake. Mîqdar, biha, daxistin, bac, kombera giştî û tomarên hesabê bêyî guhertin ji Odoo ya standard derdikevin. Rêz tenê ji çapê û portalê winda ye.
- Li ser seta hilberan: Rêza setê bi Veşartî û bi vebijarkî Bihayê sabît bi Bihayê yekîneyê re.
- Li ser rêzên pêşniyar û fatûreyê: Stûna Neçap bike (
hide_in_report), ji bo rêzên normal bêyî set jî. - Veguhastin: Dema fatûre ji fermanê tê afirandin, nîşan li ser rêza fatûreyê tê barkirin. Dema pêşniyarek tê kopîkirin, nîşan dimîne.
Pêkanîna teknîkî
Modûl bi zanebûn piçûk e: Ew modelên heyî dirêj dike û tenê cihên ku Odoo lê biryar dide kîjan rêz têne çapkirin û setek çawa tê danîn li ser dinivîse. Şablonên rapora nû, modelên nû û destwerdanên SQL tune ne.
Model û qadên dirêjkirî
| Model | Zêdekirin |
|---|---|
product.set | Qadên insert_as_section (Boolean, standard çalak) û print_mode (hilbijartin, qada mecbûrî, standard detailed) |
product.set.line | Qadên hide_in_report, fixed_price, price_unit; prepare_sale_order_line_values() wan ber bi rêza pêşniyarê ve dişîne |
sale.product.set.wizard | Qadên insert_as_section, section_name, print_mode; _prepare_order_lines() rêza beşê ava dike |
sale.order / sale.order.line | Qada hide_in_report (bi copy=True); _get_order_lines_to_report() rêzên veşartî derbas dike; _prepare_invoice_line() nîşanê ber bi pêş ve dişîne |
account.move / account.move.line | Qada hide_in_report; _get_move_lines_to_report(), _get_detailed_lines() û _get_subsection_lines() rêzên veşartî fîltre dikin; _get_aml_vals() nîşanê dixe nav daneyên raporê |
Veşartin di pêşniyarê de
Odoo 19 rêzên pêşniyarê yên ku divê werin çapkirin di _get_order_lines_to_report() de diyar dike. Modûl li wir fîltreyekê zêde dike. Destwerdana di şablona raporê de ne pêwîst e: Hem şablona raporê ya pêşniyarê (sale/report/ir_actions_report_templates.xml) û hem jî şablona portalê (sale/views/sale_portal_templates.xml) vê rêbazê gazî dikin:
class SaleOrder(models.Model):
_inherit = "sale.order"
def _get_order_lines_to_report(self):
return super()._get_order_lines_to_report().filtered(
lambda line: not line.hide_in_report
)
Veguhastin ji bo fatûreyê
Dema rêza fatûreyê ji rêza pêşniyarê tê afirandin (_prepare_invoice_line()), nîşan tê kopîkirin. Li aliyê fatûreyê di Odoo 19 de çend rê hene ku rêz bi wan dikevin raporê: lîsteya sereke, rêzên beşekê û rêzên binbeşekê. Ji ber vê yekê modûl di çend cihan de fîltre dike (_get_move_lines_to_report() li ser belgeyê, _get_detailed_lines() û _get_subsection_lines() li ser rêzê), wekî din rêzeke veşartî dikare bi yek ji rêyên din ve dîsa xuya bibe:
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
hide_in_report = fields.Boolean(string="Hidden in report")
def _get_aml_vals(self, hide_taxes):
res = super()._get_aml_vals(hide_taxes)
res["hide_in_report"] = self.hide_in_report
return res
def _get_detailed_lines(self, children_lines, direct_children_lines, subsection_lines):
res = super()._get_detailed_lines(children_lines, direct_children_lines, subsection_lines)
return [vals for vals in res if not vals.get("hide_in_report")]
def _get_subsection_lines(self, subsection_line, children_lines):
res = super()._get_subsection_lines(subsection_line, children_lines)
return [vals for vals in res if not vals.get("hide_in_report")]
Arîkar: Beş li şûna rêzên serbixwe
Arîkarê sale.product.set.wizard ji sale_product_set rêzên pêşniyarê di _prepare_order_lines() de diafirîne. Modûl vê rêbazê li ser dinivîse. Heke Wekî beş têxe girtî be, ew bi hêsanî rêbaza eslî gazî dike, tevger wekî di modûla OCA de dimîne. Wekî din pêşî rêza beşê bi du guhêzkerên standard tê afirandin, paşê rêzên setê têne. Beşên di hundirê setê de dibin binbeş, da ku avahiya sereke neqetînin:
def _prepare_order_lines(self):
if not self.insert_as_section:
return super()._prepare_order_lines()
sequence = self._get_max_sequence() + 1
collapse_prices, collapse_composition = PRINT_MODE_FLAGS[self.print_mode or "detailed"]
order_lines = [Command.create({
"display_type": "line_section",
"name": self.section_name or self.product_set_id.name,
"sequence": sequence,
"collapse_prices": collapse_prices,
"collapse_composition": collapse_composition,
})]
for set_line in self._get_lines():
sequence += 1
values = set_line.prepare_sale_order_line_values(self.order_id, self.quantity, sequence)
if values.get("display_type") == "line_section":
values["display_type"] = "line_subsection"
order_lines.append(Command.create(values))
return order_lines
Biryarên ku nayên dîtin
- Rêbazên hesabkirinê yên cuda di arîkar de. Navê beşê, moda çapê û Wekî beş têxe her yek rêbazeke
computea xwe hene (store=True,readonly=False). Heke her sê heman rêbazê bi kar bianîna, nirxeke bi eşkereyî hatî dayîn ji bo qadekê dê yên din ji nû ve saz bikira. Ev bi taybetî dema arîkar ji kodê an testan bi nirxan tê afirandin xuya dibe. - Navê beşê bi mîqdarê. Dema mîqdar ji 1 cuda be, ew di nav navê de ye (2 × Messkit Standard, bi kumayê wekî nîşana deh), da ku di çapê de were dîtin ku du set in û ne setek bi mîqdara du caran.
- Bihayê sabît tenê li ser rêzên hilberê.
prepare_sale_order_line_values()hide_in_reportûprice_unittenê saz dike dema rêza setê ne rêzeke beşê an nîşeyê be. - Odoo ya standard li şûna avakirina xwe. Moda çapê û veşartin hook û qadên heyî yên Odoo 19 bi kar tînin. Ev nûvekirinan kontrolkirî dike: Heke Odoo şablona raporê biguherîne, modûl derbasdar dimîne heya ku rêbaz bimînin.
Sazkirin bêyî bandorên nexwestî
Pêdivî: Odoo 19.0, sale_product_set (OCA/sale-workflow, şaxê 19.0) û product_set (OCA/product-attribute, şaxê 19.0). Modûl bi xwe bi sale_management, sale_product_set û account ve girêdayî ye.
Xefika auto_install di modûlên OCA de. Gelek depoyên OCA modûlên bi auto_install dihewînin. Gava girêdayîbûnên wan hebin, Odoo di sazkirin an nûvekirina paşê de bêyî pirsê wan jî saz dike. Kesê ku ji ber vê yekê depoyên OCA yên tevahî di addons_path ya nimûneyeke berhemdar de datîne, dibe ku modûlên ku kes nexwestibû bistîne. Di OCA/product-attribute de ev mînak purchase_product_template_tags e. Rêbaza me:
- Her du depoyên OCA bi awayekî sivik klon bikin (
git clone --depth 1 --branch 19.0). - Di peldankeke xwe de tenê her du modûlên pêwîst bi symlink girê bidin û vê peldankê têxin
addons_path, ne depoyên tevahî. - Li ser databaseyeke testê saz bikin û kontrol bikin ka kîjan modûl di vê navberê de rewşa sazkirî distînin.
- Tenê paşê di berhemdariyê de saz bikin, bi
--workers=0, da ku bangkirin bi karûbarê ku dixebite re ji bo portê HTTP nekeve pêşbaziyê.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i sale_product_set_layout --stop-after-init
Qadên nû û dîmenên nû piştî sazkirinê di databaseyê de ne. Heke karûbar di modela pir-pêvajoyî de bixebite, workers registry-ya guhertî bi navgîniya sînyala databaseyê ji nû ve bar dikin. Guhertinên di dosiyên Python yên modûlê de tenê piştî ji nû ve destpêkirina karûbarê çalak dibin.
Karanîn gav bi gav
- Setê biafirîne: Firotin → Hilber → Setên hilberan. Navê setê bidin, Wekî beş têxe û Moda çapê hilbijêrin, hilberan bi mîqdaran binivîsin. Rêzên rastkirinê bi Veşartî û Bihayê sabît bidin.
- Di pêşniyarê de: Li ser Set lê zêde bike bikirtînin, set û mîqdarê hilbijêrin. Navê beşê û moda çapê berî danînê dikarin werin guhertin.
- Rêzên takekesî veşêrin: Di pêşniyar an fatûreyê de stûna Neçap bike çalak bikin.
- Kontrol bikin: Pêşdîtin an PDF vekin. Xerîdar heman nîşandanê di portalê de dibînin.
Test
Modûl şeş testên otomatîk tîne, ku em berî ku tiştek here berhemdariyê li hember databaseyeke testê dimeşînin:
- Danîn wekî beş tevî moda çapê û binbeş
- Rêzeke veşartî di rêzên ji bo çapê de tune ye
- Moda Yek rêz (
summary) - Danîn bêyî beş, tevgera eslî
- Fatûre nîşana
hide_in_reportwerdigire, rêz di_get_move_lines_to_report()de tune ye, kombera beşê hê jî wê dihewîne - Fatûre di moda Tenê bihayê giştî de rêza veşartî di rêzên beşê de nîşan nade, kombera beşê temam dimîne
odoo-bin -d <testdatenbank> -i sale_product_set_layout \
--test-enable --test-tags=/sale_product_set_layout --stop-after-init
Wergera almanî di i18n/de.po de ye.
Sînor û nîşeya hiqûqî
- Tenê layout. Modûl nayê guhertin ka Odoo çawa biha, daxistin an bacan hesab dike. Ew tenê diguherîne ka çi tê çapkirin û di portalê de tê nîşandan.
- Rêzên veşartî di backend de tên dîtin. Nîşan li ser çap û portalê bandor dike, ne li ser dîmena ekranê ya karmendan.
- Agahiyên fatûreyê kontrol bikin. Rêzên veşartî di kombera giştî de tên hesibandin, lê li ser belgeyê nînin. Gelo ev bi daxwazên ji bo fatûreyan di welatê we de lihevhatî ye, mînak bi danasîna mecbûrî ya tiştên radestkirî an xizmetên pêşkêşkirî, divê hûn berî karanîna li ser fatûreyan bi şêwirmendiya xwe ya bacê re zelal bikin. Di pêşniyaran de veşartin kêmtir pirsgirêk e. Ev nivîs şêwirmendiya hiqûqî nîne.
- Ji bo Odoo 19 hatiye testkirin. Me modûl ji bo Odoo 19.0 Community pêş xistiye û testkiriye. Ew vebijarkên beşan bi kar tîne ku bi vî awayî di Odoo 19 de hene. Me ew ji bo guhertoyên din kontrol nekiriye.
Pirsên pir tên pirsîn
Ez çima modûlê hewce dikim, gava Odoo 19 jixwe beşan dizane?
Vebijarkên beşan di Odoo de bi xwe hene. Girêdana bi seta hilberan re kêm bû: Setek divê bixweber wekî beş were danîn, bi moda çapê ya ku di setê de hatiye tomarkirin. Bêyî modûlê divê piştî her danînê rêza beşê bi destan were afirandin û mîheng kirin.
“Bihayan veşêre” û “Pêkhateyê veşêre” çawa ji hev cuda ne?
“Bihayan veşêre” (collapse_prices) rêzan dihêle, lê mîqdaran nîşan nade, tenê kombera li beşê. “Pêkhateyê veşêre” (collapse_composition) rêzan bi temamî vedişêre, xerîdar tenê beşê bi kombera giştî dibîne.
Gelo rêzeke veşartî di kombera fatûreyê de tê hesibandin?
Erê. Rêzên veşartî di kombera giştî, bac û tomarkirinê de dimînin. Nîşan tenê li ser nîşandana li ser çap û di portala xerîdar de bandor dike.
Ez dikarim moda çapê dema danînê hê jî biguherînim?
Erê. Mod wekî nirxa pêşwext ji setê tê, di arîkar de ew ji bo danîna têkildar dikare were guhertin. Set bi xwe di vê navberê de nayê guhertin.
Heke ez Wekî beş têxe bigirim çi dibe?
Wê demê arîkar mîna di modûla OCA sale_product_set de tevdigere: Rêzên setê bêyî beş têne danîn.
Gelo modûl bi awayekî nedîtî modûlên din saz dike?
Modûl bi xwe na. Lê di depoyên OCA de, heke hûn depoyên tevahî têxin addons_path, dikare modûlên auto_install derkevin. Ji ber vê yekê tenê her du modûlên pêwîst bi symlink girê bidin (li beşa Sazkirin binêrin).
Gelo modûl bi Odoo Enterprise re dixebite?
Modûl tenê bi modûlên Community ve girêdayî ye (sale_management, account) û her du modûlên OCA. Em wê li ser Odoo 19 Community bi kar tînin. Li ser Enterprise me ew test nekiriye.
Modûl di bin kîjan lîsansê de ye?
Di bin AGPL-3 de. Hûn dikarin wê bi kar bînin, biguherînin û belav bikin, heya ku guhertin di bin heman lîsansê de bimînin. Çewtî û pêşniyarên başkirinê wekî Issue li depoya GitHub bi xêr hatine.
Piştgirî ji Biricon IT Services
Em sazkirinên Odoo ji bo karsaziyên biçûk û navîn digirin ser xwe: ji destpêkirinê, adaptasyon û koçberiyan heya xebata domdar. Heke hûn dixwazin setên hilberan, şablonên pêşniyaran an raporan di Odoo 19 de bi rêgezên xwe re biguncînin, an jî heke hûn dixwazin modûleke mîna vê kontrol bikin û bi ewlehî têxin nimûneya xwe ya berhemdar, em bi dilxweşî piştgiriyê didin we. Pêşxistinên din ên xwe hûn dikarin di bloga me de bibînin, mînak Yekkirina fatûreyên pêşnivîs û Bi awayekî otomatîk dayîna bankê bi fatûreyan re hevrû kirin.
Rewş: 2ê mijdara 2026. Guhertoya modûlê 19.0.1.0.0. Daneyên nimûneyê yên di wêneyan de bi azadî hatine hilbijartin, mîqdar net.