Εισαγωγή
Στο Odoo, τα μοντέλα καθορίζουν πώς δομούνται και αποθηκεύονται τα δεδομένα στη βάση δεδομένων. Κάθε κομμάτι επιχειρηματικών δεδομένων με το οποίο εργάζεστε, από παραγγελίες πωλήσεων μέχρι τιμολόγια και επαφές, ζει σε ένα μοντέλο.
Η κατανόηση των μοντέλων του Odoo είναι απαραίτητη τόσο για τους προγραμματιστές όσο και για τους λειτουργικούς συμβούλους. Τα μοντέλα είναι το θεμέλιο της αρχιτεκτονικής δεδομένων του Odoo. Καθορίζουν πεδία, σχέσεις και επιχειρηματική λογική.
Αυτό το άρθρο εστιάζει σε ένα από τα πιο σημαντικά μοντέλα στο module Πωλήσεων: sale.order.line. Είτε δημιουργείτε προσαρμοσμένα modules, είτε ενσωματώνετε εξωτερικά συστήματα, είτε διαμορφώνετε ροές εργασίας τιμολόγησης, θα εργαστείτε με αυτό το μοντέλο.
Τι είναι το μοντέλο sale.order.line
Το μοντέλο sale.order.line αντιπροσωπεύει μεμονωμένα στοιχεία γραμμής σε μια προσφορά ή παραγγελία πώλησης στο Odoo. Κάθε γραμμή συνήθως αντιστοιχεί σε ένα προϊόν, με πληροφορίες για την ποσότητα, την τιμή και τον φόρο.
Αυτό το μοντέλο στο Odoo χρησιμοποιείται από το module Πωλήσεων (sale). Κληρονομεί από το analytic.mixin για την παρακολούθηση κόστους έργου και την ενσωμάτωση ωρολογίων. Όταν προσθέτετε ένα προϊόν σε μια προσφορά, δημιουργείτε μια εγγραφή sale.order.line.
Το μοντέλο ορίζεται στο module sale. Άλλα modules το επεκτείνουν μέσω της κληρονομιάς μοντέλων του Odoo. Για παράδειγμα, το sale_stock προσθέτει πεδία που σχετίζονται με την παράδοση. Το sale_margin προσθέτει υπολογισμούς περιθωρίου. Κάθε module προσθέτει ό,τι χρειάζεται χωρίς να επαναλαμβάνει τη βασική δομή.
Κύρια πεδία στο μοντέλο
Ακολουθούν τα πιο σημαντικά πεδία Odoo στο μοντέλο sale.order.line. Η κατανόηση αυτών θα σας βοηθήσει να εργαστείτε αποτελεσματικά με προσφορές και παραγγελίες πώλησης.
1. order_id
Τύπος: Many2one (sale.order). Απαιτείται. Αναφορά στην γονική παραγγελία πώλησης. Αυτό το πεδίο συνδέει κάθε γραμμή με την γονική της. Οι γραμμές διαγράφονται όταν διαγράφεται η παραγγελία (cascade).
2. sequence
Τύπος: Integer. Προεπιλογή 10. Ελέγχει τη σειρά εμφάνισης των γραμμών στην παραγγελία. Χρησιμοποιείται για την ταξινόμηση τμημάτων, σημειώσεων και γραμμών προϊόντων.
3. company_id
Τύπος: Many2one (res.company). Σχετίζεται από το order_id. Χρησιμοποιείται για κανόνες πολλαπλών εταιρειών και έλεγχο πρόσβασης.
4. currency_id
Τύπος: Many2one (res.currency). Σχετίζεται από το order_id. Χρησιμοποιείται για όλα τα νομισματικά πεδία στη γραμμή. Διασφαλίζει τη σωστή νομισματική μονάδα για την τιμολόγηση.
5. order_partner_id
Τύπος: Many2one (res.partner). Σχετίζεται από το order_id. Ο πελάτης. Χρησιμοποιείται για τον τιμοκατάλογο και τους φορολογικούς κανόνες.
6. salesman_id
Τύπος: Many2one (res.users). Σχετίζεται από το order_id. Ο πωλητής. Χρησιμοποιείται για προμήθεια και αναφορές.
7. state
Τύπος: Επιλογή. Σχετίζεται από το order_id. Κατάσταση παραγγελίας (πρόχειρο, αποσταλεί, πώληση, ολοκληρώθηκε, ακυρώθηκε). Καθορίζει ποια πεδία είναι επεξεργάσιμα.
8. display_type
Τύπος: Επιλογή. Τιμές: line_section ή line_note. Όταν οριστεί, η γραμμή είναι επικεφαλίδα ενότητας ή σημείωση, όχι γραμμή προϊόντος. Τα πεδία προϊόντος είναι κενά.
9. is_downpayment
Τύπος: Boolean. Υποδεικνύει αν η γραμμή είναι προκαταβολή. Οι προκαταβολές τιμολογούνται ξεχωριστά.
10. is_expense
Τύπος: Boolean. Αληθές όταν η γραμμή προέρχεται από έξοδο ή τιμολόγιο προμηθευτή. Χρησιμοποιείται για την παρακολούθηση κόστους έργου.
11. product_id
Τύπος: Many2one (product.product). Το προϊόν που πωλείται. Ο τομέας περιορίζει σε πωλήσιμα προϊόντα. Απαιτείται για τις γραμμές προϊόντων.
12. product_template_id
Τύπος: Many2one (product.template). Υπολογίζεται από το product_id. Χρησιμοποιείται από τον διαμορφωτή προϊόντων για την επιλογή παραλλαγών.
13. name
Τύπος: Κείμενο. Η περιγραφή της γραμμής. Υπολογίζεται από το προϊόν και τις προσαρμοσμένες ιδιότητες. Περιλαμβάνει λεπτομέρειες παραλλαγών όταν είναι εφαρμόσιμο.
14. product_uom_qty
Τύπος: Float. Απαιτείται. Η ποσότητα που παραγγέλθηκε. Προεπιλογή 1.0. Μπορεί να καθοδηγείται από τη συσκευασία.
15. product_uom
Τύπος: Many2one (uom.uom). Μονάδα μέτρησης. Προεπιλογές από το προϊόν. Χρησιμοποιείται για την ποσότητα και την τιμολόγηση.
16. tax_id
Τύπος: Many2many (account.tax). Φόροι που εφαρμόζονται στη γραμμή. Υπολογίζεται από το προϊόν και τη φορολογική θέση.
17. price_unit
Τύπος: Float. Απαιτείται. Τιμή μονάδας ανά προϊόν_uom. Υπολογίζεται από τον τιμοκατάλογο ή το προϊόν. Μπορεί να παρακαμφθεί χειροκίνητα.
18. discount
Τύπος: Float. Ποσοστό έκπτωσης. Εφαρμόζεται στην τιμή μονάδας πριν από τον φόρο.
19. price_subtotal
Τύπος: Νομισματικό. Υποσύνολο πριν από τον φόρο. Υπολογίζεται από την ποσότητα, την τιμή μονάδας και την έκπτωση.
20. price_tax
Τύπος: Float. Συνολικό ποσό φόρου. Υπολογίζεται από το υποσύνολο τιμής και το tax_id.
21. price_total
Τύπος: Νομισματικό. Σύνολο συμπεριλαμβανομένου του φόρου. Το κύριο ποσό για την τιμολόγηση.
22. product_packaging_id
Τύπος: Many2one (product.packaging). Προαιρετική συσκευασία (π.χ. κουτί των 12). Όταν οριστεί, η ποσότητα μπορεί να καθοριστεί από τη συσκευασία.
23. customer_lead
Τύπος: Float. Χρόνος παράδοσης σε ημέρες. Ημέρες μεταξύ επιβεβαίωσης παραγγελίας και αποστολής. Χρησιμοποιείται για τον υπολογισμό της ημερομηνίας παράδοσης.
24. qty_delivered
Τύπος: Float. Ποσότητα που παραδόθηκε. Ενημερώνεται από κινήσεις αποθέματος ή χειροκίνητα. Χρησιμοποιείται για μερική τιμολόγηση.
25. qty_invoiced
Τύπος: Float. Ποσότητα που έχει ήδη τιμολογηθεί. Υπολογίζεται από τις γραμμές τιμολογίου.
26. qty_to_invoice
Τύπος: Float. Υπολειπόμενη ποσότητα προς τιμολόγηση. Υπολογίζεται από qty_delivered και qty_invoiced.
27. invoice_status
Τύπος: Επιλογή. Τιμές: upselling, τιμολογημένο, προς τιμολόγηση, όχι. Υποδεικνύει την κατάσταση τιμολόγησης για τη γραμμή.
28. invoice_lines
Τύπος: Many2many (account.move.line). Συνδέεται με τις γραμμές τιμολογίου που δημιουργήθηκαν από αυτή τη γραμμή πώλησης. Χρησιμοποιείται για ιχνηλασιμότητα.
29. create_date
Τύπος: Ημερομηνία και ώρα. Πότε δημιουργήθηκε η εγγραφή. Διαχειρίζεται αυτόματα από το Odoo.
30. write_date
Τύπος: Ημερομηνία και ώρα. Πότε τροποποιήθηκε τελευταία η εγγραφή. Χρησιμοποιείται για έλεγχο.
Πώς χρησιμοποιείται αυτό το μοντέλο σε επιχειρηματικές ροές εργασίας
1. Προσφορά και Παραγγελία Πώλησης
Όταν ένας πωλητής δημιουργεί μια προσφορά, προσθέτει προϊόντα. Κάθε προϊόν γίνεται μια sale.order.line. Οι γραμμές δείχνουν ποσότητα, τιμή, έκπτωση και σύνολο. Η παραγγελία επιβεβαιώνεται όταν ο πελάτης την αποδέχεται.
2. Τιμοκατάλογος και Εκπτώσεις
Οι τιμοκατάλογοι εφαρμόζονται ανά γραμμή. Τα πεδία price_unit και discount υπολογίζονται από τους κανόνες του τιμοκαταλόγου. Οι εκπτώσεις όγκου ή οι τιμές ειδικά για πελάτες διαχειρίζονται εδώ.
3. Παράδοση και Τιμολόγηση
Όταν παραδίδεται το απόθεμα, ενημερώνεται το qty_delivered. Η τιμολόγηση μπορεί να γίνει ανά παράδοση ή ταυτόχρονα. Το πεδίο invoice_status καθοδηγεί τον χρήστη σχετικά με το τι απομένει να τιμολογηθεί.
4. Έργο και Υπηρεσίες
Για προϊόντα υπηρεσιών, οι γραμμές συνδέονται με καθήκοντα έργου και ωρολόγια. Η κληρονομιά analytic.mixin επιτρέπει την παρακολούθηση κόστους ανά έργο.
5. Ηλεκτρονικό εμπόριο και Πύλη
Οι επισκέπτες της ιστοσελίδας προσθέτουν προϊόντα στο καλάθι. Κάθε γραμμή του καλαθιού γίνεται sale.order.line όταν δημιουργείται η παραγγελία. Ο διαμορφωτής προϊόντων χρησιμοποιεί το product_template_id και προσαρμοσμένα χαρακτηριστικά.
Πώς οι προγραμματιστές επεκτείνουν αυτό το μοντέλο
Οι προγραμματιστές επεκτείνουν το sale.order.line χρησιμοποιώντας διάφορα πρότυπα. Η κληρονομικότητα μοντέλου του Odoo είναι ο κύριος μηχανισμός.
Κληρονομικότητα Μοντέλου
Χρησιμοποιήστε _inherit = 'sale.order.line' για να επεκτείνετε το μοντέλο. Προσθέστε νέα πεδία, αντικαταστήστε μεθόδους ή προσθέστε περιορισμούς. Το κληρονομούμενο μοντέλο στο Odoo διατηρεί τις αλλαγές σας σε ένα ξεχωριστό module για εύκολες αναβαθμίσεις.
Προσθήκη Πεδίων
Ορίστε νέα πεδία Odoo στο κληρονομούμενο μοντέλο σας. Χρησιμοποιήστε τον σωστό τύπο πεδίου: Char, Many2one, Boolean, Integer, Text, Selection. Σκεφτείτε πεδία που εξαρτώνται από την εταιρεία για πολυεταιρικές ρυθμίσεις.
Επεκτάσεις Python
Αντικαταστήστε _compute_price_unit, _compute_price_subtotal, ή δημιουργήστε/γράψτε για να προσθέσετε λογική. Χρησιμοποιήστε super() για να καλέσετε το αρχικό. Να είστε προσεκτικοί με τα υπολογισμένα πεδία και τις εξαρτήσεις τους.
Odoo Studio
Το Odoo Studio σας επιτρέπει να προσθέτετε πεδία χωρίς κώδικα. Καλή επιλογή για γρήγορες προσαρμογές. Για πολύπλοκη λογική ή αναβαθμίσεις, τα προσαρμοσμένα modules είναι πιο συντηρήσιμα.
Καλές πρακτικές
- Χρησιμοποιήστε display_type για ενότητες και σημειώσεις αντί για ψεύτικες γραμμές προϊόντων. Αυτό διατηρεί τις αναφορές καθαρές.
- Όταν δημιουργείτε API integrations, δημιουργήστε γραμμές μέσω του order_id. Χρησιμοποιήστε το πεδίο order_line_ids στο sale.order με τη σωστή μορφή εντολής.
- Σεβαστείτε τους περιορισμούς SQL. Μια γραμμή προϊόντος πρέπει να έχει product_id και product_uom. Ένα τμήμα ή σημείωση πρέπει να έχει display_type.
- Για προσαρμοσμένες τιμές, χρησιμοποιήστε κανόνες τιμοκαταλόγου όταν είναι δυνατόν. Επαναφέρετε τις μεθόδους υπολογισμού μόνο όταν χρειάζεστε λογική που δεν υποστηρίζεται από τους τιμοκαταλόγους.
- Για προσαρμοσμένα πεδία, χρησιμοποιήστε το πρόθεμα
x_ή ένα πρόθεμα module για να αποφύγετε συγκρούσεις με μελλοντικές εκδόσεις του Odoo.
Κοινά λάθη
- Δημιουργία γραμμών χωρίς order_id. Το πεδίο είναι υποχρεωτικό. Δημιουργείτε πάντα γραμμές στο πλαίσιο μιας παραγγελίας.
- Ανακατεύοντας το product_id και το product_template_id. Για γραμμές προϊόντων, ορίστε το product_id. Για ροές διαμορφωτή, χρησιμοποιήστε το product_template_id για να επιλέξετε μια παραλλαγή.
- Τροποποίηση του price_unit ή της έκπτωσης μετά την τιμολόγηση. Μόλις το qty_invoiced είναι μεγαλύτερο από το μηδέν, οι αλλαγές τιμής μπορεί να προκαλέσουν ασυνέπειες.
- Επαναφορά βασικών μεθόδων χωρίς να καλείτε super(). Αυτό μπορεί να σπάσει άλλα modules ή μελλοντικές αναβαθμίσεις.
- Ξεχνώντας να ορίσετε το display_type για γραμμές τμήματος ή σημείωσης. Χωρίς αυτό, η γραμμή αντιμετωπίζεται ως γραμμή προϊόντος και θα αποτύχει στην επικύρωση.
Συμπέρασμα
Το μοντέλο sale.order.line είναι κεντρικό για τις πωλήσεις του Odoo. Αποθηκεύει κάθε γραμμή προϊόντος σε προσφορές και παραγγελίες. Η κατανόηση των πεδίων του και του τρόπου που τα modules το επεκτείνουν θα σας βοηθήσει να ρυθμίσετε, να προσαρμόσετε και να ενσωματώσετε το Odoo αποτελεσματικά.
Είτε είστε λειτουργικός σύμβουλος που χαρτογραφεί επιχειρηματικές διαδικασίες είτε προγραμματιστής που δημιουργεί προσαρμοσμένα modules, μια καλή κατανόηση του sale.order.line θα σας εξοικονομήσει χρόνο και θα αποτρέψει σφάλματα.
Χρειάζεστε βοήθεια με την υλοποίηση του Odoo σας;
Η Dasolo βοηθά τις εταιρείες να εφαρμόσουν, να προσαρμόσουν και να βελτιστοποιήσουν το Odoo. Ειδικευόμαστε σε API integrations και ανάπτυξη Odoo. Η ομάδα μας έχει βαθιά εμπειρία με την αρχιτεκτονική δεδομένων του Odoo και μοντέλα όπως το sale.order.line.
Αν χρειάζεστε βοήθεια με την υλοποίηση του Odoo, προσαρμοσμένα modules ή ενσωματώσεις, είμαστε εδώ για να βοηθήσουμε. Κλείστε μια επίδειξη για να συζητήσουμε το έργο σας.