Skip to Content

Odoo 19 Community: Setên hilberan di pêşniyarê de wekî beş – modûla me ya çavkaniya vekirî Sale Product Set Layout

2ê mijdara 2026 | Odoo 19 Community | Pêşxistina xwe
2026 sermawezê 2 by
Odoo 19 Community: Setên hilberan di pêşniyarê de wekî beş – modûla me ya çavkaniya vekirî Sale Product Set Layout

Modûla Odoo 19 Sale Product Set Layout: setên hilberan wekî beş di pêşniyarê de bi moda çapê, rêzên veşartî û bihayê sabît

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

  1. 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ş.
  2. 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.
  3. 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ê.
  4. 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 serbixweRê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îninBeşên di setê de dibin binbeş (line_subsection)
Wêneya çapê her tim wekhevModa çapê ji bo her setê, dema danînê dikare were guhertin
Rastkirina bihayê li ser pêşniyar û fatûreyê tê dîtinRêz dikare were veşartin, lê di kombera giştî de tê hesibandin
Biha tenê ji lîsteya bihayanBi vebijarkî bihayê sabît ji bo her rêza setê
Layout li pêşniyarê diqedeLayout û 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),
}

Sê wêneyên çapê yên heman seta hilberan: her rêz bi biha, tenê bihayê giştî, rêzeke yekane

Mod (print_mode)Nîşandan di setê deVebijarka standard di Odoo deWêneya çapê
detailedHer rêz bi bihatuneBeş, hemû rêz bi mîqdar
total_onlyRêz bêyî biha, tenê kombera setêcollapse_prices (Bihayan veşêre)Beş bi kombera giştî, rêz tenê bi nav û mîqdar
summaryTenê 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.

Rastkirina bihayê di backend de tê dîtin û nîşankirî ye, di çapa pêşniyar, PDF, fatûre û portalê de nayê dîtin, kombera giştî wekhev e

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.

Herika daneyan: seta hilberan, arîkarê Set lê zêde bike, rêzên pêşniyarê, rêzên fatûreyê, PDF û portala xerîdar

Model û qadên dirêjkirî

ModelZêdekirin
product.setQadên insert_as_section (Boolean, standard çalak) û print_mode (hilbijartin, qada mecbûrî, standard detailed)
product.set.lineQadê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.wizardQadên insert_as_section, section_name, print_mode; _prepare_order_lines() rêza beşê ava dike
sale.order / sale.order.lineQada 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.lineQada 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 compute a 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_unit tenê 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:

  1. Her du depoyên OCA bi awayekî sivik klon bikin (git clone --depth 1 --branch 19.0).
  2. 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î.
  3. Li ser databaseyeke testê saz bikin û kontrol bikin ka kîjan modûl di vê navberê de rewşa sazkirî distînin.
  4. 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

  1. 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.
  2. 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.
  3. Rêzên takekesî veşêrin: Di pêşniyar an fatûreyê de stûna Neçap bike çalak bikin.
  4. 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_report werdigire, 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.

Niha têkilî daynin

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.