Skip to Content

Odoo 19 Community: produktu-sortak eskaintzan atal gisa – gure kode irekiko modulua, Sale Product Set Layout

2026ko azaroaren 2a | Odoo 19 Community | Garapen propioa
2026(e)ko azaroakren 2(a) by
Odoo 19 Community: produktu-sortak eskaintzan atal gisa – gure kode irekiko modulua, Sale Product Set Layout

Odoo 19 Sale Product Set Layout modulua: produktu-sortak eskaintzan atal gisa, inprimatze-moduarekin, ezkutuko lerroekin eta prezio finkoarekin

Odoon paketeak saltzen dituenak, adibidez neurgailu bat osagarriekin eta muntaiarekin, lanpostu bat hardwarearekin eta konfigurazioarekin edo hainbat zerbitzuz osatutako mantentze-pakete bat, bi gauza behar ditu aldi berean eskaintzan: Osaera eskaeran agertu behar da, biltegiak, teknikariek eta fakturazioak zer entregatuko den jakin dezaten. Hala ere, bezeroarentzako inprimatuan ez da beti lerro bakoitza bere prezio indibidualarekin agertu behar.

sale_product_set OCA moduluak produktu-sortak (salmentarako materialen zerrendak) eskaintzan klik batez txertatzeko aukera ematen du. Inprimaketaren itxuraz ez du erabakitzen. Horretarako Sale Product Set Layout modulua (sale_product_set_layout) garatu dugu. Odoo 19rako idatzita dago eta software aske gisa, AGPL-3 lizentziapean, doan eskuragarri dago GitHuben:

github.com/Alex0176/odoo-sale-product-set-layout

Arazoa: inprimaketaren itxuran eraginik ez duten produktu-sortak

Odoon produktu-sorta kantitateak dituen produktu-zerrenda prestatu bat da. Hamar artikulu banan-banan bilatu beharrean, eskaintzan Gehitu sorta aukeratzen da eta lerro guztiak aldi berean jasotzen dira. Horrek denbora aurrezten du eta ahaztutako posizioak saihesten ditu. sale_product_set moduluak, biltegi honetatik datorrenak: OCA/sale-workflow hori egiten du; sortak berak product_set modulutik datoz, biltegi honetan: OCA/product-attribute.

Praktikan, hiru hutsune geratzen dira:

  • Talde-multzorik ez. Sortako lerroak eskaintzan posizio solte gisa geratzen dira. Txertatu ondoren ez da ikusten zein lerro doazen elkarrekin, eta sortaren guztizkoa ez dago inon.
  • Inprimatuan eraginik ez. Batzuetan bezeroak posizio guztiak prezioarekin ikusi behar ditu, beste batzuetan paketearen prezioa bakarrik, eta beste batzuetan lerro bakarra. Hori sorta bakoitzeko edo bezero bakoitzeko erabakia da, ez eskaintza bakoitzean eskuz berriro egin beharrekoa.
  • Prezio-zuzenketak itsusiak dira. Pakete batek prezio finko bat izatea nahi bada, prezio-zerrendako prezioen batura ez datorrena, zuzenketa-lerro bat behar da. Hori kalkuluan egon behar da, baina ez nahitaez bezeroaren paperean.

Odoo 19k eraikuntza-blokeak ekartzen ditu hau modu garbian konpontzeko: eskaintza-lerroetako atalak eta azpiatalak, Prezioak ezkutatu eta Osaera ezkutatu aukerekin (collapse_prices eta collapse_composition eremuak). Moduluak produktu-sorta ohiko aukera horiekin lotzen du, inprimatze-formatu propio bat asmatu beharrean.

Zer egiten duen moduluak

  1. Sorta atal gisa txertatu. Gehitu sorta morroiak atal-lerro bat sortzen du sortaren izenarekin, adibidez 2 × Neurketa-kit estandarra, eta sortako lerroak azpian jartzen ditu. Sortaren barruko atalak azpiatal bihurtzen dira.
  2. Sorta bakoitzeko inprimatze-modua. Sortan behin finkatzen da nola inprimatuko den. Txertatzean, morroian modua aldatu daiteke kasu horretarako soilik.
  3. Lerroak ezkutatu. Lerro bakoitza Ez inprimatu gisa markatu daiteke (sortan: Ezkutuan). Guztizkoan kontatzen dira, baina ez dira inprimatzen ez bezeroen atarian erakusten. Marka eskaintzatik fakturara pasatzen da.
  4. Sortako lerro bakoitzeko prezio finkoa. Sortako lerro batek banakako prezio finko bat izan dezake, prezio-zerrendako prezioa ordezkatzen duena, adibidez ezkutuko prezio-zuzenketa baterako.
Modulurik gabe (sale_product_set bakarrik)sale_product_set_layout moduluarekin
Sortako lerroak posizio solte gisaSortaren izena duen atal-lerroa, kantitatea izenean, lerroak azpian
Sortako atalak atal gisa geratzen dira eta egitura hausten duteSortako atalak azpiatal bihurtzen dira (line_subsection)
Inprimaketaren itxura beti berdinaSorta bakoitzeko inprimatze-modua, txertatzean alda daiteke
Prezio-zuzenketa ikusgai eskaintzan eta fakturanLerroa ezkutatu daiteke, baina guztizkoan kontatzen da
Prezioa prezio-zerrendatik soilikAukeran, sortako lerro bakoitzeko prezio finkoa
Itxura eskaintzan amaitzen daItxura eta ezkutatzea eskaintzan, eskaeran, fakturan eta bezeroen atarian aplikatzen dira

Hiru inprimatze-moduak zehatz-mehatz

Inprimatze-modua print_mode hautaketa-eremua da, produktu-sortan. Txertatzean atal-lerroaren ohiko bi etengailuetara itzultzen da. Horretarako, moduluan esleipen bakar eta erraz irakur daitekeen bat dago:

# Druckmodus -> (collapse_prices, collapse_composition) der Abschnittszeile
PRINT_MODE_FLAGS = {
    "detailed":   (False, False),
    "total_only": (True,  False),
    "summary":    (False, True),
}

Produktu-sorta beraren hiru inprimaketa-itxura: lerro bakoitza prezioarekin, guztizko prezioa soilik, lerro bakarra

Modua (print_mode)Sortan erakusteaOdooko ohiko aukeraInprimaketaren itxura
detailedLerro bakoitza prezioarekinbat ere ezAtala, lerro guztiak zenbatekoarekin
total_onlyLerroak prezio gabe, sortaren batura soilikcollapse_prices (Prezioak ezkutatu)Atala baturarekin, lerroak izena eta kantitatea soilik dituztela
summarySortaren baturaren lerro bakarra soilikcollapse_composition (Osaera ezkutatu)Baturaren atal-lerroa soilik

Moduluak Odoo 19ren ohiko aukerak erabiltzen dituenez eta ez inprimatze-formatu propiorik, eskaintzak, eskaera-berrespenak, fakturak eta bezeroen atariak ondo funtzionatzen dute txosten-txantiloi egokituen beharrik gabe. Atal-aukerak kontuan hartzen dituzten txosten-txantiloi propioak dituenak, portaera bera jasotzen du.

Ezkutuko lerroak eta prezio finkoa

Kasu arrunta: pakete batek paketearen prezio bat du, banakako prezioen batura baino baxuagoa. Banakako prezioak makurtu beharrean, prezio finkoko zuzenketa-lerro bat hartzen da (adibidez −50,00 € sorta bakoitzeko) eta ezkutatu egiten da. Backendean faktura jarraigarria da; inprimatuan paketearen prezioa agertzen da.

Prezio-zuzenketa backendean ikusgai eta markatuta, baina eskaintzaren, PDFaren, fakturaren eta atariaren inprimatuan ikusezina, batura berdina

Ulertzeko garrantzitsua: hide_in_report markak ez du kalkuluan ezer aldatzen. Kantitatea, prezioa, deskontua, zerga, baturak eta kontabilitate-idazpenak Odoo estandarraren bidez sortzen dira aldatu gabe. Lerroa inprimatuan eta atarian falta da soilik.

  • Produktu-sortan: sortako lerroa Ezkutuan aukerarekin eta, nahi izanez gero, Prezio finkoa eta Banakako prezioa aukerekin.
  • Eskaintza- eta faktura-lerroetan: Ez inprimatu zutabea (hide_in_report), sortarik gabeko lerro arruntetarako ere.
  • Transmisioa: Eskaeratik faktura sortzean, marka faktura-lerrora pasatzen da. Eskaintza kopiatzean, mantentzen da.

Ezarpen teknikoa

Modulua nahita txikia da: lehendik dauden ereduak zabaltzen ditu eta Odoo-k zein lerro inprimatuko diren eta sorta nola txertatuko den erabakitzen duen lekuak soilik gainidazten ditu. Ez dago txosten-txantiloi berririk, eredu berririk ez SQL esku-hartzerik.

Datu-fluxua: produktu-sorta, Gehitu sorta morroia, eskaintza-lerroak, faktura-lerroak, PDFa eta bezeroen ataria

Zabaldutako ereduak eta eremuak

EreduaGehigarria
product.setinsert_as_section (Boolean, lehenetsia aktibatuta) eta print_mode (hautaketa, derrigorrezko eremua, lehenetsia detailed) eremuak
product.set.linehide_in_report, fixed_price, price_unit eremuak; prepare_sale_order_line_values()-ek eskaintza-lerroari pasatzen dizkio
sale.product.set.wizardinsert_as_section, section_name, print_mode eremuak; _prepare_order_lines()-ek atal-lerroa eraikitzen du
sale.order / sale.order.linehide_in_report eremua (copy=True aukerarekin); _get_order_lines_to_report()-ek ezkutuko lerroak saltatzen ditu; _prepare_invoice_line()-ek marka pasatzen du
account.move / account.move.linehide_in_report eremua; _get_move_lines_to_report(), _get_detailed_lines() eta _get_subsection_lines()-ek ezkutuko lerroak iragazten dituzte; _get_aml_vals()-ek marka txostenaren datuetara eramaten du

Eskaintzan ezkutatzea

Odoo 19k inprimatu beharreko eskaintza-lerroak _get_order_lines_to_report() metodoan zehazten ditu. Moduluak iragazki bat erantsten dio. Ez da txosten-txantiloian esku-hartzerik behar: bai eskaintzaren txosten-txantiloiak (sale/report/ir_actions_report_templates.xml) bai ataria txantiloiak (sale/views/sale_portal_templates.xml) metodo hori deitzen dute:

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
        )

Fakturara transmititzea

Eskaintza-lerrotik faktura-lerroa sortzean (_prepare_invoice_line()), marka kopiatzen da. Fakturaren aldean, Odoo 19n lerroak txostenera iristeko hainbat bide daude: zerrenda nagusia, atal baten lerroak eta azpiatal baten lerroak. Horregatik moduluak hainbat lekutan iragazten du (_get_move_lines_to_report() agirian, _get_detailed_lines() eta _get_subsection_lines() lerroan); bestela, ezkutuko lerro bat beste bideetako batetik berriro azal liteke:

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")]

Morroia: lerro solteen ordez atala

sale_product_set moduluko sale.product.set.wizard morroiak eskaintza-lerroak _prepare_order_lines() metodoan sortzen ditu. Moduluak metodo hori gainidazten du. Atal gisa txertatu desaktibatuta badago, jatorrizko metodoa deitzen du besterik gabe, eta portaera OCA moduluan bezala geratzen da. Bestela, lehenik atal-lerroa sortzen da bi etengailu estandarrekin, eta ondoren sortako lerroak datoz. Sortaren barruko atalak azpiatal bihurtzen dira, egitura nagusia hauts ez dezaten:

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

Ikusten ez diren erabakiak

  • Kalkulu-metodo bereiziak morroian. Atalaren izenak, inprimatze-moduak eta Atal gisa txertatu aukerak bere compute metodo propioa dute (store=True, readonly=False). Hirurek metodo bera izango balute, eremu batean esplizituki pasatutako balio batek beste bi berrezarriko lituzke. Hori batez ere nabaritzen da morroia kodetik edo probetatik balioekin sortzen denean.
  • Atalaren izena kantitatearekin. Kantitatea 1 ez bada, izenean agertzen da (2 × Neurketa-kit estandarra, koma hamartar-bereizle gisa), inprimatuan bi sorta direla ikus dadin, eta ez kantitate bikoitzeko sorta bakarra.
  • Prezio finkoa produktu-lerroetan soilik. prepare_sale_order_line_values()-ek hide_in_report eta price_unit ezartzen ditu sortako lerroa atal- edo ohar-lerroa ez denean soilik.
  • Odoo estandarra, ez eraikuntza propioa. Inprimatze-moduak eta ezkutatzeak Odoo 19ren lotura-puntu (hook) eta eremu existenteak erabiltzen dituzte. Horrek eguneratzeak kudeagarri egiten ditu: Odoo-k txosten-txantiloia aldatzen badu, modulua baliagarria izaten jarraitzen du metodoak existitzen diren bitartean.

Instalazioa nahi ez diren albo-ondoriorik gabe

Baldintzak: Odoo 19.0, sale_product_set (OCA/sale-workflow, 19.0 adarra) eta product_set (OCA/product-attribute, 19.0 adarra). Moduluak berak sale_management, sale_product_set eta account moduluen menpe dago.

OCA moduluetako auto_install tranpa. OCA biltegi askok auto_install duten moduluak dituzte. Haien menpekotasunak eskuragarri egon bezain laster, Odoo-k galdetu gabe instalatzen ditu hurrengo instalazioan edo eguneraketan. Beraz, OCA biltegi osoa produkzio-instantzia baten addons_path-ean jartzen duenak, agian inork nahi ez zituen moduluak jasoko ditu. OCA/product-attribute biltegian, adibidez, purchase_product_template_tags moduluari eragiten dio. Gure prozedura:

  1. Bi OCA biltegiak azaleko klonatu (git clone --depth 1 --branch 19.0).
  2. Direktorio propio batean beharrezko bi moduluak soilik symlink bidez lotu eta direktorio hori gehitu addons_path-era, ez biltegi osoak.
  3. Proba-datu-base batean instalatu eta egiaztatu zein modulu geratzen diren instalatuta egoeran.
  4. Ondoren bakarrik instalatu produkzioan, --workers=0 aukerarekin, deiak martxan dagoen zerbitzuarekin HTTP portuagatik lehiatu ez dezan.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i sale_product_set_layout --stop-after-init

Eremu eta ikuspegi berriak instalatu ondoren datu-basean daude. Zerbitzua prozesu anitzeko moduan badabil, worker-ek aldatutako erregistroa datu-baseko seinalearen bidez birkargatzen dute. Moduluaren Python fitxategietako aldaketak zerbitzua berrabiarazi ondoren bakarrik dira eraginkorrak.

Erabilera pausoz pauso

  1. Sorta sortu: Salmentak → Produktuak → Produktu-sortak. Sortari izena eman, Atal gisa txertatu eta Inprimatze-modua aukeratu, produktuak kantitateekin sartu. Zuzenketa-lerroei Ezkutuan eta Prezio finkoa jarri.
  2. Eskaintzan: Gehitu sorta botoian klik egin, sorta eta kantitatea aukeratu. Atalaren izena eta inprimatze-modua txertatu aurretik alda daitezke.
  3. Lerro bakoitza ezkutatu: Eskaintzan edo fakturan Ez inprimatu zutabea aktibatu.
  4. Egiaztatu: Aurrebista edo PDFa ireki. Bezeroek atarian irudi bera ikusten dute.

Probak

Moduluak sei proba automatizatu ekartzen ditu, produkziora joan aurretik proba-datu-base batean exekutatzen ditugunak:

  • Atal gisa txertatzea, inprimatze-modua eta azpiatala barne
  • Ezkutuko lerroa ez dago inprimatu beharreko lerroen artean
  • Lerro bakarra modua (summary)
  • Atalik gabe txertatzea, jatorrizko portaera
  • Fakturak hide_in_report marka hartzen du, lerroa ez dago _get_move_lines_to_report()-en, atalaren baturak oraindik barne hartzen du
  • Guztizko prezioa soilik moduko fakturak ez du ezkutuko lerroa atal-lerroetan erakusten, atalaren batura osorik geratzen da
odoo-bin -d <testdatenbank> -i sale_product_set_layout \
         --test-enable --test-tags=/sale_product_set_layout --stop-after-init

Alemanerazko itzulpena i18n/de.po fitxategian dago.

Mugak eta ohar juridikoa

  • Itxura soilik. Moduluak ez du aldatzen Odoo-k prezioak, deskontuak edo zergak nola kalkulatzen dituen. Inprimatzen eta atarian erakusten dena soilik aldatzen du.
  • Ezkutuko lerroak backendean ikusgai daude. Markak inprimatuari eta atariari eragiten die, ez langileen pantaila-ikuspegiari.
  • Faktura-datuak egiaztatu. Ezkutuko lerroak guztizkoan kontatzen dira, baina ez daude agirian. Hori zure herrialdeko fakturen baldintzekin bateragarria den, adibidez entregatutako gauzen edo emandako zerbitzuen derrigorrezko deskribapenarekin, fakturetan erabili aurretik zure zerga-aholkularitzarekin argitu beharko zenuke. Eskaintzetan, ezkutatzea arazo gutxiagokoa da. Artikulua ez da lege-aholkularitza.
  • Odoo 19rako probatua. Modulua Odoo 19.0 Community-rako garatu eta probatu dugu. Odoo 19n horrela dauden atal-aukerak erabiltzen ditu. Beste bertsioetarako ez dugu egiaztatu.

Maiz egiten diren galderak

Zertarako behar dut modulua, Odoo 19k atalak badaki?

Atal-aukerak Odoo-n berean daude. Falta zena produktu-sortarekin lotura zen: sorta automatikoki atal gisa txertatu behar zen, sortan gordetako inprimatze-moduarekin. Modulurik gabe, txertatze bakoitzaren ondoren atal-lerroa eskuz sortu eta konfiguratu behar da.

Zer aldea dago “Prezioak ezkutatu” eta “Osaera ezkutatu” artean?

“Prezioak ezkutatu” (collapse_prices) aukerak lerroak mantentzen ditu, baina ez du zenbatekorik erakusten, atalaren batura soilik. “Osaera ezkutatu” (collapse_composition) aukerak lerroak guztiz ezkutatzen ditu; bezeroak baturadun atala soilik ikusten du.

Ezkutuko lerro batek fakturaren guztizkoan kontatzen du?

Bai. Ezkutuko lerroak baturan, zergan eta kontabilitate-idazpenean geratzen dira. Markak inprimatuko eta bezeroen atariko aurkezpenari soilik eragiten dio.

Inprimatze-modua txertatzean aldatu dezaket oraindik?

Bai. Modua sortatik datorren aurrezarpen gisa dator, eta morroian txertatze jakin baterako alda daiteke. Sorta bera aldatu gabe geratzen da.

Zer gertatzen da Atal gisa txertatu desaktibatzen badut?

Orduan morroiak sale_product_set OCA moduluan bezala jokatzen du: sortako lerroak atalik gabe txertatzen dira.

Moduluak espero ez diren beste modulu batzuk instalatzen ditu?

Moduluak berak ez. Hala ere, OCA biltegietan auto_install moduluak egon daitezke, biltegi osoak addons_path-ean jartzen badira. Beraz, lotu beharrezko bi moduluak soilik (ikus Instalazioa atala).

Modulua Odoo Enterprise-rekin funtzionatzen du?

Moduluak Community moduluen (sale_management, account) eta bi OCA moduluen menpe soilik dago. Odoo 19 Community-n erabiltzen dugu. Enterprise-n ez dugu probatu.

Zer lizentziapean dago modulua?

AGPL-3pean. Erabili, egokitu eta partekatu dezakezu, aldaketek lizentzia bera mantentzen duten bitartean. Akatsak eta hobekuntza-proposamenak Issue gisa ongi etorriak dira hemen: GitHub biltegia .

Biricon IT Services-en laguntza

Enpresa txiki eta ertainen Odoo instalazioak zaintzen ditugu: ezarpenetik hasita, egokitzapenetatik eta migrazioetatik eguneroko funtzionamendura arte. Odoo 19n produktu-sortak, eskaintza-txantiloiak edo txostenak zure lan-prozesuetara egokitu nahi badituzu, edo horrelako modulu bat aztertu eta zure produkzio-instantziara seguru eraman nahi baduzu, pozik lagunduko dizugu. Beste garapen propio batzuk gure blogean aurkituko dituzu, adibidez Faktura-zirriborroak batu eta Banku-ordainketak automatikoki fakturei esleitu.

Jarri gurekin harremanetan orain

Egoera: 2026ko azaroaren 2a. Moduluaren bertsioa 19.0.1.0.0. Irudietako adibide-datuak libreki aukeratuak dira, zenbatekoak garbi.