Εισαγωγή
Στο Odoo, κάθε τύπος επιχειρησιακών δεδομένων —από παραγγελίες πώλησης μέχρι τιμολόγια και προϊόντα— αποθηκεύεται σε ένα μοντέλο. Το μοντέλο καθορίζει τη δομή των πεδίων και τον τρόπο αποθήκευσης στη βάση, επομένως κατανοώντας τα μοντέλα καταλαβαίνετε πώς «ζουν» τα δεδομένα στο σύστημα.
Η γνώση των μοντέλων του Odoo είναι απαραίτητη τόσο για προγραμματιστές όσο και για functional consultants. Τα μοντέλα αποτελούν τη ραχοκοκαλιά της αρχιτεκτονικής δεδομένων: ορίζουν πεδία, σχέσεις και επιχειρησιακό λογικό. Τα μοτίβα επαναλαμβάνονται σε όλο το σύστημα, γι’ αυτό μαθαίνοντας τα βασικά, αποκτάτε μεγάλη ευελιξία.
Εδώ στρέφουμε την προσοχή μας σε ένα από τα πιο κεντρικά μοντέλα του Odoo: το product.template. Είτε φτιάχνετε custom modules, είτε κάνετε διασυνδέσεις με τρίτα συστήματα, είτε ρυθμίζετε ηλεκτρονικά καταστήματα και καταλόγους, θα δουλέψετε συχνά με αυτό το μοντέλο.
Τι είναι το μοντέλο product.template
Το product.template αντιπροσωπεύει την «οικογένεια» προϊόντων που μοιράζονται τα βασικά χαρακτηριστικά αλλά έχουν παραλλαγές —π.χ. διαφορετικό μέγεθος ή χρώμα. Αντί να δημιουργείτε ξεχωριστή εγγραφή για κάθε εκδοχή, κρατάτε τα κοινά στο template και τα διαφοροποιημένα στις παραλλαγές.
Αυτό το μοντέλο εμφανίζεται σε πωλήσεις, προμήθειες, αποθήκη, e‑commerce και παραγωγή. Όταν προσθέτετε προϊόν στον κατάλογο, δημιουργείτε ένα product.template. Σε παραγγελίες ή στο site, οι χρήστες επιλέγουν τις παραλλαγές που προέρχονται από το template.
Το μοντέλο ορίζεται στο module product, ενώ άλλα modules το επεκτείνουν μέσω κληρονομικότητας μοντέλων. Το module των Πωλήσεων προσθέτει τιμολόγηση και διαδικασίες τιμολόγησης, των Προμηθειών χειρισμό προμηθευτών, η Αποθήκη προσθέτει παρακολούθηση αποθεμάτων —όλα προσθέτουν ό,τι χρειάζονται χωρίς να επαναλαμβάνουν τη βασική δομή.
Η διάκριση ανάμεσα σε product.template και product.product είναι κρίσιμη: το template περιέχει τα κοινά δεδομένα, ενώ το product.product είναι η συγκεκριμένη παραλλαγή με πεδία που αλλάζουν ανά SKU ή barcode.
Βασικά πεδία του μοντέλου
Ακολουθούν τα πιο σημαντικά πεδία του product.template —καλή γνώση αυτών θα σας βοηθήσει να διαχειρίζεστε σωστά προϊόντα και καταλόγους στο Odoo.
1. name
Τύπος: Char. Το εμφανιζόμενο όνομα του προϊόντος. Χρησιμοποιείται σε λίστες, φόρμες και αναφορές και αποτελεί το βασικό αναγνωριστικό του template.
2. create_date
Τύπος: Datetime. Η ημερομηνία και ώρα δημιουργίας της εγγραφής. Διαχειρίζεται αυτόματα από το Odoo και είναι χρήσιμη για auditing και αναφορές.
3. write_date
Τύπος: Datetime. Η τελευταία ημερομηνία τροποποίησης. Αυτόματο πεδίο που βοηθά στην παρακολούθηση αλλαγών.
4. active
Τύπος: Boolean. Σημαία «μη ενεργού» εγγραφής —όταν είναι False, το προϊόν αρχειοθετείται και δεν εμφανίζεται στις προεπιλεγμένες προβολές χωρίς να διαγράφεται μόνιμα.
5. sequence
Τύπος: Integer. Καθορίζει τη σειρά εμφάνισης σε λίστες και dropdowns. Μικρότερος αριθμός => εμφανίζεται πρώτος.
6. type
Τύπος: Selection. Κατηγορία προϊόντος: Consumable (καταναλώσιμο), Service (υπηρεσία) ή Storable (αποθηκευόμενο). Καθορίζει αν παρακολουθείται απόθεμα και ποια συμπεριφορά έχει.
7. categ_id
Τύπος: Many2one (product.category). Η κατηγορία προϊόντος που επηρεάζει reporting, default routes και οργάνωση καταλόγου. Οι κατηγορίες μπορούν να έχουν ιεραρχία.
8. list_price
Τύπος: Float. Η προτεινόμενη τιμή πώλησης που χρησιμοποιείται ως προεπιλογή στα προσφορές. Μπορεί να αντικατασταθεί από price lists ή τιμή παραλλαγής.
9. standard_price
Τύπος: Float. Το κόστος αγοράς/παραγωγής. Επιρρεάζει περιθώρια και αξίες αποθέματος—σημαντικό για οικονομικές αναλύσεις.
10. currency_id
Τύπος: Many2one (res.currency). Το νόμισμα στο οποίο εκφράζονται οι list_price και standard_price, συνήθως κληρονομείται από την εταιρεία.
11. uom_id
Τύπος: Many2one (uom.uom). Μονάδα μέτρησης πώλησης (τεμάχια, Kg, λίτρα κ.λπ.). Καθορίζει πώς εισάγονται και εμφανίζονται ποσότητες.
12. uom_po_id
Τύπος: Many2one (uom.uom). Μονάδα μέτρησης προμήθειας. Μπορεί να διαφέρει από τη uom_id για να καλύψει μετατροπές μεταξύ αγορών και πωλήσεων.
13. default_code
Τύπος: Char. Εσωτερικός κωδικός/αναφορά—συχνά χρησιμοποιείται ως SKU και για χαρτογραφήσεις με εξωτερικά συστήματα. Συνιστάται μοναδικότητα όπου είναι δυνατόν.
14. barcode
Τύπος: Char. Barcode για σκανάρισμα —χρήσιμο σε POS και αποθήκη. Συνήθως οι barcode για παραλλαγές αποθηκεύονται στο product.product.
15. description
Τύπος: Char. Εσωτερική περιγραφή ορατή μόνο σε εσωτερικούς χρήστες —χρήσιμο για σημειώσεις διαχείρισης προϊόντος.
16. description_sale
Τύπος: Text. Περιγραφή για τον πελάτη —εμφανίζεται σε προσφορές, τιμολόγια και στο website. Υποστηρίζει HTML για μορφοποίηση.
17. description_purchase
Τύπος: Text. Περιγραφή για προμηθευτές —εμφανίζεται σε αιτήματα αγοράς και τιμολόγια προμηθευτή, βοηθώντας στην επικοινωνία με τους προμηθευτές.
18. sale_ok
Τύπος: Boolean. Καθορίζει αν το προϊόν είναι διαθέσιμο προς πώληση. Αν False, το προϊόν δεν εμφανίζεται σε φόρμες πώλησης και προσφορών.
19. purchase_ok
Τύπος: Boolean. Καθορίζει αν το προϊόν μπορεί να αγοραστεί. Αν False, κρύβεται από φόρμες προμηθειών.
20. weight
Τύπος: Float. Βάρος προϊόντος —χρησιμοποιείται σε υπολογισμούς αποστολής και logistics. Η μονάδα εξαρτάται από τις ρυθμίσεις UoM της εταιρείας.
21. volume
Τύπος: Float. Όγκος προϊόντος —χρήσιμο για χωρητικότητα αποθηκών και προγραμματισμό logistics.
22. product_variant_ids
Τύπος: One2many (product.product). Λίστα παραλλαγών που προκύπτουν από το template. Κάθε variant κληρονομεί τα κοινά χαρακτηριστικά.
23. product_variant_count
Τύπος: Integer. Αριθμός παραλλαγών —υπολογίζεται από τα product_variant_ids και χρησιμοποιείται για εμφάνιση/φιλτράρισμα.
24. image_1920
Τύπος: Binary. Εικόνα προϊόντος. Το Odoo αποθηκεύει πολλαπλά μεγέθη εικόνων για χρήση σε φόρμες, αναφορές και website.
25. responsible_id
Τύπος: Many2one (res.users). Ο χρήστης υπεύθυνος για το προϊόν —χρήσιμο για ανάθεση εργασιών και διαχείριση προϊόντος.
26. company_id
Τύπος: Many2one (res.company). Σε multi‑company περιβάλλον, δηλώνει σε ποια εταιρεία ανήκει το προϊόν.
27. tax_ids
Τύπος: Many2many (account.tax). Οι φόροι πώλησης που εφαρμόζονται σε τιμολόγια και προσφορές.
28. supplier_tax_id
Τύπος: Many2many (account.tax). Οι φόροι προμηθειών που εφαρμόζονται σε λογαριασμούς προμηθευτών.
29. attribute_line_ids
Τύπος: One2many. Οι γραμμές χαρακτηριστικών που ορίζουν ποιες ιδιότητες (π.χ. Μέγεθος, Χρώμα) παράγουν παραλλαγές.
30. route_ids
Τύπος: Many2many (stock.route). Διαδρομές αποθήκης/τροφοδοσίας που ορίζουν πώς κινούνται τα προϊόντα (π.χ. Buy, Make to Order).
31. property_stock_production
Τύπος: Many2one (stock.location). Τοποθεσία παραγωγής για προϊόντα που κατασκευάζονται —χρήσιμο όταν το προϊόν είναι Storable και υπάρχει διαδρομή παραγωγής.
32. property_stock_inventory
Τύπος: Many2one (stock.location). Τοποθεσία προσαρμογής αποθέματος —χρησιμοποιείται σε απογραφές και διορθώσεις αποθέματος.
33. property_valuation
Τύπος: Selection. Μέθοδος αποτίμησης αποθέματος: Automated ή Manual —επηρεάζει τον τρόπο υπολογισμού κόστους.
34. property_cost_method
Τύπος: Selection. Μέθοδος κοστολόγησης: Standard ή FIFO —προσδιορίζει πώς υπολογίζεται η αξία αποθέματος.
35. property_account_income_id
Τύπος: Many2one (account.account). Λογαριασμός εσόδων για τις πωλήσεις του προϊόντος —χρησιμοποιείται στο τιμολόγιο.
36. property_account_expense_id
Τύπος: Many2one (account.account). Λογαριασμός εξόδων για τις αγορές —χρησιμοποιείται στα τιμολόγια προμηθευτών.
37. invoice_policy
Τύπος: Selection. Πολιτική τιμολόγησης: ανά παραγγελία (Ordered quantities) ή ανά παράδοση (Delivered quantities). Επηρεάζει την αναγνώριση εσόδων.
38. expense_policy
Τύπος: Selection. Πολιτική αναγνώρισης κόστους: Ordered ή Delivered —επηρεάζει το πότε καταχωρίζονται τα έξοδα.
39. service_type
Τύπος: Selection. Για υπηρεσίες: Manual, Timesheet ή Milestones —καθορίζει τον τρόπο παρακολούθησης και τιμολόγησης.
40. optional_product_ids
Τύπος: Many2many (product.template). Προτεινόμενα ή προαιρετικά προϊόντα για upsell —εμφανίζονται όταν προστίθεται το προϊόν σε προσφορά.
Πώς χρησιμοποιείται αυτό το μοντέλο στις επιχειρησιακές ροές εργασίας
1. Πωλήσεις και Προσφορές
Στις προσφορές, οι πωλητές επιλέγουν προϊόντα από τον κατάλογο. Το template δίνει τα κοινά χαρακτηριστικά και οι παραλλαγές —αν υπάρχουν— επιλέγονται για το τελικό SKU με συγκεκριμένο barcode/κωδικό.
2. Ηλεκτρονικό εμπόριο
Στο website οι πελάτες βλέπουν τον κατάλογο με templates. Μπροστά στην σελίδα προϊόντος επιλέγουν παραλλαγές (χρώμα, μέγεθος). Όλες οι κοινές περιγραφές και εικόνες προέρχονται από το template.
3. Προμήθειες και Προμηθευτές
Στις παραγγελίες αγοράς και στα τιμολόγια προμηθευτών συνδέεστε με προϊόντα που ελέγχονται από το product.template. Το πεδίο purchase_ok ελέγχει αν το προϊόν εμφανίζεται για αγορά, ενώ uom_po_id και supplier_tax_id καθορίζουν τη συμπεριφορά κατά την παραγγελία.
4. Αποθήκη και Παραγωγή
Οι κινήσεις αποθέματος και οι παραγγελίες παραγωγής αναφέρονται σε παραλλαγές. Το template καθορίζει routes, μέθοδο αποτίμησης και τρόπο κοστολόγησης —η παρακολούθηση αποθέματος γίνεται ανά παραλλαγή.
5. Τιμολόγηση
Σε τιμολόγια και λογαριασμούς, οι γραμμές προϊόντων βασίζονται σε template/παραλλαγές. Το template παρέχει φορολογικούς κανόνες και λογαριασμούς, ενώ η invoice_policy καθορίζει πότε αναγνωρίζεται το έσοδο.
Πώς το επεκτείνουν οι προγραμματιστές
Οι προγραμματιστές επεκτείνουν το product.template με διάφορα μοτίβα, βασικά μέσω της κληρονομικότητας μοντέλων του Odoo.
Κληρονομικότητα μοντέλων
Χρησιμοποιήστε _inherit = 'product.template' για να επεκτείνετε το μοντέλο. Με αυτόν τον τρόπο προσθέτετε νέα πεδία, αντικαθιστάτε μεθόδους ή προσθέτετε περιορισμούς χωρίς να αλλάζετε τον αρχικό κώδικα —καλή πρακτική για αναβαθμίσεις και συντήρηση.
Προσθήκη πεδίων
Ορίζετε νέα πεδία στο κληρονομημένο μοντέλο —Char, Many2one, Boolean, Integer, Text, Selection— και σκεφτείτε company-dependent πεδία αν χειρίζεστε multi‑company περιβάλλον.
Επεκτάσεις σε Python
Μπορείτε να υπερφορτώσετε create, write ή unlink για να ενσωματώσετε επιχειρησιακή λογική —χρησιμοποιήστε super() ώστε να καλείτε την αρχική συμπεριφορά. Προσοχή σε computed fields και στις εξαρτήσεις τους.
Odoo Studio
Το Odoo Studio επιτρέπει την προσθήκη πεδίων χωρίς κώδικα —γρήγορο για απλές αλλαγές. Όμως για σύνθετη λογική ή έργα με μακροπρόθεσμες αναβαθμίσεις προτιμώνται custom modules.
Καλές πρακτικές
- Τοποθετήστε σωστά τα δεδομένα: κοινά πεδία στο template και πεδία που αλλάζουν ανά SKU στο product.product.
- Ορίστε σωστά το categ_id ώστε να επηρεάζονται routing και αναφορές —οι κατηγορίες οδηγούν πολλές default συμπεριφορές.
- Χρησιμοποιήστε το default_code για χαρτογραφήσεις σε εξωτερικά συστήματα και κρατήστε το όσο γίνεται μοναδικό.
- Για integrations, προτιμήστε XML‑RPC ή JSON‑RPC. Το product.template είναι διαθέσιμο μέσω API στο Odoo —χαρτογραφήστε προσεκτικά εξωτερικά IDs για να αποφύγετε διπλοεγγραφές.
- Για custom πεδία, δώστε όνομα με πρόθεμα x_ ή με πρόθεμα του module σας ώστε να μειώσετε το ρίσκο συγκρούσεων σε μελλοντικές εκδόσεις του Odoo.
Συνηθισμένα λάθη
- Δημιουργία διπλών templates αντί χρήσης παραλλαγών —αν τα προϊόντα διαφοροποιούνται μόνο σε μέγεθος ή χρώμα, χρησιμοποιήστε attribute_line_ids και παραλλαγές, όχι ξεχωριστά templates.
- Σύγχυση μεταξύ product.template και product.product —όταν χρειάζεστε δεδομένα ανά SKU (barcode, SKU, κ.λπ.), δουλέψτε στο product.product.
- Ξεχασμένα sale_ok ή purchase_ok —προϊόντα με False σε αυτά τα πεδία δεν εμφανίζονται σε σχετικές φόρμες.
- Υπερφόρτωση πυρήνων με παράλειψη super() —αυτό μπορεί να σπάσει άλλες λειτουργίες ή να δυσκολέψει μελλοντικές αναβαθμίσεις.
- Προσθήκη απαιτούμενων custom πεδίων χωρίς default τιμή —υπάρχει κίνδυνος υπάρχουσες εγγραφές να αποτύχουν σε έλεγχο εγκυρότητας κατά αναβάθμιση.
Συμπέρασμα
Το product.template είναι κεντρικό στο Odoo: ορίζει τον τρόπο με τον οποίο ορίζουμε προϊόντα και κοινά χαρακτηριστικά. Κατανόηση των πεδίων και του τρόπου επέκτασης διευκολύνει τη ρύθμιση, την προσαρμογή και την ενσωμάτωση του Odoo.
Είτε χαρτογραφείτε καταλόγους ως functional consultant, είτε αναπτύσσετε custom λύσεις ως developer, ένα στιβαρό επίπεδο γνώσης για το product.template θα σας εξοικονομήσει χρόνο και θα μειώσει λάθη.
Ξεκινήστε με την Dasolo
Η Dasolo προσφέρει υπηρεσίες υλοποίησης, προσαρμογής και βελτιστοποίησης Odoo, με έμφαση στις API ενσωματώσεις και την ανάπτυξη. Η ομάδα μας έχει εμπειρία στην αρχιτεκτονική δεδομένων του Odoo και σε μοντέλα όπως το product.template.
Αν χρειάζεστε βοήθεια στην υλοποίηση του Odoo, σε custom modules ή integrations, μπορούμε να αναλάβουμε το έργο και να το σχεδιάσουμε μαζί σας. Κλείστε μια παρουσίαση για να συζητήσουμε το project σας.