Η EMDI εκδίδει και ακυρώνει voucher ταχυμεταφορών καλώντας το script που ορίζεις στο αρχείο courier.ini (κύριος φάκελος EMDI/ρυθμίσεις courier).
Στον τρόπο αποστολής του παραστατικού συμπλήρωσε συντομογραφία εταιρίας (courier), χρήστη, κωδικό και sender id. Άνοιξε παραστατικό πωλήσεων και πάτησε το κουμπί voucher: αν το πεδίο voucher είναι κενό γίνεται δημιουργία· αν έχει αριθμό, ανοίγει παράθυρο κατάστασης (εκτύπωση/ακύρωση). Με δεξί κλικ στο κουμπί επιλέγεις επωνυμία αποστολέα, αν θα σταλούν είδη, και από ποια καρτέλα διεύθυνσης παίρνει τον παραλήπτη (πελάτης/αποστολή/παραλήπτης).
Πριν την κλήση η EMDI ελέγχει διεύθυνση+πόλη/περιοχή, ΤΚ, στοιχεία courier και βάρος > 0 (άθροισμα γραμμών ειδών, αν υπάρχει όγκος/εμβαδόν, χρησιμοποιεί το μεγαλύτερο από βάρος και ογκομετρικό βάρος = εμβαδόν/5000).
Γραμμές υπηρεσιών ρυθμίζουν επιπροσθέτως: παράδοση Σάββατο, προκαθορισμένη ώρα, ειδική διαχείριση, δέματα, παραλαβή από κατάστημα, χρέωση παραλήπτη, αντικαταβολή.
Παράδειγμα courier.ini:
|
1 2 3 4 5 6 |
[general] temp=https://www.sbzsystems.com/apps/emdi/tmp/ script=https://www.sbzsystems.com/apps/emdi/courier.php pdf_software= pdf_attributes= check_payment=1 |
script = βασική διεύθυνση κλήσεων. temp = URL φακέλου PDF (η EMDI κατεβάζει {courier}_{voucher}.pdf). Προαιρετικά pdf_software / pdf_attributes για τοπική εκτύπωση. Με check_payment=1, αν το παραστατικό δεν είναι εξοφλημένο, η αντικαταβολή γίνεται ίση με το σύνολο· διαφορετικά 0 (εκτός αν υπάρχει γραμμή αντικαταβολής).
Η εκτύπωση ετικέτας δεν διαβάζει πλέον ενότητα [print] ανά εταιρία: μετά τη δημιουργία καλείται πάντα {script}?action=print+συντομογραφία+&voucher=…&cppass=…. Τοπικό exe μπορεί ακόμα να χρησιμοποιεί placeholders:
| Placeholder | Περιγραφή |
|---|---|
#senderid |
Κωδικός αποστολέα |
#courieruser/#courierpass |
Σύνδεση courier |
#cpuser/#cppass |
Χρήστης/κωδικός εφαρμογής |
#voucherno |
Αριθμός voucher |
Endpoints
| Μέθοδος | Όνομα | Παράδειγμα |
|---|---|---|
| POST | print (δημιουργία) |
{script}?…&action=print&… + form body |
| GET | view |
{script}?…&action=view&… |
| GET | cancel{courier} |
…&action=cancelspeedex&… |
| GET | print{courier} |
{script}?action=printspeedex&voucher=… |
Δημιουργία = POST hybrid (παράμετροι στο URL + σώμα company_data, products, προαιρετικά pdf). Άνοιγμα/ακύρωση/εκτύπωση ετικέτας = GET. Στην ELTA τα κουμπιά εκτύπωσης/ακύρωσης στο παράθυρο voucher κρύβονται.
Απάντηση: αριθμός_voucher|μήνυμα. Αν λείπει ο αριθμός (ή περιέχει αλλαγή γραμμής), η EMDI δείχνει το μήνυμα μετά το | και σταματά.
| Query | Περιγραφή |
|---|---|
courier |
Συντομογραφία (speedex, acs, elta, dhl, …) |
rec_date |
Ημ/νία αποστολής yyyymmdd (παράδοση ή ημ/νία παραστατικού) |
courieruser/courierpass |
Στοιχεία σύνδεσης |
cpuser/cppass |
Χρήστης/κωδικός εφαρμογής |
senderid |
Κωδικός αποστολέα |
rec_* |
Παραλήπτης: όνομα, εταιρία, όροφος (ΤΘ), διεύθυνση, περιοχή+πόλη, ΤΚ, τηλ., κινητό, χώρα |
quantity |
Δέματα (προεπιλογή 1· από γραμμή «ΔΕΜΑΤΑ ΑΠΟΣΤΟΛΗΣ») |
weight |
Υπολογισμένο βάρος |
notes |
Σχόλιο παραστατικού (# → κενό) |
cashondelivery |
Αντικαταβολή (βλ. check_payment/γραμμές) |
relateddoc |
Σειρά + αριθμός παραστατικού |
sendername |
Επωνυμία αποστολέα (εταιρία ή επιλογή μενού) |
action |
Πάντα print |
emdiuser |
Χρήστης άδειας EMDI |
saturday |
Παράδοση Σάββατο: 1/0 |
exact |
Ώρα HH:nn αν υπάρχει «ΠΡΟΚΑΘΟΡΙΣΜΕΝΗ ΩΡΑ» |
special |
Ειδική διαχείριση (1 ή κείμενο μετά τον τίτλο) |
office |
Παραλαβή από κατάστημα: 1/0 |
recipientbilling |
Χρέωση παραλήπτη: 1 ή κενό |
Σώμα POST (form fields):
| Field | Περιγραφή |
|---|---|
company_data |
Στοιχεία εταιρίας EMDI: διεύθυνση|ΤΚ|πόλη|χώρα|τηλέφωνα|ΑΦΜ |
products |
Γραμμές ειδών αν ενεργό «είδη στο voucher» ή courier=dhl. Μορφή ανά γραμμή: κωδικός|περιγραφή|ποσότητα|σύνολο_με_ΦΠΑ|βάρος και προαιρετικά |taric· τέλος γραμμής \n. Σε DHL με είδη ξεκινά με _. |
pdf |
Base64 PDF παραστατικού — υποχρεωτικό αρχείο για DHL εκτός ΕΕ (ζώνη παραλήπτη ≠ EU)· αλλιώς παραλείπεται αν δεν υπάρχει αρχείο. |
Καλείται όταν υπάρχει ήδη αριθμός voucher. Η EMDI ανοίγει τον σύνδεσμο και δείχνει το HTML στο παράθυρο voucher.
Από το URL του view αντικαθιστά το action=view με action=cancel + συντομογραφία (π.χ. cancelspeedex). Όχι σκέτο action=cancel. Μετά καθαρίζει το πεδίο voucher στο παραστατικό.
Μετά επιτυχή δημιουργία η EMDI καλεί αυτόν τον σύνδεσμο, κατεβάζει το PDF στο files\vouchers\{courier}_{voucher}.pdf και αν έχει οριστεί πρόγραμμα PDF το εκτυπώνει.
Αλλιώς ανοίγει απευθείας το URL εκτύπωσης.
Ενδεικτικό παράδειγμα σε PHP (ανά εταιρία δικό της include):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php require_once('courier_common.php'); $couriername = $_GET['courier']; $action = $_GET['action']; // … read the other query fields the same way … // On create, also read POST: pdf, company_data, products if ($couriername == 'speedex' || $action == 'printspeedex' || $action == 'receiptspeedex' || $action == 'cancelspeedex') { require_once('courier_speedex.php'); } // Create success response (plain text): // echo $voucher_code . '|' . $message; |
Η μορφή απάντησης πρέπει να είναι voucher|μήνυμα ώστε η EMDI να αποθηκεύει τον αριθμό στο παραστατικό.
