Skip to Content

Odoo 19 Community: Settijiet tal-prodotti fl-offerta bħala sezzjoni – il-modulu open source tagħna Sale Product Set Layout

2 ta' Novembru 2026 | Odoo 19 Community | Żvilupp tagħna stess
2 ta’ Novembru 2026 by
Odoo 19 Community: Settijiet tal-prodotti fl-offerta bħala sezzjoni – il-modulu open source tagħna Sale Product Set Layout

Modulu Odoo 19 Sale Product Set Layout: settijiet tal-prodotti bħala sezzjoni fl-offerta b'modalità ta' stampar, linji moħbija u prezz fiss

Min ibigħ pakketti f'Odoo, pereżempju strument tal-kejl b'aċċessorji u installazzjoni, post tax-xogħol b'hardware u twaqqif, jew pakkett ta' manutenzjoni magħmul minn diversi servizzi, għandu bżonn żewġ affarijiet fl-istess ħin fl-offerta: Il-kompożizzjoni trid tidher fl-ordni, biex il-maħżen, it-tekniku u l-fatturazzjoni jkunu jafu x'se jiġi kkunsinnat. Fuq l-istampa għall-klijent, madankollu, mhux f'kull każ għandha tidher kull pożizzjoni individwali b'kull prezz individwali.

Il-modulu OCA sale_product_set jippermetti li settijiet tal-prodotti (listi tal-materjali għall-bejgħ) jiddaħħlu f'offerta b'klikk wieħed. Hu ma jiddeċiedix dwar id-dehra tal-istampa. Għal dan żviluppajna l-modulu Sale Product Set Layout (sale_product_set_layout). Huwa miktub għal Odoo 19 u disponibbli b'xejn fuq GitHub bħala softwer ħieles taħt il-liċenzja AGPL-3:

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

Il-problema: Settijiet tal-prodotti mingħajr influwenza fuq id-dehra tal-istampa

Sett tal-prodotti f'Odoo huwa lista mħejjija ta' prodotti bil-kwantitajiet. Minflok ma tfittex għaxar artikli wieħed wieħed, fl-offerta tagħżel Żid sett u tikseb il-linji kollha f'daqqa. Dan iffrankalek il-ħin u jevita pożizzjonijiet minsija. Il-modulu sale_product_set mir-repożitorju OCA/sale-workflow jagħmel eżattament dan; is-settijiet infushom ġejjin minn product_set fir-repożitorju OCA/product-attribute.

Fil-prattika jibqgħu tliet lakuni:

  • Ebda raggruppament rikonoxxibbli. Il-linji tas-sett jispiċċaw bħala pożizzjonijiet maħlula fl-offerta. Wara l-inserzjoni ma jibqax jidher liema linji jmorru flimkien, u t-total tas-sett ma jidher imkien.
  • Ebda influwenza fuq l-istampa. Kultant il-klijent għandu jara kull pożizzjoni bil-prezz, kultant biss il-prezz tal-pakkett, kultant linja waħda biss. Din hija deċiżjoni għal kull sett jew għal kull klijent, mhux li ssir bl-idejn għal kull offerta mill-ġdid.
  • Il-korrezzjonijiet tal-prezz mhumiex sbieħ. Jekk pakkett għandu jkollu prezz fiss li jvarja mis-somma tal-prezzijiet tal-lista, tinħtieġ linja ta' korrezzjoni. Din tappartjeni għall-kalkolu, iżda mhux neċessarjament fuq il-karta tal-klijent.

Odoo 19 jiġi bil-blokki bażiċi biex dan jissolva b'mod nadif: sezzjonijiet u subsezzjonijiet fil-linji tal-offerta bl-għażliet Aħbi l-prezzijiet u Aħbi l-kompożizzjoni (il-kampi collapse_prices u collapse_composition). Il-modulu jgħaqqad is-sett tal-prodotti ma' dawn l-għażliet standard, minflok ma jivvinta format tiegħu tal-istampar.

Dak li jagħmel il-modulu

  1. Daħħal is-sett bħala sezzjoni. L-assistent Żid sett joħloq linja ta' sezzjoni bl-isem tas-sett, pereżempju 2 × Messkit Standard, u jpoġġi l-linji tas-sett taħtha. Is-sezzjonijiet fi ħdan is-sett isiru subsezzjonijiet.
  2. Modalità ta' stampar għal kull sett. Fis-sett jiġi stabbilit darba kif jiġi stampat. Meta jiddaħħal, il-modalità tista' tinbidel fl-assistent għal dak il-każ wieħed.
  3. Aħbi l-linji. Linji individwali jistgħu jiġu mmarkati bħala Tistampax (fuq is-sett: Moħbi). Jingħaddu fit-total, iżda la jiġu stampati u lanqas murija fil-portal tal-klijent. Is-sinjal jinġarr mill-offerta għall-fattura.
  4. Prezz fiss għal kull linja tas-sett. Linja tas-sett tista' tkun fiha prezz fiss individwali li jieħu post il-prezz mil-lista tal-prezzijiet, pereżempju għal korrezzjoni tal-prezz moħbija.
Mingħajr il-modulu (biss sale_product_set)Bi sale_product_set_layout
Linji tas-sett bħala pożizzjonijiet maħlulaLinja ta' sezzjoni bl-isem tas-sett, kwantità fl-isem, linji taħtha
Is-sezzjonijiet fis-sett jibqgħu sezzjonijiet u jfarrku l-istrutturaIs-sezzjonijiet fis-sett isiru subsezzjonijiet (line_subsection)
Dehra tal-istampa dejjem l-istessModalità ta' stampar għal kull sett, tista' tinbidel meta jiddaħħal
Korrezzjoni tal-prezz viżibbli fuq l-offerta u l-fatturaLinja li tista' tinħeba, iżda tingħadd fit-total
Prezz biss mil-lista tal-prezzijietPrezz fiss b'mod fakultattiv għal kull linja tas-sett
Il-layout jieqaf mal-offertaIl-layout u l-ħbi japplikaw għall-offerta, l-ordni, il-fattura u l-portal tal-klijent

It-tliet modalitajiet ta' stampar fid-dettall

Il-modalità ta' stampar hija qasam ta' għażla print_mode fuq is-sett tal-prodotti. Meta jiddaħħal, tiġi tradotta fiż-żewġ swiċċijiet standard tal-linja tas-sezzjoni. Għal dan, fil-modulu hemm mappjar wieħed biss, faċli biex jinqara:

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

Tliet dehriet tal-istampa tal-istess sett tal-prodotti: kull linja bil-prezz, biss il-prezz totali, linja waħda biss

Modalità (print_mode)Wiri fis-settGħażla standard f'OdooDehra tal-istampa
detailedKull linja bil-prezzxejnSezzjoni, il-linji kollha bl-ammont
total_onlyLinji mingħajr prezzijiet, biss it-total tas-settcollapse_prices (Aħbi l-prezzijiet)Sezzjoni bit-total, linji biss bid-deskrizzjoni u l-kwantità
summaryLinja waħda biss bit-total tas-settcollapse_composition (Aħbi l-kompożizzjoni)Biss il-linja tas-sezzjoni bit-total

Peress li l-modulu juża l-għażliet standard ta' Odoo 19 u mhux format tiegħu tal-istampar, l-offerta, il-konferma tal-ordni, il-fattura u l-portal tal-klijent jaħdmu mingħajr mudelli tar-rapporti adattati. Min għandu mudelli tar-rapporti tiegħu li jqisu l-għażliet tas-sezzjonijiet, jikseb l-istess imġiba wkoll.

Linji moħbija u prezz fiss

Każ frekwenti: Pakkett għandu prezz tal-pakkett li jkun taħt is-somma tal-prezzijiet individwali. Minflok ma jiġu mgħawġa l-prezzijiet individwali, tittieħed linja ta' korrezzjoni b'prezz fiss (pereżempju −50,00 € għal kull sett) u titħeba. Fil-backend il-fattura tkun traċċabbli, fl-istampa jidher il-prezz tal-pakkett.

Korrezzjoni tal-prezz viżibbli u mmarkata fil-backend, mhux viżibbli fl-istampa tal-offerta, tal-PDF, tal-fattura u tal-portal, total identiku

Importanti għall-fehim: Is-sinjal hide_in_report ma jbiddel xejn fil-kalkolu. Kwantità, prezz, skont, taxxa, totali u entrati kontabbli jinħolqu bla tibdil minn Odoo standard. Il-linja sempliċement tkun nieqsa fl-istampa u fil-portal.

  • Fuq is-sett tal-prodotti: Linja tas-sett b'Moħbi u fakultattivament Prezz fiss flimkien mal-Prezz individwali.
  • Fuq il-linji tal-offerta u tal-fattura: Kolonna Tistampax (hide_in_report), anke għal-linji normali mingħajr sett.
  • Trasmissjoni: Meta tinħoloq il-fattura mill-ordni, is-sinjal jiġi trasferit fuq il-linja tal-fattura. Meta tikkopja offerta, jinżamm.

Implimentazzjoni teknika

Il-modulu huwa żgħir apposta: Jestendi mudelli eżistenti u jisbaq biss il-postijiet fejn Odoo jiddeċiedi liema linji jiġu stampati u kif jiddaħħal sett. M'hemmx mudelli ġodda tar-rapporti, m'hemmx mudelli ġodda u m'hemmx interventi SQL.

Fluss tad-data: sett tal-prodotti, assistent Żid sett, linji tal-offerta, linji tal-fattura, PDF u portal tal-klijent

Mudelli u kampi estiżi

MudellŻieda
product.setKampi insert_as_section (Boolean, awtomatikament attiv) u print_mode (għażla, qasam obbligatorju, awtomatikament detailed)
product.set.lineKampi hide_in_report, fixed_price, price_unit; prepare_sale_order_line_values() jgħaddihom lill-linja tal-offerta
sale.product.set.wizardKampi insert_as_section, section_name, print_mode; _prepare_order_lines() jibni l-linja tas-sezzjoni
sale.order / sale.order.lineQasam hide_in_report (b'copy=True); _get_order_lines_to_report() jaqbeż il-linji moħbija; _prepare_invoice_line() jgħaddi s-sinjal
account.move / account.move.lineQasam hide_in_report; _get_move_lines_to_report(), _get_detailed_lines() u _get_subsection_lines() jiffiltraw il-linji moħbija; _get_aml_vals() iġorr is-sinjal fid-data tar-rapport

Ħbi fl-offerta

Odoo 19 jiddetermina l-linji tal-offerta li għandhom jiġu stampati f'_get_order_lines_to_report(). Il-modulu jehmeż filtru hemmhekk. Intervent fil-mudell tar-rapport mhuwiex meħtieġ: Kemm il-mudell tar-rapport tal-offerta (sale/report/ir_actions_report_templates.xml) kif ukoll il-mudell tal-portal (sale/views/sale_portal_templates.xml) isejħu dan il-metodu:

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
        )

Trasmissjoni fuq il-fattura

Meta tinħoloq il-linja tal-fattura mil-linja tal-offerta (_prepare_invoice_line()), is-sinjal jiġi kkupjat. Fuq in-naħa tal-fattura, f'Odoo 19 hemm diversi toroq li bihom il-linji jaslu fir-rapport: il-lista prinċipali, il-linji ta' sezzjoni u l-linji ta' subsezzjoni. Għalhekk il-modulu jiffiltra f'diversi postijiet (_get_move_lines_to_report() fuq id-dokument, _get_detailed_lines() u _get_subsection_lines() fuq il-linja), inkella linja moħbija tista' terġa' tidher minn waħda mit-toroq l-oħra:

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

L-assistent: Sezzjoni minflok linji maħlula

L-assistent sale.product.set.wizard minn sale_product_set joħloq il-linji tal-offerta f'_prepare_order_lines(). Il-modulu jisbaq dan il-metodu. Jekk Daħħal bħala sezzjoni ikun mitfi, sempliċement isejjaħ il-metodu oriġinali, u l-imġiba tibqa' bħal fil-modulu OCA. Inkella tinħoloq l-ewwel il-linja tas-sezzjoni biż-żewġ swiċċijiet standard, u warajha jiġu l-linji tas-sett. Is-sezzjonijiet fi ħdan is-sett isiru subsezzjonijiet, biex ma jfarrkux l-istruttura prinċipali:

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

Deċiżjonijiet li ma jidhrux

  • Metodi ta' kalkolu separati fl-assistent. L-isem tas-sezzjoni, il-modalità ta' stampar u Daħħal bħala sezzjoni għandhom kull wieħed metodu compute tiegħu (store=True, readonly=False). Li kieku t-tlieta kellhom l-istess metodu, valur mgħoddi b'mod espliċitu għal qasam kien iwaqqaf lill-oħrajn. Dan jidher l-aktar meta l-assistent jinħoloq mill-kodiċi jew mit-testijiet b'valuri.
  • Isem tas-sezzjoni bil-kwantità. Meta l-kwantità tkun differenti minn 1, tidher fl-isem (2 × Messkit Standard, bil-virgola bħala separatur deċimali), biex fl-istampa wieħed jaf li huma żewġ settijiet u mhux sett wieħed b'kwantità doppja.
  • Prezz fiss biss fuq linji tal-prodotti. prepare_sale_order_line_values() jistabbilixxi hide_in_report u price_unit biss jekk il-linja tas-sett ma tkunx linja ta' sezzjoni jew ta' nota.
  • Odoo standard minflok żvilupp tagħna. Il-modalità ta' stampar u l-ħbi jużaw hooks u kampi eżistenti ta' Odoo 19. Dan jagħmel l-aġġornamenti ġestibbli: Jekk Odoo jibdel il-mudell tar-rapport, il-modulu jibqa' validu sakemm il-metodi jkomplu jeżistu.

Installazzjoni mingħajr effetti sekondarji mhux mixtieqa

Rekwiżiti: Odoo 19.0, sale_product_set (OCA/sale-workflow, fergħa 19.0) u product_set (OCA/product-attribute, fergħa 19.0). Il-modulu nnifsu jiddependi minn sale_management, sale_product_set u account.

Il-ħabs tal-auto_install fil-moduli OCA. Ħafna repożitorji OCA fihom moduli b'auto_install. Hekk kif jinsabu d-dipendenzi tagħhom, Odoo jinstallahom mingħajr ma jistaqsi fl-installazzjoni jew fl-aġġornament li jmiss. Min għalhekk ipoġġi r-repożitorju OCA sħiħ fl-addons_path ta' istanza produttiva, jista' jikseb moduli li ħadd ma ried. B'OCA/product-attribute dan jolqot, pereżempju, purchase_product_template_tags. Il-proċedura tagħna:

  1. Ikklona ż-żewġ repożitorji OCA b'mod baxx (git clone --depth 1 --branch 19.0).
  2. F'direttorju separat orbot permezz ta' symlink biss iż-żewġ moduli meħtieġa u żid dan id-direttorju fl-addons_path, mhux ir-repożitorji kollha.
  3. Installa fuq database tat-test u ivverifika liema moduli jiksbu l-istatus installat b'dan.
  4. Biss imbagħad installa f'produzzjoni, b'--workers=0, biex is-sejħa ma tikkompetix mas-servizz li jaħdem għall-port HTTP.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i sale_product_set_layout --stop-after-init

Kampi u views ġodda jkunu fid-database wara l-installazzjoni. Jekk is-servizz jaħdem f'modalità ta' proċessi multipli, il-workers iniżżlu mill-ġdid ir-registry mibdul permezz tas-sinjal tad-database. Bidliet fil-fajls Python tal-modulu jsiru effettivi biss wara li s-servizz jerġa' jinbeda.

Użu pass pass

  1. Oħloq sett: Bejgħ → Prodotti → Settijiet tal-prodotti. Semmi s-sett, agħżel Daħħal bħala sezzjoni u Modalità ta' stampar, daħħal il-prodotti bil-kwantitajiet. Agħti lil-linji ta' korrezzjoni Moħbi u Prezz fiss.
  2. Fl-offerta: Ikklikkja fuq Żid sett, agħżel is-sett u l-kwantità. L-isem tas-sezzjoni u l-modalità ta' stampar jistgħu jinbidlu qabel l-inserzjoni.
  3. Aħbi linji individwali: Fl-offerta jew fil-fattura attiva l-kolonna Tistampax.
  4. Ivverifika: Iftaħ il-preview jew il-PDF. L-istess preżentazzjoni jarawha l-klijenti fil-portal.

Testijiet

Il-modulu jiġi b'sitt testijiet awtomatizzati, li nwettqu fuq database tat-test qabel ma xi ħaġa tmur fil-produzzjoni:

  • Inserzjoni bħala sezzjoni inkluża l-modalità ta' stampar u s-subsezzjoni
  • Linja moħbija ma tkunx fost il-linji li għandhom jiġu stampati
  • Modalità Linja waħda (summary)
  • Inserzjoni mingħajr sezzjoni, l-imġiba oriġinali
  • Il-fattura tieħu s-sinjal hide_in_report, il-linja ma tkunx f'_get_move_lines_to_report(), it-total tas-sezzjoni xorta jinkludiha
  • Il-fattura fil-modalità Biss il-prezz totali ma turix il-linja moħbija fil-linji tas-sezzjoni, it-total tas-sezzjoni jibqa' sħiħ
odoo-bin -d <testdatenbank> -i sale_product_set_layout \
         --test-enable --test-tags=/sale_product_set_layout --stop-after-init

It-traduzzjoni Ġermaniża tinsab f'i18n/de.po.

Limiti u avviż legali

  • Layout biss. Il-modulu ma jbiddilx kif Odoo jikkalkula l-prezzijiet, l-iskonti jew it-taxxi. Jibdel biss dak li jiġi stampat u murija fil-portal.
  • Il-linji moħbija huma viżibbli fil-backend. Is-sinjal jolqot l-istampa u l-portal, mhux il-wiri fuq l-iskrin tal-impjegati.
  • Ivverifika d-dettalji tal-fattura. Il-linji moħbija jingħaddu fit-total, iżda ma jidhrux fuq id-dokument. Jekk dan huwiex kompatibbli mar-rekwiżiti għall-fatturi f'pajjiżek, pereżempju mad-deskrizzjoni preskritta tal-oġġetti kkunsinnati jew tas-servizzi pprovduti, għandek tikkjarifika qabel l-użu fuq il-fatturi mal-konsulent tat-taxxa tiegħek. Fuq l-offerti l-ħbi huwa inqas problematiku. L-artikolu mhuwiex konsulenza legali.
  • Ittestjat għal Odoo 19. Żviluppajna u ttestjajna l-modulu għal Odoo 19.0 Community. Juża għażliet tas-sezzjonijiet li jeżistu f'din il-forma f'Odoo 19. Għal verżjonijiet oħra ma ivverifikajnihx.

Mistoqsijiet frekwenti

Għala għandi bżonn il-modulu jekk Odoo 19 diġà jaf isezzjona?

L-għażliet tas-sezzjonijiet jeżistu f'Odoo nnifsu. Kienet nieqsa r-rabta mas-sett tal-prodotti: Sett kellu jiddaħħal awtomatikament bħala sezzjoni, bil-modalità ta' stampar mniżżla fis-sett. Mingħajr il-modulu wieħed irid joħloq u jikkonfigura l-linja tas-sezzjoni bl-idejn wara kull inserzjoni.

Kif jiddifferenzjaw “Aħbi l-prezzijiet” u “Aħbi l-kompożizzjoni”?

“Aħbi l-prezzijiet” (collapse_prices) iħalli l-linji, iżda ma juri ebda ammont, biss it-total fuq is-sezzjoni. “Aħbi l-kompożizzjoni” (collapse_composition) jaħbi l-linji għal kollox, il-klijent jara biss is-sezzjoni bit-total.

Linja moħbija tingħadd fit-total tal-fattura?

Iva. Il-linji moħbija jibqgħu fit-total, fit-taxxa u fl-entrata kontabbli. Is-sinjal jolqot biss il-preżentazzjoni fuq l-istampa u fil-portal tal-klijent.

Nista' nbiddel il-modalità ta' stampar meta ndaħħal?

Iva. Il-modalità tiġi bħala suġġeriment mis-sett, u fl-assistent tista' tinbidel għal dik l-inserzjoni partikolari. Is-sett innifsu jibqa' bla tibdil.

X'jiġri jekk intefi Daħħal bħala sezzjoni?

Allura l-assistent iġib ruħu bħal fil-modulu OCA sale_product_set: Il-linji tas-sett jiddaħħlu mingħajr sezzjoni.

Il-modulu jinstalla moduli oħra mhux mistennija?

Il-modulu nnifsu le. Fir-repożitorji OCA, madankollu, jistgħu jkunu hemm moduli b'auto_install jekk jitqiegħdu repożitorji sħaħ fl-addons_path. Għalhekk orbot biss iż-żewġ moduli meħtieġa (ara t-taqsima Installazzjoni).

Il-modulu jaħdem ma' Odoo Enterprise?

Il-modulu jiddependi biss minn moduli Community (sale_management, account) u miż-żewġ moduli OCA. Aħna nużawh fuq Odoo 19 Community. Fuq Enterprise ma ttestjajnihx.

Taħt liema liċenzja huwa l-modulu?

Taħt l-AGPL-3. Tistgħu tużawh, tadattawh u tqassmuh, sakemm il-bidliet jibqgħu taħt l-istess liċenzja. Żbalji u suġġerimenti għal titjib huma milqugħa bħala issue fuq repożitorju GitHub .

Appoġġ minn Biricon IT Services

Aħna nieħdu ħsieb installazzjonijiet Odoo għal impriżi żgħar u medji: mill-introduzzjoni, permezz ta' adattamenti u migrazzjonijiet, sat-tħaddim kontinwu. Jekk tixtiequ tadattaw settijiet tal-prodotti, mudelli tal-offerti jew rapporti f'Odoo 19 għall-proċessi tagħkom, jew jekk tixtiequ tivverifikaw modulu bħal dan u ġġibuh b'mod sigur fl-istanza produttiva tagħkom, aħna lesti nassistukom. Żviluppi oħra tagħna stess issibuhom fil-blog tagħna, pereżempju Għaqqad l-abbozzi tal-fatturi u Assenja awtomatikament il-ħlasijiet bankarji lill-fatturi.

Ikkuntattjana issa

Data: 2 ta' Novembru 2026. Verżjoni tal-modulu 19.0.1.0.0. Id-data tal-eżempju fl-illustrazzjonijiet hija magħżula liberament, ammonti netti.