Price Collection
Το Price Collection είναι το επόμενο επίπεδο της εφαρμογής Mobile World μετά το Merchandising. Έχει ως σκοπό την καταγραφή και τη σύγκριση της πορείας των τιμών της αγοράς για τα προϊόντα του πελάτη και των ανταγωνιστών του.
Αυτό το αρχείο αποτελεί επέκταση του InfoDevel/Product-Specs/Module Document.md και θα είναι η βάση πάνω στην οποία θα αναπτυχθεί το feature του Price Collection.
Εφεξής, με την ονομασία 'Price Collection' δεν εννοούμε γενικά το module αλλά το πρώτο σκέλος του που είναι η καταγραφή και η σύγκριση τιμών με ανταγωνιστικά προϊόντα.
Components
PriceCollection Documents
PriceCollection Documents Page
Αφού έχω ανοίξει μέρα, έχω διαλέξει επίσκεψη, στο μενού των εργασιών της επίσκεψης θα προστεθεί ένα module που θα αφορά το PriceCollection.
Το PriceCollectionDocumentsPage είναι ένα list view με όλα τα παραστατικά που έχω δημιουργήσει. θέλω να φαίνεται το tradersite στο header του page.
Το κάθε list item για τα documents θα έχει τουλάχιστον τις εξής πληροφορίες: DocumentType.Name, DocumentSeries.Name, DocumentNumber, Date, πλήθος γραμμών. Το ανοικτό Document που δεν έχει ακόμα αρίθμηση δεν θ δείχνει το συγκεκριμένο πεδίο. Για κάθε ένα item θα υπάρχει ένα information icon που θα μας πηγαίνει στο PriceCollectionDocumentDetailsPage όπου θα φαίνονται μόνο τα details του document που έχουν καταχωρηθεί στη βάση και όλα τα πεδία θα είναι readonly.
Στο PriceCollectionDocumentsPage θα υπάρχει το action add(+ Νέο Παραστατικό).
Πατώντας add δημιουργείται το παραστατικό και με πηγαίνει στο edit mode (navigation σε νέο page PriceCollectionDocumentDetailsPage).
Στο παραστατικό καταχωρείται χωρίς ενέργεια χρήστη η εξής πληροφορία:
- H ημερομηνία και ώρα επίσκεψης (την βάζει αυτόματα η εφαρμογή)
- Ο χρήστης της συσκευής (τα 2 αυτά υπάρχουν στο VisitLogin)
- Το status του παραστατικού ως ανοικτό.
- Στο νέο παραστατικό είσαγεται αυτόματα η αρίθμηση, τύπο, σειρά και κατάσταση
Σε κάθε επίσκεψη μπορώ να έχω ένα ανοικτό παραστατικό. Αν έχω ήδη ένα ανοικτό παραστατικό τότε το κουμπί add είναι disabled.
Σε κάθε νέο visit θα μπορώ να δημιουργήσω νέο παρασταικό και να βλέπω τα προηγούμενα κλειστά της ημέρας σε μορφή read-only.
PriceCollection Document Details Page
Η επεξεργασία του παραστατικού γίνεται στο PriceCollectionDocumentDetailsPage. Στο Header της σελίδας φαίνεται το Trader Site, ο τύπος παραστατικού και ημερομηνία. Στο header υπάρχει ένα κουμπί το οποίο ανοίγει ένα popup ώστε να εισάγω σχόλια για το παραστατικό. Η σελίδα γενικά περιλαμβάνει
- Φίλτρα για τα είδη
- Τα αντίστοιχα materials (τα δικά μου) μαζί με τα competitormaterials σε λίστα
Τα φίλτρα και η αναζήτηση/scanning είναι στο αριστερό μέρος της οθόνης. Μπορώ να σκανάρω ένα barcode χρησιμοποιόντας τη κάμερα της συσκευής μέσω του κουμπιού "Scan". Μπορώ να ψάξω ένα είδος με βάση το κωδικό του μέσα από το πεδίο αναζήτησης. Με το "Search" κουμπί στη συσκευή, εμφανίζονται τα αποτελέσματα.
Στα φίλτρα μπορώ να επιλέξω
- GroupItems (κατηγορία προϊόντος),
- Competitor (Ανταγωνιστής)
- Assortment (αν θα δείχνω όλα τα materials ή μόνο όσα συνδέονται με το traderSite μέσω assortment).
- Επίσης, υπάρχει 4ο πεδίο αναζήτησης που επιτρέπει την αναζήτηση είτε με CompetitorMaterials.MaterialAlterCode.AlterCode.Code είτε με Scanner.
Τα φίλτρα έχουν default τιμή την επιλογή "Χωρίς επιλογή" και δεν φορτώνει τίποτα. (συγκεκριμένα το loading γίνεται μόνο αν έχω ειλέξει GroupItem ή έχω κάνει αναζήτησης/scanning) Μπορώ να φέρω είδη με βάση την ομάδα ειδών, συγκεκριμένου ανταγωνιστή ή με βάση κάποιου assortment. Μπορώ να αποκλείσω από την προβολή όλα τα είδη ανταγωνιστών. Το κουμπί "Καθαρισμός φίλτρων" καθαρίζει ότι επιλογές έχει κάνει ο χρήστης και αδιάζει τη λίστα. - Το φίλτρο GroupItem έχει και επιλογή "Όλα" - Στην συνέχεια με κάθε ενημέρωση του φίλτρου κάνω refresh
Η λίστα δεν φορτώνει τίποτα κατά την εμφάνιση του page αν δεν γίνει χρήση του φίλτρου ή της αναζήτησης/scanning. Το μήνυμα της άδειας λίστας θα είναι προτροπή για την επιλογή των φίλτρων. Η λίστα γεμίζει με είδη καθώς κάνω scroll down σε αυτή
Τα items πρεπει να είναι ομαδοποιημένα ανά material με πρώτο το δικό μου και μετά θα έχω ένα item ανά altercode των ανταγωνιστών.
Κάθε αντικείμενο που επιλέγω γίνεται highlight και μπορώ να δω τα details του στη δεξιά πλευρά της σελίδας. Τα είδη του πελάτη είναι χρωματισμένα με μπλε χρώμα ενώ τα είδη του κάθε ανταγωνιστή είναι χρωματισμένα με κίτρινο. Όταν ο χρήστης επιλέξει ένα listItem, μπορεί να ενημερώσει τα πεδία του από το section στο δεξί μέρος της οθόνης.
Το details section παίρνει ως item το selected της λίστας και,
- Πάνω δεξία βλέπω πάντα το όνομα του εταιρικού είδους.
- Ο χρήστης καταχωρεί την νέα τιμή (PriceCollectionDocumentDetail.CurrentPrice).
- Καταχωρεί αν το είδος ανταγωνισμού είναι σε προσφορά (HasPromotion) ή δεν υπάρχει (NotExists)
- Ράφι
- Όψεις
- Καταχωρεί σχόλια (Remarks) ανά γραμμή παραστατικού.
- Το κουμπί "Καθαρισμός απαντήσεων" επαναφέρει τα πεδία εισαγωγής στην αρχική τους κατάσταση.
Το PriceCollectionDocument.PriceCollectionDocumentDetails στην βάση μου ενημερώνεται με το selection νέου item. Αν έγινε κάποια καταχώρηση στα πεδία αποθηκεύω, αλλιώς το αγνοώ. Στην πράξη δεν μπορώ να έχω κενές γραμμές, δλδ γραμμές που έχουν όλα null στα πεδία που συμπληρώνει ο χρήστης.
Ο χρήστης μπορεί να επαναλάβει την παραπάνω διαδικασία για όλα τα είδη που βρήκε στο site.
Το κουμπί προεσκόπησης γραμμών παραστατικού εμφανίζει ένα pop-up ώστε να δω τις πληροφορίες που έχω εισάγει σε παλιότερες εγγραφές κατά τη διάρκεια συμπλήρωσης του παραστατικού. Πατώντας σε μια από αυτές, φορτώνεται στη κύρια σελίδα τα details του είδους.
Όταν επιλέγω ένα είδος και υπάρχει προηγούμενη τιμή καταχωρημένη από προηγούμενη επίσκεψη, αυτή εμφανίζεται σε πλαίσιο πάνω από τη τρέχουσα τιμή.
Συγχρονισμός με τον Server
Το PiceCollection έρχεται πακέτο με το Merchandising. Δεν έχω κάποιο param ή κάποιον άλλο κανόνα για το αν θα έρθει ανάλογα με χρήστη, εγκατάσταση κλπ.
- Κατά το άνοιγμα ημέρας φέρνω μόνο τους πίνακες που είναι απαραίτητοι.
- Αν κάποια από αυτά τα tables έχουν foreign keys σε άλλα tables που δεν χρειάζομαι τότε δεν κρατώ στο mobile τα constraints.
- Συμπεριλαμβάνουμε το VisitLogin σε PriceCollectionDocument και PriceCollectionDocumentDetail, αλλά δεν βγάζω τα υπάρχοντα πεδία.
Ο πίνακας PriceCollectionDocumentDetail δεν έχει CompetitorMaterial αλλά διατηρεί τα 3 ids ξεχωριστά γιατί κάνω τιμοληψία και για τα δικά μου materials. Δεν πειράζουμε το PriceCollectionDocumentDetail.LastPrice στο mobile, απλά ενημερώνουμε το CurrentPrice.
Οι πίνακες που έφερα για το PriceCollection πρέπει να ενημερώνονται και με το midDaySync.
Στο κλείσιμο επίσκεψης αλλάζει το Document.Status σε Closed και στη συνέχεια το Document μπορεί να συγχρονιστεί ως μέρος του visitBundle αφού ο χρήστης απαντήσει θετικά στο prompt που ήδη προβάλλεται από την υλοποίηση των questionnaires.
Κατά το discard visits χάνονται όλα παρόμοια με τα questionnaires.
Κατά το enddaysync θα αποστέλλονται μαζί με τα transactions των questoinnaires και όλα τα unsynced documents του pricecolletcion. Έπειτα διαγράφονται τα data από το mobile αν το end-day είναι επιτυχές.
