Proiectarea Unei Aplicatii Online de Gestionare a Expedierilor Pentru Fan Courier Express Srl
Proiectarea unei aplicații online de gestionare a expedierilor pentru FAN Courier Express SRL
CUPRINS
Introducere
Capitolul 1: Studiul si analiza sistemului existent la SC FAN Courier Express SRL
1.1 Prezentarea succintă a unității economico-sociale
1.1.1 Scurt istoric
1.1.2 Indicatori Economici
1.2Principalele activități desfășurate în unitatea economică
1.3 Studiul sistemului de conducere
1.4 Studiul sistemului condus
1.5 Studiul sistemului informational
1.5.1 Sistemul informational
1.5.2 Analiza critică a sistemului actual și identificarea neajunsurilor existente în funcționarea sistemului existent
1.5.3 Direcții de perfecționare a sistemului actual
Capitolul 2: Tehnologii informatice utilizate pentru realizarea aplicației
2.1 PHP
2.2 MySQL
2.3 HTML 5
2.4 CSS 3
2.5 jQuery
Capitolul 3: Proiectarea de detaliu a aplicatiei informatice
3.1 Definirea obiectivelor aplicatiei informatice
3.2 Proiectarea logica si fizica iesirilor
3.3 Proiectarea intrarilor
3.4 Proiectarea bazei de date
3.5 Proiectarea interfetei aplicatiei
3.6 Propuneri de dotare cu echipamente IT si costuri aferente
Capitolul 4: Prezentarea produsului software
4.1 Cerintele hardware si software are produsului program
4.2 Descrierea functiunilor aplicatiei
4.3Concluzii
Introducere
Prezenta lucrare este o soluție dezvoltată pentru FAN Courier România. Aceasta constă în proiectarea unei aplicații online pentru gestionarea expedițiilor prin curier doar în permietrul capitalei, București.
Proprietatile aplicatiei au fost alese pe baza necesitatilor clientilor din Bucuresti ai firmei de curierat, constatandu-se faptul ca un numar foarte mare dintre acestia au nevoie de expeditii de plicuri si colete doar in capitala.
Pentru dezvoltarea solutiei software au fost utilizate tehnologii care si-au dovedit eficienta de-a lungul timpului, precum PHP, MySQL, HTML, CSS si jQuery. Acestea permit creearea unui sistem sigur si eficient si totodata, generarea unei interfete usor de utilizat.
Aceasta aplicatie faciliteaza efectuarea de expeditii rapide, oferind utilizatorului posibilitatea de :
-generarea a documenteleor de transport(AWB-uri)
-cumularea acestora intr-un borderou
-vizualizarea AWB-urilor si istoricului acestora
-efectuare de comenzi curier
-vizalizare istoric comenzi curier
-creare si personalizare cont user
Capitolul 1: Studiul si analiza sistemului existent la SC FAN Courier
1.1 Prezentarea succintă a unității economico-sociale
Scurt istoric
Firma FAN Courier Express SRL a fost infiintață în anul 1998 și își are sediul central în Șos. de Centură nr. 32, Ștefăneștii de Jos, Ilfov, 077175.
Evoluția companiei pe parcursul timpului:
În2006, FAN Courier a devenit lider de piață în domeniul curieratului rapid.
În2007au fost efectuate investiții totale de majorepentru a intari poziția de lider de piața , au extins numarul de angajați la 1800 de persoane.
O altă serie importantă de investiții a avut loc în2008: 9 milioane de Euro au fost investite în consolidarea și dezvoltarea companiei.
În anul 2009, 11 milioane de Euro au fost investite în traininguri de perfecționare, activității de mentenanță pentru flotă, noul sediu centralși banda de sortare a coletelor.
Introducerea noii benzi de sortare în 2010 a adus creșterea vitezei de livrare a coletelor.
Figura
Banda de sortare colete are o lungime de 324 metri, coletele fiind transportate cu o viteza de 2.5m/s. Acestea sunt incarcate manual din camion, urmand un traseu predeterminat:
-cantarire
-citirea codului de bare
-sortarea si arondarea pe iesirea corespunzatoare
Numarul de colete citite ca urmare a descifrarii de coduri de bare indica o rata estimata de peste 97%, dovedind astfel eficienta sistemului utilizat. Banda functioneaza la un nivel de zgomot redus, 70dB, asigurandu0se astfel un mediu de lucru ce pune accent pe confortul angajatilor.
În anul 2011, au fost finalizate investițiile pentru banda de sortare colete cât și pentru cea de sortare plicuri.
Banda de sortare plicuri are o capacitate de sortare de 8000 de plicuri pe ora, corespondenta putand fi repartizata pe 102 destinatii. Alimentarea cu plicuri se poate efectua in regim manual, automat sau mixt, iar plicurile sortate pot avea diferite dimensiuni si greutati.
HUB-ul central este situat pe Soseaua de Centura a capitalei si se intinde pe o suprafata de 30000 de metri patrati. Este compus dintr-un depozit de peste 10000 de metri patrati, cu 119 porti de descarcare, o cladire de birouri P+4 insumand peste 4000 metri patrati.
În aprilie2012, au fost lansate aplicațiile de curierat pentru platforme disponibile pe Android si iOS; aplicațiile permit verificarea statusului curent al unei livrări după AWB, primirea de notificări push atunci când expediția al cărei expeditor ești s-a livrat, dar și estimarea de cost pentru o expediție și plasarea de comenzi.
La începutul anului 2013 s-au făcut investiții de 1.5 milioane de euro pentru demararea proiectului de lărgire a depozitului și alte 3 milioane de euro pentru înnoirea parcului auto.
În același an a fost lansat și serviciul Print&Go prin care se furnizează servicii de tiparire, envelopare și expediere a corespondenței.
Au avut loc investitii importante si pentru extinderea flotei de autoutilitare, acest lucru fiind dictat de cresterea numarului de expeditii.
Evoluția flotei FAN Courier Express:
Graficul nr. ”Evoluția flotei de mașini în perioada 1998-2015”
Din graficul nr. se poate observa rata ascendenta a numarului de masini din flota companiei FAN Courier, ce a atins in anul 2015, numarul de 2650.
1.1.2 Indicatori Economici
Tabelul nr. ”Indicatori bilanțieri în perioada 2009-2013”
Tabelul nr. ”Indicatori din contul de profit și pierdere în perioada 2009-2013”
1.2Principalele activități desfășurate în unitatea economică
FAN Courier oferă o multitudine de servicii de curierat rapid, atat intern cat si international.
Standard:livrarea coletelor in 24 de ore de la preluarea expeditiei de catre un curier sau predarii la un sediu FAN Courier
– Red Code:livrarea expeditiei in ziua urmatoare preluarii, pana in ora 10.
– Express Loco:livrarea coleteleor in aceeasi zi
Zone unde serviciul Express Loco este disponibil:
Caiet de sarcini
Rutier Europa
Aerian pe tot globul
Servicii speciale:
Campus
Check on delivery
Collect point
Cont Colector
Print and Go
Retur documente
Locul în sfera economică:
Furnizorii:
– Motorola
– Siemens
Concurența:
-Urgent Curier
-Nemo Express
-Cargus
-UPS
-TNT
Prestatorii de servicii:
-Enel
-GDF Suez
-BGS Security
1.3 Studiul sistemului de conducere
Firma FAN Courier Expresseste formată dintr-un total de 14 departamente:
Economic
Achiziții
Export
A.S.P.
IT
Marketing
Distribuție
Vânzări
Auto
Juridic
Relații cu clienții
Resurse umane
Management regional
Administrativ
Directorul general are urmatoarele atribuții:
Stabilește obiectivele generale ale companiei
Asigură managementul organizației
Asigură rețele de relații necesare dezvoltării activității companiei
Semnează contracte
Reprezintă compania
Managerii de departamente au următoarele atribuții:
Monitorizează activitatea din departament
Urmarescbuna funcționare a proceselor din departamente
Realizază rapoarte privind angajații și procesele din departament
Implicarea în procesul de recrutare
1.4 Studiul sistemului condus
Cu un numar total de peste 2900 de angajați, FAN Courier este un exemplu de bun management.
Toți angajații beneficiază de training specializat, axat pe aria departamentului în care lucrează, pentru a seoferi o pregatire cât mai eficientă a personalului.Acest lucru este necesar pentru a asigura prestarea de servicii cât mai bune.
Buna pregatire a angajaților este unul din factorii importanți care au influențat succesul de care se bucură compania.
1.5 Studiul sistemului informațional
1.5.1 Sistemul informațional
Sistemul informational existent este compus din mai multe servere si aplicatii online cat si executabile. Programul principal de lucru este Cargo; in cadrul acestuia se pot regasi si configura informatii despre :
-AWB-uri
-clienti
-tarife clienti cu contract
-traseele masinilor care livreaza coletele
-detalii despre curieri
-detalii despre masinile alocate curierilor
Aplicatia dezvoltata pe baza acestei lucrari va fi strans legata de sistemul actual, existand necesitatea sincronizarii acestora. Prin intermediul de job-uri SQL, informatiile referitoare la clienti, documente de transport si comenzi de curier vor fi preluate din baza de date a aplicatiei si transferate in sistemul principal, periodic.
Un element foarte important sunt PDA-urile (Personal Digital Assistant – Asistent Personal Digital) prin intermdediul carora curierii pot scana, introduce sau interoga date referitoare la expeditii. De exemplu, la fiecare predare de colet catre destinatar, curierul scaneaza AWB-ul sau introduce manual modificarea aferenta, in functie caz.
1.5.2 Analiza critică a sistemului actual și identificarea neajunsurilor existente în funcționarea sistemului existent
-posibilitatea nefuncționării fizice PDA-ului
-probleme cauzate de partea software a aparaturii
-probleme aparute la server-ul pe care este stocata baza de date a aplicatiei
1.5.3 Direcții de perfecționare a sistemului actual
Principalul aspect la care trebuie lucrat este echiparea tuturor curierilor cu PDA-uri.Următorul lucru foarte important este asigurarea unui server stabil pentru baza de date ce va colecta datele transmise prin PDA.
Un al factor este și sistemul de operare al PDA-urilor care trebuie să beneficize de update-uri constate pentru noi funcționalități, dar și pentru bug-fix.
Capitolul 2: Tehnologii informatice utilizate pentru realizarea aplicației
Pentru dezolvatarea aplicației vor fi utilizate o serie de tehnologii open source:
2.1 PHP
PHP este un limbaj server side, folosit pentru construirea de pagini web dinamice. Este open-source, poate fi rulat pe sisteme de operare precum Windows, Linux si MacOS si se poate conecta la mai multe tipuri de baze de date, printre care MySQL si MS SQL.
Pentru a utiliza si testa PHP, este necesara instalarea unui server web (Apache, Microsoft IIS) si a pachetului PHP.Eu voi folosi XAMPP; acesta instaleaza serverul Apache, PHP si ofera acces in PHPMyAdmin, interfata grafica a sistemului de gestionare a bazelor de date.
Principalul avantaj al limbajului PHP este posibiliatatea de utlilizare impreuna cu HTML pentru a crea pagini web. Astfel, pot fi afisate elemente in functie de unele conditii si pot fi validate informatiile introduse de un utilizator.
Prin intermediul PHP se pot de asemeni trimite headere HTTP, seta cookie-uri, sesiunisi se pot face redirectionaricatre alte pagini.
2.2 MySQL
MySQL este unul dintre cele mai populare sisteme de gestiune a bazelor de date.
Acesta este instalat odata cu WAMP sau XAMPP ce mai contin PHP si server-ul Apache.MySQL este folosit cel mai des ca optiune de SGBD pentru PHP, insa dispune si de API-uri pentru alte limbaje de programare precum C++, C#, Python si Java.
Pentru a administra o baza de date MySQL se pot utiliza modulul linie de comanda, phpMyAdmin, care este gratuit si vine odata cu instalarea XAMPP sau WAMP sau se poate instala o alta interfata grafica precum SQL Yog sau MySQL Workbench.
Pentru realizarea bazei de date si a tabelelor utilizate de aplicatia de curierat a fost utilizata intefata phpMyAdmin care poate fi accesata prin localhost/phpmyadmin, dupa activarea server-ului Apache si a MySQL din XAMPP.
2.3 HTML 5
HTML 5 este a cincea versiune a standardului HTML ,aparut in 1990, aflandu-se in dezvoltare inca din octombrie 2011.
Obiectivele HTML 5:
– imbogatirea limbajul cu suport pentru elemente multimedia
– imbunatatirea lizibilitatii codului
– insumarea HTML4 , XHTML1 și DOM2HTML
HTML este limbajin intermediul PHP se pot de asemeni trimite headere HTTP, seta cookie-uri, sesiunisi se pot face redirectionaricatre alte pagini.
2.2 MySQL
MySQL este unul dintre cele mai populare sisteme de gestiune a bazelor de date.
Acesta este instalat odata cu WAMP sau XAMPP ce mai contin PHP si server-ul Apache.MySQL este folosit cel mai des ca optiune de SGBD pentru PHP, insa dispune si de API-uri pentru alte limbaje de programare precum C++, C#, Python si Java.
Pentru a administra o baza de date MySQL se pot utiliza modulul linie de comanda, phpMyAdmin, care este gratuit si vine odata cu instalarea XAMPP sau WAMP sau se poate instala o alta interfata grafica precum SQL Yog sau MySQL Workbench.
Pentru realizarea bazei de date si a tabelelor utilizate de aplicatia de curierat a fost utilizata intefata phpMyAdmin care poate fi accesata prin localhost/phpmyadmin, dupa activarea server-ului Apache si a MySQL din XAMPP.
2.3 HTML 5
HTML 5 este a cincea versiune a standardului HTML ,aparut in 1990, aflandu-se in dezvoltare inca din octombrie 2011.
Obiectivele HTML 5:
– imbogatirea limbajul cu suport pentru elemente multimedia
– imbunatatirea lizibilitatii codului
– insumarea HTML4 , XHTML1 și DOM2HTML
HTML este limbajul de marcare ce sta la baza majoritatii site-urilor si aplicatiilor web.
Prima modificare notabila pe care o aduce HTML 5 este schimbarea doctype-ului care apare la inceputul unei aplicatii web.
Un exemplu de doctype mai vechi este acesta:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Noul doctype introdus de HTML 5 este mult mai simplu si mai scurt:
<! DOCTYPE html>
Au fost introduse si o serie de elemente noi foarte utile, precum:
Audio
Video
Date
DateTime
Password
2.4 CSS 3
CSS este utilizat pentru formatarea si stilizarea elementelor de HTML. Ca si cel din urma este prezent in majoritatea aplicatiilor si site-urilor web.
Stilurie css pot fi adaugate atat direct in fisier, cat si prin includerea fisierului .css
CSS 3 a fost introdus odata cu HTML 5, scopul fiind standardizarea paginilor web dar si introducerea de multe noi elemente si stiluri.
Cea mai recenta versiune a CSS a fost impartita pe module:
Selectors
Box Model
Background-uri si Borders
Image Values si Replaced Content
Text Effects
2D/3D Transformations
Animations
Multiple Column Layout
User Interface
2.5 Javascript si jQuery
jQuery este una dintre cele mai utilizate librarii Javascript datorita usurintei si eficientei sintaxei.Este folosita pentru manipulare de elemente HTML, evenimente in DOM si animatii.
Utilizarea jQuery faciliteaza implementarea de pagini web si elemente dinamice oferind atat functionalitate imbunatatita cat si posibilitatea generarii unei interfete mai interactive facile de utilizat.
Unul dintre motivele pentru care a fost aleasa aceasta librarie de Javascript in dezvoltarea aplicatiei a fost necesitatea de a adauga dinamic clase de CSS unor elemente de HTML. Acest lucru se poate face cu usurinta prin intermediul functiei addClass( ).
Capitolul 3: Proiectarea de detaliu a aplicatiei informatice
3.1 Definirea obiectivelor aplicatiei informatice
Aplicatia are ca obiectiv principal usurarea procesului de efectuare a unei expedieri prin curierat rapid in perimetrul capitalei, Bucuresti.
In acest sens, dupa crearea unui cont si logare, un utilizator beneficiaza de urmatoarele facilitati:
-editare date din pagina personala
-generare AWB-uri
-vizualizare AWB-uri in forma in care acestea vor fi printate
-efectuare de comanda de curier, care va prelua coletele, impreuna cu AWB-urile generate, de la adresa utilizatorului (expeditorului)
-vizualizare istoric expedieri
-vizualizare istoric comenzi curier
3.2 Proiectarea logica si fizica iesirilor
Aplicatia va dispune de urmatoarele iesiri:
1.Vizualizare borderouri ce contin AWB-uri generate in ziua curenta:
Vor fi afisate sub forma de tabel detalii precum:
-numar AWB
-nume destinatar
-numar plicuri si colete
-data si ora generarii AWB-ului
-valoarea rambursului
2.Vizualizare istoric AWB-uri:
Vor fi afisate sub forma de tabel detalii precum:
-numar AWB
-nume expeditor
-nume destinatar
-data generarii AWB-ului
-numarul de plicuri/colete
-valoarea rambursului
-ultimul status al AWB-ului
Va exista posibilitatea de filtrare a rezultatelor cautarii dupa numar de AWB sau interval de data.
3.Vizualizare istoric comenzi:
Vor fi afisate sub forma de tabel detalii precum:
-numar comanda
-data si ora comanda
-numarul de plicuri/colete
-greutatea totala
-persoana de contact
-telefon persoana contact
-ultimul status al comenzii
Va exista posibilitatea de filtrare a rezultatelor cautarii dupa un interval de data.
4.Generare print AWB
Vor fi afisate in forma AWB-ului ce trebuie printat, toate informatiile legate de o expeditie:
-detaliile expeditorului
-detaliile destinatarului
-valoarea rambursului
-valoarea transportului
-valoarea totala
-numarul de plicuri/colete
-persoana la care se face plata expeditiei
-persoana la care se face plata transportului banilor de ramburs
3.3 Proiectarea intrarilor
Aplicatia va dispune de urmatoarele intrari:
Inregistrare cont
Pagina de Inregistrare cont va contine urmatoarele campuri:
-Username, ce poate avea lungime maxima de 30 de carcatere; fiecare username este unic.
-Parola, cu o lungime maxima de 50 de caractere
-Nume, cu o lungime maxima de 50 de caractere
-Telefon, cu o lungime maxima de 20 de caractere
-Email, cu o lungime maxima de 50 de caractere
-Oras, predefinit, cu valoarea “Bucuresti”
-Strada, cu o lungime maxima de 80 de caractere
-Sector, cu posibilitatea de a alege dintr-o lista de tip dropdown
-Nr. , cu o lungime maxima de 10 de caractere
-Cod postal, cu o lungime maxima de 7 de caractere
-Bloc, cu o lungime maxima de 20 de caractere
-Scara, cu o lungime maxima de 10 de caractere
-Etaj, cu o lungime maxima de 10 de caractere
-Apartament, cu o lungime maxima de 10 de caractere
Pagina va avea urmatoarea forma:
2.Logarea in aplicatie
In pagina de logare in aplicatie vor fi disponibile doua campuri:
-Utilizator
-Parola
Zona de logare va arata in felul urmator:
3.Generare AWB
Pagina de generare AWB va contine urmatoarele campuri:
-Nume, ce poate avea lungime maxima de 50 de carcatere
-Telefon, cu o lungime maxima de 20 de caractere
-Email, cu o lungime maxima de 50 de caractere
-Oras, predefinit, cu valoarea “Bucuresti”
-Strada, cu o lungime maxima de 80 de caractere
-Sector, cu posibilitatea de a alege dintr-o lista de tip dropdown
-Nr. , cu o lungime maxima de 10 de caractere
-Cod postal, cu o lungime maxima de 7 de caractere
-Bloc, cu o lungime maxima de 20 de caractere
-Scara, cu o lungime maxima de 10 de caractere
-Etaj, cu o lungime maxima de 10 de caractere
-Apartament, cu o lungime maxima de 10 de caractere
-Inaltime
-Latime
-Lungime
-Plata expeditiei la, cu posibilitatea de a alege intre “Expeditor” si “Destinatar”
-Ramburs, cu o valoare maxima admisa de 5000 de Lei
-Plata transport ramburs la, cu posibilitatea de a alege intre “Expeditor” si “Destinatar”
Pagina de genereare AWB va avea urmatoarea forma:
4. Comanda curier:
Pagina de Comanda curier va contine urmatoarele campuri:
-Numar total colete
-Numar total plicuri
-Greutatea totala in kg
-Inaltime
-Latime
-Lungime
-Persoana de contact, cu o lungime maxima de 30 de caractere
-Telefon, cu o lungime maxima de 20 de caractere
-Observatii, cu o lungime maxima de 50 de caractere
In cazul in care utilizatorul nu va putea fi la adresa setata in contul acestuia pentru predarea coletelor/plicurilor curierului, se vor utiliza campurile Persoana de contact si Telefon, mentionandu-se astfel o alta persoana cu care curierul va putea lua legatura pentru preluarea expeditiei.
In aceasta pagina vor fi afisate si detalii legate de expeditor, precum numele expeditorului si adresa de ridicare a comenzii:
Pagina Comanda curier va avea urmatoarea forma:
3.4 Proiectarea bazei de date
Pentru gestionarea optima a datelor utilizatorilor si a datelor referitoare la documentele de transport a fost creeata o baza de date relationala in MySQL, continand urmatoarele tabele:
Fig. Diagrama bazei de date
Fig. Legenda simboluri diagrama
-adrese
-borderouri
-borderouri_detalii
-awb
-awb_status
-clienti
-destinatari
-users
-comenzi
-comenzi_status
3.5 Proiectarea interfetei aplicatiei
La incercarea de accesare a aplicatiei, utilizatorul va fi directionat catre pagina de logare, de unde isi poate creea un cont, sau se poate loga, daca si-a creeat un cont in prealabil.
Dupa logare, utilizatorul este directionat care pagina de generare AWB, aceasta fiind si pagina centrala aplicatiei.
In partea de sus sunt vizibile detalii precum “Nume client”, link-ul catre pagina personala si link-ul de Logout. Mai jos, este afisat meniul principal, prin intermediul caruia pot fi accesate toate paginile aplicatiei.
Formularele utilizate pentru introducerea datelor, cat si tabelele de afisare a rapoartelor vor fi pozitionate central pe pagina.
Pentru filtrele de cautare ce folosesc data sau un interval de data se vor utiliza campuri de tip “date”:
Figura Camp de tip “date”
3.6 Propuneri de dotare cu echipamente IT si costuri aferente
Avand in vedere faptul ca pentru dezvoltarea aplicatiei vor fi utilizate tehnologii open source, singurele costuri de dotare necesare vor fi cele pentru hardware:
Server HP ProLiant DL380e G8 2U6879.99 Lei
Cablu retea340 Lei
Switch HP 2530-24G 2239.99 Lei
Total 9459.98 Lei
Capitolul 4: Prezentarea produsului software
4.1 Cerintele hardware si software are produsului program
Aplicatia poate fi accesata utilizand orice browser web, cum ar fi Google Chrome, Mozilla Firefox, Internet Explorer sau Safari, neimpunand cerinte de hardware, fiind o aplicatie online.
Pentru posibilitatea utilizarii tuturor optiunilor aplicatiei la capacitate maxima, se recomanda accesarea acesteia prin intermediul celor mai recente versiuni ale browserelor web si evitarea versiunilor invechite precum Internet Explorer 9, 8 sau 7 deoarece elementele de HTML 5 nu sunt recunoscute de acestea.
4.2 Descrierea functiunilor aplicatiei
Primul pas spre folosirea aplicatiei este crearea unui cont de utilizator.
In pagina de Logare se poate gasi butonul “Cont nou”:
Fig. Formularul de logare
La click pe butonul “Cont nou”, utilizatorul este redirectionat catre pagina de “Inregistrare cont”.
Fig. Formularul de inregistrare cont
Dupa completarea formularului de inregistrare cu date valide si accesarea butonului “Salveaza”, utilizatorul este redirectionat catre pagina de logare, de unde se poate loga cu datele setate in prealabil.
In cazul in care se incearca logarea cu date incorecte, marginile campurilor “Utilizator” si “Parola” devin rosii si este afisat mesajul “Date de logare gresite”.
Fig. Formularul de inregistrare cont dupa ce au fost introduse date incorecte
Dupa logarea cu succes, este accesata pagina “Genereaza AWB”. In partea de sus a paginii se pot vedea numele de utilizator logat, link-ul catre pagina personala si link-ul de logout.
Fig. Meniul principal
La click pe link-ul “Editare cont” se accesaza pagina cu detaliile clientului, precum nume, email, telefon si adresa.
Fig. Pagina Modificare date utilizator
Prima pagina accesata dupa logare este “Genereaza AWB”:
Fig. Pagina “Genereaza AWB”
Dupa completarea cu date valide a formularului de generare AWB si apasarea butonului “Salveaza AWB”, este afisata forma finala a documentrului de transport, impreuna cu doua butoane:
-Vizualizeaza borderou
-Completeaza AWB nou
In cadrul paginii “Borderou AWB-uri” pot fi vizualizate toate AWB-urile generate pe parcursul unei zile.
Sunt afisate sub forma de tabel urmatoarele informatii:
-numar AWB
-nume destinatar
-numar de plicuri
-numar de colete
-data si ora generarii AWB-ului
-valoarea rambursului
In ultima coloana a tabelului este accesibil butonul “Prin AWB”, care deschide intr-o pagina noua, forma finala a AWB-ului ce trebuie printat si predat curierului.
Fig. Pagina “Borderou AWB-uri”
Dupa generarea tuturor AWB-urilor dorite si printarea acestora, este necesara efectuarea unei comenzi de curier.
In pagina “Comanda curier” se vor completa detalii precum numarul de plicuri si colete,greutatea totala a acestora, dimensiunile celui mai mare colet, acolo unde este cazul si datele unei persoane de contact in cazul in care persoana expeditoare nu va fi disponibila atunci cand curierul se va prezenta la adresa mentionata in comanda pentru a prelua coletele/plicurile.
Fig. Pagina “Comanda curier”
Pentru o gestiune cat mai buna a expeditiilor, aplicatia ofera si doua pagini de raportare; prima dintre acestea este pagina Istoric AWB.
In aceasta pagina pot fi efectuate doua tipuri de cautari: dupa numarul de AWB sau dupa interval de data .
Rezultatele cautarii vor fi afisate sub forma tabelara si vor prezenta detalii precum:
-numar AWB
-nume expeditor si destinatar
-data si ora AWB
-numar de plicuri si de colete
-valoarea rambursului
-statusul AWB-ului
In ultima coloana a tabelului este accesibil butonul “Prin AWB”, care deschide intr-o pagina noua, forma finala a AWB-ului ce trebuie printat si predat curierului.
Fig. Pagina “Istoric AWB”
Cea de a doua pagina a aplicatiei care dispune deo zona de raportare este “Istoric comenzi”. Aceasta ofera posibilitatea de a cauta comenzi de curier efectuate dupa un interval de data setat din zona de filtrare.
Rezultatele cautarii vor fi afisate sub forma tabelara si vor prezenta detalii precum:
– numarul comenzii
– data si ora comenzii
– numar total de colete
– numar total de plicuri
– greutatea totala in kg
– persoana de contact
– telefon persoana de contact
– statusul comenzii
Fig. Pagina “Istoric comenzi”
4.3Concluzii
Aplicatia a venit in sprijinul clientilor din Bucuresti ai companiei FAN Courier care efectueza expedieri de plicuri si colete doar in perimetrul capitalei. Acestia au la dispozitie o interfata simpla prin intermediul careia isi pot genera rapid un cont de utilizator, pot completa si printa AWB-uri si pot plasa comenzi de curier oricand doresc.
Pentru o gestionare cat mai buna a AWB-urilor generate si a comenzilor plasate, sunt disponibile istorice ale acestora si se pot face filtrari in functie de un interval de data sau un numar de AWB.
Fiind acesibilă doar online, aplicatiei de curierat ii pot fi aduse oricand imbunatatiri si noi functii. Structura bazei de date si fluxul informational utilizate permit integrarea cu usurinta a acestora in cadrul celorlalte aplicatii si sisteme dezvoltate si utilizate de FAN Courier.
Bibliografie
Cornelia Botezatu, Proiectarea sistemelor informatice. Metode sistemice, Editura ProUniversitaria, Buc, 2007
Virgil Chichernea, G.Garais, Baze de date. Sistemul FoxPro vol.II, Editura Prouniversitaria, 2006
M. Moise, Sisteme informatice cu baze de date, Editura Pro-Universitaria, București, 2008
Botezatu Cezar, George Căruțașu, Doru Chetrariu, Arhitectura calculatoarelor personale și sisteme de operare specifice, Editura Universul Juridic, București, 2005
Ionel Iacob, SGBD Oracle – Ghid aplicativ pentru realizarea solutiilor informatice, Editura ProUniversitaria, 2007
Ioniță, G. Bădescu, Baze de date. Organizare, proiectare și implementare, Editura All, București, 1995
Documentația oficială PHP http://php.net/docs.php
Documentația oficială MySql http://dev.mysql.com/doc
Documentația oficială jQuery http://api.jquery.com/
http://www.fancourier.ro/servicii
http://www.fancourier.ro/servicii/curierat-intern/express-loco/
http://www.w3schools.com/html/
http://www.w3schools.com/css/
http://www.w3schools.com/js/
https://www.javascript.com/resources
Intranet FAN Courier Express SRL
Rapoarte interne FAN Courier Express SRL
Anexe
-creare utilizator nou:
<?php
require_once("connection.php");
$username = $_POST["username"];
$pass = $_POST["pass"];
$nume = $_POST["nume"];
$email = $_POST["email"];
$telefon = $_POST["telefon"];
$strada = $_POST["strada"];
$nr = $_POST["nr"];
$cod_postal = $_POST["cod_postal"];
$bloc = $_POST["bloc"];
$scara = $_POST["scara"];
$etaj = $_POST["etaj"];
$apartament = $_POST["apartament"];
$sector = $_POST["sector"];
$query_adrese = "INSERT INTO adrese (strada, nr, cod_postal, bloc, etaj, scara, apartament, sector)
VALUES ('$strada', '$nr', '$cod_postal', '$bloc', '$scara', '$etaj', '$apartament', '{$sector}' )";
if (mysqli_query($connection, $query_adrese)) {
} else {
echo "Error: " . $query_adrese . "<br>" . mysqli_error($connection);
}
$adresa_id = mysqli_insert_id($connection);
$query_clienti ="INSERT INTO clients (nume, email, telefon, adresa_id)
VALUES ('$nume', '$email', '$telefon', $adresa_id)";
if (mysqli_query($connection, $query_clienti)) {
} else {
echo "Error: " . $query_clienti . "<br>" . mysqli_error($connection);
}
$client_id = mysqli_insert_id($connection);
$query_useri ="INSERT INTO users (username, pass, client_id, activ)
VALUES ('$username', '$pass', '$client_id', 1)";
if (mysqli_query($connection, $query_useri)) {
} else {
echo "Error: " . $query_useri . "<br>" . mysqli_error($connection);
}
mysqli_close($connection);
?>
Generare AWB
<?php
session_start();
require_once("connection.php");
$client_id = $_SESSION["client_id"];
$nume = $_POST["dest_nume"];
$email = $_POST["dest_email"];
$telefon = $_POST["dest_tel"];
$strada = $_POST["dest_strada"];
$nr = $_POST["dest_nr"];
$cod_postal = $_POST["dest_cod_postal"];
$bloc = $_POST["dest_bloc"];
$scara = $_POST["dest_scara"];
$etaj = $_POST["dest_etaj"];
$apartament = $_POST["dest_ap"];
$nr_plicuri = $_POST["nr_plicuri"];
$nr_colete = $_POST["nr_colete"];
$greutate = $_POST["greutate"];
$inaltime = $_POST["inaltime"];
$latime = $_POST["latime"];
$lungime = $_POST["lungime"];
$plata_la = $_POST["plata"];
$ramburs = $_POST["ramburs"];
$plata_ramburs = $_POST["plata_ramburs"];
$sector = $_POST["dest_sector"];
if(!isset($_POST["ramburs"]) OR $_POST["ramburs"] <0){
$ramburs = 0;
}
$query_adresa_dest = "INSERT INTO adrese (strada, nr, cod_postal, bloc, etaj, scara, apartament, sector)
VALUES ('$strada', '$nr', '$cod_postal', '$bloc', '$scara', '$etaj', '$apartament', '{$sector}' )";
if (mysqli_query($connection, $query_adresa_dest)) {
} else {
echo "Error: " . $query_adresa_dest . "<br>" . mysqli_error($connection);
}
$adresa_id = mysqli_insert_id($connection);
$query_destinatari ="INSERT INTO destinatari (nume, email, tel, adresa_id)
VALUES ('$nume', '$email', '$telefon', $adresa_id)";
if (mysqli_query($connection, $query_destinatari)) {
} else {
echo "Error: " . $query_destinatari . "<br>" . mysqli_error($connection);
}
$destinatar_id = mysqli_insert_id($connection);
$today_date = date("Y-m-d");
$query_awb_number = "SELECT awb_number, DATE(data) AS data_awb
FROM awb WHERE client_id = {$client_id}
AND DATE(data) = '{$today_date}'
ORDER BY data DESC LIMIT 1 ";
$result_awb_number = mysqli_query($connection, $query_awb_number);
if (mysqli_num_rows($result_awb_number) >0) {
while($row = mysqli_fetch_assoc($result_awb_number)) {
$awb_vechi = $row["awb_number"];
$last_awb = substr($awb_vechi, strpos($awb_vechi, "_") + 1) + 1;
$awb_nou = date("dmY").$client_id."000_".$last_awb;
}
} else {
$awb_nou = date("dmY").$client_id."000_1";
}
$_SESSION["awb_number"] = $awb_nou;
$query_awb ="INSERT INTO awb (awb_number,client_id, destinatar_id, nr_plicuri, nr_colete, inaltime,
latime, lungime, greutate, plata_la, ramburs, plata_transp)
VALUES ('$awb_nou','$client_id', '$destinatar_id', '$nr_plicuri', '$nr_colete', '$inaltime',
'$latime', '$lungime', '$greutate', '$plata_la', '$ramburs', '$plata_ramburs')";
if (mysqli_query($connection, $query_awb)) {
} else {
echo "Error: " . $query_awb . "<br>" . mysqli_error($connection);
}
$query_awb_status ="INSERT INTO awb_status (awb_number, status)
VALUES ('$awb_nou', 'In asteptare')";
if (mysqli_query($connection, $query_awb_status)) {
} else {
echo "Error: " . $query_awb_status . "<br>" . mysqli_error($connection);
}
$today_date = date("Y-m-d");
$query_borderou_existent = "SELECT borderou_id, DATE(data) AS data_awb FROM borderouri WHERE client_id = {$client_id} AND DATE(data) = '{$today_date}' ORDER BY data DESC LIMIT 1 ";
$result_borderou_existent = mysqli_query($connection, $query_borderou_existent);
if (mysqli_num_rows($result_borderou_existent) >0) {
while($row = mysqli_fetch_assoc($result_borderou_existent)) {
$borderou_id = $row["borderou_id"];
echo "Borderou Existent";
}
} else {
$query_borderouri ="INSERT INTO borderouri (client_id, finalizat)
VALUES ('$client_id', 0)";
if (mysqli_query($connection, $query_borderouri)) {
} else {
echo "Error: " . $query_borderouri . "<br>" . mysqli_error($connection);
}
$borderou_id = mysqli_insert_id($connection);
}
$query_borderou_detalii ="INSERT INTO borderouri_detalii (borderou_id, awb_number, deleted)
VALUES ('$borderou_id', '$awb_nou', 0)";
if (mysqli_query($connection, $query_borderou_detalii)) {
header("location:view_awb.php");
} else {
echo "Error: " . $query_borderou_detalii . "<br>" . mysqli_error($connection);
}
mysqli_close($connection);
?>
Comanda curier
<?php
session_start();
require_once("connection.php");
$client_id = $_SESSION["client_id"];
$nr_plicuri = $_POST["nr_plicuri"];
$nr_colete = $_POST["nr_colete"];
$greutate = $_POST["greutate"];
$inaltime = $_POST["inaltime"];
$latime = $_POST["latime"];
$lungime = $_POST["lungime"];
$pers_contact = $_POST["pers_contact"];
$tel = $_POST["tel"];
$obs = $_POST["obs"];
$query_comanda = "INSERT INTO comenzi (client_id, nr_plic, nr_colete, greutate, inaltime,
latime, lungime, pers_contact, tel, obs, status)
VALUES ('$client_id', '$nr_plicuri', '$nr_colete', '$greutate', '$inaltime',
'$latime', '$lungime', '$pers_contact', '$tel', '$obs', 'Plasata' )";
if (mysqli_query($connection, $query_comanda)) {
header("location:../istoric_comenzi.php");
} else {
echo "Error: " . $query_comanda . "<br>" . mysqli_error($connection);
}
Istoric AWB
<?php
session_start();
require("header.php");
require_once("includes/connection.php");
$client_id = $_SESSION["client_id"];
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("h5.istoric_awb_menu").addClass("active_menu");
});
</script>
<style>
#nested-form-bug {
position: absolute !important;
left: -2500px !important;
width: 20px !important;
}
</style>
<br><br><br>
<div align="left" style="margin-left: 50px;">
<strong><h3>Filtre:</h3></strong>
<br>
<form name="istoric_awb" id = "istoric_awb" method="POST" action="istoric_awb.php">
<label class="awb_lbl bold">AWB:</label>
<input type="text" name="awb_filtru" value="<?php echo isset($_POST["awb_filtru"]) ? $_POST["awb_filtru"]:"";?>" size="16" maxlength="50"><br>
<label class="awb_lbl bold">De la:</label>
<input type="date" name="data1" value="<?php echo isset($_POST["data1"]) ? $_POST["data1"]:""; ?>">
<br>
<label class="awb_lbl bold">Pana la:</label>
<input type="date" name="data2" value="<?php echo isset($_POST["data2"]) ? $_POST["data2"]:""; ?>">
<br><input type="submit" value="Cautare">
</div>
<br>
<table id="tabelCS" border="0" cellpadding="4" cellspacing="0" style="margin-bottom:2em; width:1184px;">
<tbody><tr align="left">
<td align="center" id="textbox0"><strong>AWB</strong></td>
<td align="center" id="textbox0"><strong>Expeditor</strong></td>
<td align="center" id="textbox1"><strong>Destinatar</strong></td>
<td align="center" id="textbox1"><strong>Data AWB</strong></td>
<td align="center" id="textbox1"><strong>Plicuri</strong></td>
<td align="center" id="textbox1"><strong>Colete</strong></td>
<td align="center" id="textbox1"><strong>Ramburs</strong></td>
<td align="center" id="textbox1"><strong>Status</strong></td>
<td align="center" id="textbox2"><strong>Actiuni</strong></td>
</tr>
<?php
$nr_awb_filtru = (isset($_POST['awb_filtru']) ? $_POST['awb_filtru'] : null);
if(isset($_POST["data1"]) AND isset($_POST["data2"]) AND $_POST["awb_filtru"] == "") {
$data_filtru_1= $_POST["data1"];
$data_filtru_2= $_POST["data2"];
if(strtotime($data_filtru_1) >strtotime($data_filtru_2)){
echo "Data de inceput nu poate fi mai mare ca data de sfarsit a intervalului.";
}else {
$query_awb = " SELECT distinct awb.awb_number as AWB, awb.client_id as client, destinatari.nume AS Destinatar, awb.nr_plicuri as Plicuri,
awb.nr_colete as Colete, awb.data AS Data, awb.ramburs AS Ramburs,
(SELECT status from awb_status where awb_number = AWB ORDER BY data DESC LIMIT 1 ) as Status, clients.nume as Expeditor
FROM awb
INNER JOIN destinatari ON awb.destinatar_id = destinatari.destinatar_id
INNER JOIN awb_status ON awb.awb_number = awb_status.awb_number
INNER JOIN clients ON awb.client_id = clients.client_id
WHERE awb.client_id = {$client_id}
AND DATE(awb.data) BETWEEN '{$data_filtru_1}' AND '{$data_filtru_2}'
ORDER BY awb_status.data DESC ";
$result_awb_generat = mysqli_query($connection, $query_awb);
if (mysqli_num_rows($result_awb_generat) >0) {
while ($row = mysqli_fetch_assoc($result_awb_generat)) {
?>
<tr bgcolor="#FFFFFF" align="center">
<td><?php echo $row["AWB"]; ?></td>
<td><?php echo $row["Expeditor"]; ?></td>
<td><?php echo $row["Destinatar"]; ?></td>
<td><?php echo $row["Data"]; ?></td>
<td><?php echo $row["Plicuri"]; ?></td>
<td><?php echo $row["Colete"]; ?></td>
<td><?php echo $row["Ramburs"]; ?></td>
<td><?php echo $row["Status"]; ?></td>
<td>
<form action="#" method="post" id="nested-form-bug"></form>
<form name="awb_borderou" action="includes/do_view_awb_borderou.php" method="POST" target="_blank">
<input type="hidden" name="awb_number" value="<?php echo $row["AWB"]; ?>">
<input type="submit" value="Print AWB">
</form>
</td>
</tr>
<?php }
}
}
}elseif($nr_awb_filtru){
$awb_filtru = $nr_awb_filtru;
$query_awb = " SELECT distinct awb.awb_number as AWB, awb.client_id as client, destinatari.nume AS Destinatar, awb.nr_plicuri as Plicuri,
awb.nr_colete as Colete, awb.data AS Data, awb.ramburs AS Ramburs,
(SELECT status from awb_status where awb_number = AWB ORDER BY data DESC LIMIT 1 ) as Status, clients.nume as Expeditor
FROM awb
INNER JOIN destinatari ON awb.destinatar_id = destinatari.destinatar_id
INNER JOIN awb_status ON awb.awb_number = awb_status.awb_number
INNER JOIN clients ON awb.client_id = clients.client_id
WHERE awb.client_id = {$client_id}
AND awb.awb_number = '{$awb_filtru}'
ORDER BY awb_status.data DESC ";
$result_awb_generat = mysqli_query($connection, $query_awb);
if (mysqli_num_rows($result_awb_generat) >0) {
while ($row = mysqli_fetch_assoc($result_awb_generat)) {
?>
<tr bgcolor="#FFFFFF" align="center">
<td><?php echo $row["AWB"]; ?></td>
<td><?php echo $row["Expeditor"]; ?></td>
<td><?php echo $row["Destinatar"]; ?></td>
<td><?php echo $row["Data"]; ?></td>
<td><?php echo $row["Plicuri"]; ?></td>
<td><?php echo $row["Colete"]; ?></td>
<td><?php echo $row["Ramburs"]; ?></td>
<td><?php echo $row["Status"]; ?></td>
<td><form action="#" method="post" id="nested-form-bug"></form>
<form name="awb_borderou" action="includes/do_view_awb_borderou.php" method="POST" target="_blank">
<input type="hidden" name="awb_number" value="<?php echo $row["AWB"]; ?>">
<input type="submit" value="Print AWB">
</form>
</td>
</tr>
<?php }
}
}
?>
</tbody>
</table>
</form>
<?php
require("footer.php");
?>
Istoric comenzi
<?php
session_start();
require("header.php");
require_once("includes/connection.php");
$client_id = $_SESSION["client_id"];
if(!isset($_SESSION["username"])){
header("location:index.php");
}
?>
<script type="text/javascript">
$(document).ready(function(){
$("h5.istoric_comenzi_menu").addClass("active_menu");
});
</script>
<br><br><br>
In aceasta pagina pot fi vizualizate toate comenzile plasate.
<br><br><br>
<form name="istoric_comenzi" action="istoric_comenzi.php" method="POST">
<label class="awb_lbl bold">De la:</label>
<input type="date" name="data1" value="<?php echo isset($_POST["data1"]) ? $_POST["data1"]:""; ?>">
<br>
<label class="awb_lbl bold">Pana la:</label>
<input type="date" name="data2" value="<?php echo isset($_POST["data2"]) ? $_POST["data2"]:""; ?>">
<br><br>
<input type="submit" value="Cautare">
<br><br>
<table id="tabelCS" border="0" cellpadding="4" cellspacing="0" style="margin-bottom:2em; width:1184px;">
<tbody><tr align="left">
<td align="center" id="textbox0"><strong>Numar comanda</strong></td>
<td align="center" id="textbox0"><strong>Data</strong></td>
<td align="center" id="textbox0"><strong>Ora</strong></td>
<td align="center" id="textbox1"><strong>Plicuri</strong></td>
<td align="center" id="textbox1"><strong>Colete</strong></td>
<td align="center" id="textbox1"><strong>Greutate</strong></td>
<td align="center" id="textbox1"><strong>Persoana contact</strong></td>
<td align="center" id="textbox1"><strong>Telefon</strong></td>
<td align="center" id="textbox1"><strong>Status</strong></td>
</tr>
<?php
if(isset($_POST["data1"]) AND isset($_POST["data2"]) AND ($_POST["data1"] <= $_POST["data2"])) {
$data_filtru_1 = $_POST["data1"];
$data_filtru_2 = $_POST["data2"];
$query_comenzi = "SELECT id_comanda , data, nr_plic, nr_colete , greutate, pers_contact, status, tel
FROM comenzi
WHERE client_id = $client_id
AND DATE(data) >= '{$data_filtru_1}' AND DATE(data)<= '{$data_filtru_2}'
ORDER BY id_comanda DESC ";
$result_comenzi = mysqli_query($connection, $query_comenzi);
if (mysqli_num_rows($result_comenzi) >0) {
while ($row = mysqli_fetch_assoc($result_comenzi)) {
$data = strtotime($row["data"]);
$data_formatata = date("d/m/Y" , $data);
$ora_formatata = date("H:i",$data);
?>
<tr bgcolor="#FFFFFF" align="center">
<td style="width:100px; height:30px;"><?php echo $row["id_comanda"]; ?></td>
<td><?php echo $data_formatata; ?></td>
<td><?php echo $ora_formatata; ?></td>
<td><?php echo $row["nr_plic"]; ?></td>
<td><?php echo $row["nr_colete"]; ?></td>
<td><?php echo $row["greutate"]; ?></td>
<td><?php echo $row["pers_contact"]; ?></td>
<td><?php echo $row["tel"]; ?></td>
<td><?php echo $row["status"]; ?></td>
</tr>
<?php }
}else{
echo "<br>"."Nu a fost efectuata nici o comanda curier in intervalul selectat."."<br>";
}
}else {
echo "Selectati intervalul dorit.";
}?>
</tbody>
</table>
</form>
<?php
require("footer.php");
?>
Bibliografie
Cornelia Botezatu, Proiectarea sistemelor informatice. Metode sistemice, Editura ProUniversitaria, Buc, 2007
Virgil Chichernea, G.Garais, Baze de date. Sistemul FoxPro vol.II, Editura Prouniversitaria, 2006
M. Moise, Sisteme informatice cu baze de date, Editura Pro-Universitaria, București, 2008
Botezatu Cezar, George Căruțașu, Doru Chetrariu, Arhitectura calculatoarelor personale și sisteme de operare specifice, Editura Universul Juridic, București, 2005
Ionel Iacob, SGBD Oracle – Ghid aplicativ pentru realizarea solutiilor informatice, Editura ProUniversitaria, 2007
Ioniță, G. Bădescu, Baze de date. Organizare, proiectare și implementare, Editura All, București, 1995
Documentația oficială PHP http://php.net/docs.php
Documentația oficială MySql http://dev.mysql.com/doc
Documentația oficială jQuery http://api.jquery.com/
http://www.fancourier.ro/servicii
http://www.fancourier.ro/servicii/curierat-intern/express-loco/
http://www.w3schools.com/html/
http://www.w3schools.com/css/
http://www.w3schools.com/js/
https://www.javascript.com/resources
Intranet FAN Courier Express SRL
Rapoarte interne FAN Courier Express SRL
Anexe
-creare utilizator nou:
<?php
require_once("connection.php");
$username = $_POST["username"];
$pass = $_POST["pass"];
$nume = $_POST["nume"];
$email = $_POST["email"];
$telefon = $_POST["telefon"];
$strada = $_POST["strada"];
$nr = $_POST["nr"];
$cod_postal = $_POST["cod_postal"];
$bloc = $_POST["bloc"];
$scara = $_POST["scara"];
$etaj = $_POST["etaj"];
$apartament = $_POST["apartament"];
$sector = $_POST["sector"];
$query_adrese = "INSERT INTO adrese (strada, nr, cod_postal, bloc, etaj, scara, apartament, sector)
VALUES ('$strada', '$nr', '$cod_postal', '$bloc', '$scara', '$etaj', '$apartament', '{$sector}' )";
if (mysqli_query($connection, $query_adrese)) {
} else {
echo "Error: " . $query_adrese . "<br>" . mysqli_error($connection);
}
$adresa_id = mysqli_insert_id($connection);
$query_clienti ="INSERT INTO clients (nume, email, telefon, adresa_id)
VALUES ('$nume', '$email', '$telefon', $adresa_id)";
if (mysqli_query($connection, $query_clienti)) {
} else {
echo "Error: " . $query_clienti . "<br>" . mysqli_error($connection);
}
$client_id = mysqli_insert_id($connection);
$query_useri ="INSERT INTO users (username, pass, client_id, activ)
VALUES ('$username', '$pass', '$client_id', 1)";
if (mysqli_query($connection, $query_useri)) {
} else {
echo "Error: " . $query_useri . "<br>" . mysqli_error($connection);
}
mysqli_close($connection);
?>
Generare AWB
<?php
session_start();
require_once("connection.php");
$client_id = $_SESSION["client_id"];
$nume = $_POST["dest_nume"];
$email = $_POST["dest_email"];
$telefon = $_POST["dest_tel"];
$strada = $_POST["dest_strada"];
$nr = $_POST["dest_nr"];
$cod_postal = $_POST["dest_cod_postal"];
$bloc = $_POST["dest_bloc"];
$scara = $_POST["dest_scara"];
$etaj = $_POST["dest_etaj"];
$apartament = $_POST["dest_ap"];
$nr_plicuri = $_POST["nr_plicuri"];
$nr_colete = $_POST["nr_colete"];
$greutate = $_POST["greutate"];
$inaltime = $_POST["inaltime"];
$latime = $_POST["latime"];
$lungime = $_POST["lungime"];
$plata_la = $_POST["plata"];
$ramburs = $_POST["ramburs"];
$plata_ramburs = $_POST["plata_ramburs"];
$sector = $_POST["dest_sector"];
if(!isset($_POST["ramburs"]) OR $_POST["ramburs"] <0){
$ramburs = 0;
}
$query_adresa_dest = "INSERT INTO adrese (strada, nr, cod_postal, bloc, etaj, scara, apartament, sector)
VALUES ('$strada', '$nr', '$cod_postal', '$bloc', '$scara', '$etaj', '$apartament', '{$sector}' )";
if (mysqli_query($connection, $query_adresa_dest)) {
} else {
echo "Error: " . $query_adresa_dest . "<br>" . mysqli_error($connection);
}
$adresa_id = mysqli_insert_id($connection);
$query_destinatari ="INSERT INTO destinatari (nume, email, tel, adresa_id)
VALUES ('$nume', '$email', '$telefon', $adresa_id)";
if (mysqli_query($connection, $query_destinatari)) {
} else {
echo "Error: " . $query_destinatari . "<br>" . mysqli_error($connection);
}
$destinatar_id = mysqli_insert_id($connection);
$today_date = date("Y-m-d");
$query_awb_number = "SELECT awb_number, DATE(data) AS data_awb
FROM awb WHERE client_id = {$client_id}
AND DATE(data) = '{$today_date}'
ORDER BY data DESC LIMIT 1 ";
$result_awb_number = mysqli_query($connection, $query_awb_number);
if (mysqli_num_rows($result_awb_number) >0) {
while($row = mysqli_fetch_assoc($result_awb_number)) {
$awb_vechi = $row["awb_number"];
$last_awb = substr($awb_vechi, strpos($awb_vechi, "_") + 1) + 1;
$awb_nou = date("dmY").$client_id."000_".$last_awb;
}
} else {
$awb_nou = date("dmY").$client_id."000_1";
}
$_SESSION["awb_number"] = $awb_nou;
$query_awb ="INSERT INTO awb (awb_number,client_id, destinatar_id, nr_plicuri, nr_colete, inaltime,
latime, lungime, greutate, plata_la, ramburs, plata_transp)
VALUES ('$awb_nou','$client_id', '$destinatar_id', '$nr_plicuri', '$nr_colete', '$inaltime',
'$latime', '$lungime', '$greutate', '$plata_la', '$ramburs', '$plata_ramburs')";
if (mysqli_query($connection, $query_awb)) {
} else {
echo "Error: " . $query_awb . "<br>" . mysqli_error($connection);
}
$query_awb_status ="INSERT INTO awb_status (awb_number, status)
VALUES ('$awb_nou', 'In asteptare')";
if (mysqli_query($connection, $query_awb_status)) {
} else {
echo "Error: " . $query_awb_status . "<br>" . mysqli_error($connection);
}
$today_date = date("Y-m-d");
$query_borderou_existent = "SELECT borderou_id, DATE(data) AS data_awb FROM borderouri WHERE client_id = {$client_id} AND DATE(data) = '{$today_date}' ORDER BY data DESC LIMIT 1 ";
$result_borderou_existent = mysqli_query($connection, $query_borderou_existent);
if (mysqli_num_rows($result_borderou_existent) >0) {
while($row = mysqli_fetch_assoc($result_borderou_existent)) {
$borderou_id = $row["borderou_id"];
echo "Borderou Existent";
}
} else {
$query_borderouri ="INSERT INTO borderouri (client_id, finalizat)
VALUES ('$client_id', 0)";
if (mysqli_query($connection, $query_borderouri)) {
} else {
echo "Error: " . $query_borderouri . "<br>" . mysqli_error($connection);
}
$borderou_id = mysqli_insert_id($connection);
}
$query_borderou_detalii ="INSERT INTO borderouri_detalii (borderou_id, awb_number, deleted)
VALUES ('$borderou_id', '$awb_nou', 0)";
if (mysqli_query($connection, $query_borderou_detalii)) {
header("location:view_awb.php");
} else {
echo "Error: " . $query_borderou_detalii . "<br>" . mysqli_error($connection);
}
mysqli_close($connection);
?>
Comanda curier
<?php
session_start();
require_once("connection.php");
$client_id = $_SESSION["client_id"];
$nr_plicuri = $_POST["nr_plicuri"];
$nr_colete = $_POST["nr_colete"];
$greutate = $_POST["greutate"];
$inaltime = $_POST["inaltime"];
$latime = $_POST["latime"];
$lungime = $_POST["lungime"];
$pers_contact = $_POST["pers_contact"];
$tel = $_POST["tel"];
$obs = $_POST["obs"];
$query_comanda = "INSERT INTO comenzi (client_id, nr_plic, nr_colete, greutate, inaltime,
latime, lungime, pers_contact, tel, obs, status)
VALUES ('$client_id', '$nr_plicuri', '$nr_colete', '$greutate', '$inaltime',
'$latime', '$lungime', '$pers_contact', '$tel', '$obs', 'Plasata' )";
if (mysqli_query($connection, $query_comanda)) {
header("location:../istoric_comenzi.php");
} else {
echo "Error: " . $query_comanda . "<br>" . mysqli_error($connection);
}
Istoric AWB
<?php
session_start();
require("header.php");
require_once("includes/connection.php");
$client_id = $_SESSION["client_id"];
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("h5.istoric_awb_menu").addClass("active_menu");
});
</script>
<style>
#nested-form-bug {
position: absolute !important;
left: -2500px !important;
width: 20px !important;
}
</style>
<br><br><br>
<div align="left" style="margin-left: 50px;">
<strong><h3>Filtre:</h3></strong>
<br>
<form name="istoric_awb" id = "istoric_awb" method="POST" action="istoric_awb.php">
<label class="awb_lbl bold">AWB:</label>
<input type="text" name="awb_filtru" value="<?php echo isset($_POST["awb_filtru"]) ? $_POST["awb_filtru"]:"";?>" size="16" maxlength="50"><br>
<label class="awb_lbl bold">De la:</label>
<input type="date" name="data1" value="<?php echo isset($_POST["data1"]) ? $_POST["data1"]:""; ?>">
<br>
<label class="awb_lbl bold">Pana la:</label>
<input type="date" name="data2" value="<?php echo isset($_POST["data2"]) ? $_POST["data2"]:""; ?>">
<br><input type="submit" value="Cautare">
</div>
<br>
<table id="tabelCS" border="0" cellpadding="4" cellspacing="0" style="margin-bottom:2em; width:1184px;">
<tbody><tr align="left">
<td align="center" id="textbox0"><strong>AWB</strong></td>
<td align="center" id="textbox0"><strong>Expeditor</strong></td>
<td align="center" id="textbox1"><strong>Destinatar</strong></td>
<td align="center" id="textbox1"><strong>Data AWB</strong></td>
<td align="center" id="textbox1"><strong>Plicuri</strong></td>
<td align="center" id="textbox1"><strong>Colete</strong></td>
<td align="center" id="textbox1"><strong>Ramburs</strong></td>
<td align="center" id="textbox1"><strong>Status</strong></td>
<td align="center" id="textbox2"><strong>Actiuni</strong></td>
</tr>
<?php
$nr_awb_filtru = (isset($_POST['awb_filtru']) ? $_POST['awb_filtru'] : null);
if(isset($_POST["data1"]) AND isset($_POST["data2"]) AND $_POST["awb_filtru"] == "") {
$data_filtru_1= $_POST["data1"];
$data_filtru_2= $_POST["data2"];
if(strtotime($data_filtru_1) >strtotime($data_filtru_2)){
echo "Data de inceput nu poate fi mai mare ca data de sfarsit a intervalului.";
}else {
$query_awb = " SELECT distinct awb.awb_number as AWB, awb.client_id as client, destinatari.nume AS Destinatar, awb.nr_plicuri as Plicuri,
awb.nr_colete as Colete, awb.data AS Data, awb.ramburs AS Ramburs,
(SELECT status from awb_status where awb_number = AWB ORDER BY data DESC LIMIT 1 ) as Status, clients.nume as Expeditor
FROM awb
INNER JOIN destinatari ON awb.destinatar_id = destinatari.destinatar_id
INNER JOIN awb_status ON awb.awb_number = awb_status.awb_number
INNER JOIN clients ON awb.client_id = clients.client_id
WHERE awb.client_id = {$client_id}
AND DATE(awb.data) BETWEEN '{$data_filtru_1}' AND '{$data_filtru_2}'
ORDER BY awb_status.data DESC ";
$result_awb_generat = mysqli_query($connection, $query_awb);
if (mysqli_num_rows($result_awb_generat) >0) {
while ($row = mysqli_fetch_assoc($result_awb_generat)) {
?>
<tr bgcolor="#FFFFFF" align="center">
<td><?php echo $row["AWB"]; ?></td>
<td><?php echo $row["Expeditor"]; ?></td>
<td><?php echo $row["Destinatar"]; ?></td>
<td><?php echo $row["Data"]; ?></td>
<td><?php echo $row["Plicuri"]; ?></td>
<td><?php echo $row["Colete"]; ?></td>
<td><?php echo $row["Ramburs"]; ?></td>
<td><?php echo $row["Status"]; ?></td>
<td>
<form action="#" method="post" id="nested-form-bug"></form>
<form name="awb_borderou" action="includes/do_view_awb_borderou.php" method="POST" target="_blank">
<input type="hidden" name="awb_number" value="<?php echo $row["AWB"]; ?>">
<input type="submit" value="Print AWB">
</form>
</td>
</tr>
<?php }
}
}
}elseif($nr_awb_filtru){
$awb_filtru = $nr_awb_filtru;
$query_awb = " SELECT distinct awb.awb_number as AWB, awb.client_id as client, destinatari.nume AS Destinatar, awb.nr_plicuri as Plicuri,
awb.nr_colete as Colete, awb.data AS Data, awb.ramburs AS Ramburs,
(SELECT status from awb_status where awb_number = AWB ORDER BY data DESC LIMIT 1 ) as Status, clients.nume as Expeditor
FROM awb
INNER JOIN destinatari ON awb.destinatar_id = destinatari.destinatar_id
INNER JOIN awb_status ON awb.awb_number = awb_status.awb_number
INNER JOIN clients ON awb.client_id = clients.client_id
WHERE awb.client_id = {$client_id}
AND awb.awb_number = '{$awb_filtru}'
ORDER BY awb_status.data DESC ";
$result_awb_generat = mysqli_query($connection, $query_awb);
if (mysqli_num_rows($result_awb_generat) >0) {
while ($row = mysqli_fetch_assoc($result_awb_generat)) {
?>
<tr bgcolor="#FFFFFF" align="center">
<td><?php echo $row["AWB"]; ?></td>
<td><?php echo $row["Expeditor"]; ?></td>
<td><?php echo $row["Destinatar"]; ?></td>
<td><?php echo $row["Data"]; ?></td>
<td><?php echo $row["Plicuri"]; ?></td>
<td><?php echo $row["Colete"]; ?></td>
<td><?php echo $row["Ramburs"]; ?></td>
<td><?php echo $row["Status"]; ?></td>
<td><form action="#" method="post" id="nested-form-bug"></form>
<form name="awb_borderou" action="includes/do_view_awb_borderou.php" method="POST" target="_blank">
<input type="hidden" name="awb_number" value="<?php echo $row["AWB"]; ?>">
<input type="submit" value="Print AWB">
</form>
</td>
</tr>
<?php }
}
}
?>
</tbody>
</table>
</form>
<?php
require("footer.php");
?>
Istoric comenzi
<?php
session_start();
require("header.php");
require_once("includes/connection.php");
$client_id = $_SESSION["client_id"];
if(!isset($_SESSION["username"])){
header("location:index.php");
}
?>
<script type="text/javascript">
$(document).ready(function(){
$("h5.istoric_comenzi_menu").addClass("active_menu");
});
</script>
<br><br><br>
In aceasta pagina pot fi vizualizate toate comenzile plasate.
<br><br><br>
<form name="istoric_comenzi" action="istoric_comenzi.php" method="POST">
<label class="awb_lbl bold">De la:</label>
<input type="date" name="data1" value="<?php echo isset($_POST["data1"]) ? $_POST["data1"]:""; ?>">
<br>
<label class="awb_lbl bold">Pana la:</label>
<input type="date" name="data2" value="<?php echo isset($_POST["data2"]) ? $_POST["data2"]:""; ?>">
<br><br>
<input type="submit" value="Cautare">
<br><br>
<table id="tabelCS" border="0" cellpadding="4" cellspacing="0" style="margin-bottom:2em; width:1184px;">
<tbody><tr align="left">
<td align="center" id="textbox0"><strong>Numar comanda</strong></td>
<td align="center" id="textbox0"><strong>Data</strong></td>
<td align="center" id="textbox0"><strong>Ora</strong></td>
<td align="center" id="textbox1"><strong>Plicuri</strong></td>
<td align="center" id="textbox1"><strong>Colete</strong></td>
<td align="center" id="textbox1"><strong>Greutate</strong></td>
<td align="center" id="textbox1"><strong>Persoana contact</strong></td>
<td align="center" id="textbox1"><strong>Telefon</strong></td>
<td align="center" id="textbox1"><strong>Status</strong></td>
</tr>
<?php
if(isset($_POST["data1"]) AND isset($_POST["data2"]) AND ($_POST["data1"] <= $_POST["data2"])) {
$data_filtru_1 = $_POST["data1"];
$data_filtru_2 = $_POST["data2"];
$query_comenzi = "SELECT id_comanda , data, nr_plic, nr_colete , greutate, pers_contact, status, tel
FROM comenzi
WHERE client_id = $client_id
AND DATE(data) >= '{$data_filtru_1}' AND DATE(data)<= '{$data_filtru_2}'
ORDER BY id_comanda DESC ";
$result_comenzi = mysqli_query($connection, $query_comenzi);
if (mysqli_num_rows($result_comenzi) >0) {
while ($row = mysqli_fetch_assoc($result_comenzi)) {
$data = strtotime($row["data"]);
$data_formatata = date("d/m/Y" , $data);
$ora_formatata = date("H:i",$data);
?>
<tr bgcolor="#FFFFFF" align="center">
<td style="width:100px; height:30px;"><?php echo $row["id_comanda"]; ?></td>
<td><?php echo $data_formatata; ?></td>
<td><?php echo $ora_formatata; ?></td>
<td><?php echo $row["nr_plic"]; ?></td>
<td><?php echo $row["nr_colete"]; ?></td>
<td><?php echo $row["greutate"]; ?></td>
<td><?php echo $row["pers_contact"]; ?></td>
<td><?php echo $row["tel"]; ?></td>
<td><?php echo $row["status"]; ?></td>
</tr>
<?php }
}else{
echo "<br>"."Nu a fost efectuata nici o comanda curier in intervalul selectat."."<br>";
}
}else {
echo "Selectati intervalul dorit.";
}?>
</tbody>
</table>
</form>
<?php
require("footer.php");
?>
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiectarea Unei Aplicatii Online de Gestionare a Expedierilor Pentru Fan Courier Express Srl (ID: 150245)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
