PROIECTAREA ȘI REALIZAREA UNUI SITE TURISTIC Coordonator științific: Lect. Univ. Dr. Stanică Lavinia Student: Niță O. Mihai Liviu București 2019… [306952]

[anonimizat]:

Lect.Univ.Dr. Stanică Lavinia

Student: [anonimizat]

2019

[anonimizat]:

Lect. Univ. Dr. Stanică Lavinia

Student: [anonimizat]

2019

INTRODUCERE – OPORTUNITATEA ȘI IMPORTANȚA TEMEI PROPUSE

Într-o [anonimizat] a [anonimizat].

S.C." DESCOPERĂ LUMEA " S.R.L este o [anonimizat] o situație economiă favorabilă ce permite investiții în marketing și promovare. Am decis crearea unui site ce va reprezenta cea mai prietenoasa și facilă interfață între noi ca și companie și clienții noștri.

Pagina noastra va fi o [anonimizat], [anonimizat], locația, etc. El va functiona 24 de ore din 24, simplu, eficient și profitabil. [anonimizat], [anonimizat], recomandari hoteluri. Site-ul va reprezenta un punct de pornire în relația cu clienții și nu va înlocui personalul angajat.

[anonimizat]-[anonimizat]: [anonimizat], astfel încat deciziile de dezvoltare și investiții să fie luate având o bază reală.

Utilizatorii Internetului reprezintă cea mai extinsă piață demografică disponibilă: studenți, [anonimizat], în fapt un mare procent din potențialii clienți ai unei firme cu profil turistic. Într-o epoca în care timpul este prețios, o pagină web este la îndemâna oricui pentru a-și alege o destianție de vacanță.

Investițiile în crearea unui sistem informatic vor duce la ridicarea performanțelor societății. Integrarea de noi tehnologii și platforme se va face pe o direcție “open source” după cum urmează: la nivel de sisteme de operare se va implementa CentOS 7, [anonimizat]5 [anonimizat].

Introducerea tehnologiei “open source” va avea un impact major în veniturile companiei deoarece tot acest lanț de software și sisteme de operare nu au nici un cost de licențiere provenind din comunitatea Open Source. Alt avantaj al acestor tehnologii este comunitatea imensă de specialiști care lucrează la continuă dezvoltare a acestor platforme.

CAPITOLUL 1 – ANALIZA SISTEMULUI EXISTENT ÎN CADRUL S.C. "DESCOPERA LUMEA" S.R.L.

1.1 STUDIUL ȘI ANALIZA SISTEMULUI EXISTENT

S.C. " DESCOPERĂ LUMEA " S.R.L. a luat ființă în anul 2017 în baza Legii 31/1990 [anonimizat] J29/613/29.08.2016, cod fiscal RO18724669, CAEN 7912 “activități ale tur operatorilor”.

[anonimizat] 222, [anonimizat]: [anonimizat], telefon: 0040745856744. Are capitalul social de 1000 ron și este organizată ca o societate cu răspundere limitata, ce își desfășoară activitatea la sediul social, conform codului CAEN principal, având doi acționari cu părți sociale de 47%, respectiv 53%, acesta din urmă fiind și administrator al societații.

1.2 PRINCIPALELE ACTIVITĂȚI DESFĂȘURATE ÎN CADRUL SOCIETĂȚII

S.C." DESCOPERĂ LUMEA " S.R.L. are ca obiect de activitate aplicații din domeniul turismului, respectiv organizarea si vânzarea pachetelor de servicii turistice, atât în țară cât și peste hotare. Societatea identifica și oferă cele mai interesante vacanțe, din punct de vedere al bugetului, interesului și vârstei. De asemenea consiliază clienții în privința zonelor, țărilor ce urmează a fi vizitate, costurilor, perioadelor potrivite.

Societatea are ca public țintă clienții din Câmpina și împrejurimi: deși o piață limitată, S.C." DESCOPERĂ LUMEA " S.R.L. a înregistrat profit din primul an de activitate, cu un potențial de creștere destul de ridicat. În acest context am identificat oportunitatea creări unui site, care să creeze o piață mai largă și un acces mai facil la informații pentru persoanele interesate.

Fiind un domeniu de activitate destul de dinamic și în permanenta dezvoltare, concurența este semnificativă, mai ales în mediul online. În Câmpina, înregistrăm S.C. Sunrise Travel S.R.L, S.C Ioana S.R.L, S.C. Kaya Stef Tour S.R.L, acestora adaugându-li-se firme de renume din domeniu ce pot fi accesate virtual. Avantajul competitiv este prezența fizica în municipiul Câmpina, relația mai apropiată cu clienții, iar dezavantajul, lipsa prezenței în online.

1.3 INDICATORII ECONOMICI AI SOCIETĂȚII

Analiza indicatorilor economici (Tabelul 1) ne arată că în perioada 2016, 2017 societatea a înregistrat profit din exploatare, ceea ce permite noi investiții pentru dezvoltarea viitoare, observând trendul pozitiv al profitului.

Tabelul 1 – Date privind principalii indicatori economici S.C." DESCOPERĂ LUMEA " S.R.L. 2016-2017

Deși o societate nouă pe o piață cu concurență ridicată, S.C." DESCOPERĂ LUMEA " S.R.L. a reușit să atingă o cifră de afaceri importantă în zona economică unde își desfășoară activitatea, iar acționarii au decis că societatea necesită o investiție într-un site care să le aducă noi clienți.

1.4 STUDIUL SISTEMULUI DE CONDUCERE, RESPECTIV SISTEMULUI CONDUS

Organigrama societății S.C." DESCOPERĂ LUMEA " S.R.L: după cum identificăm în figura de mai jos, sistemul de conducere al societății este format din administratorul societații, managerul operațional și managerul de vânzări, fiecare având pe linie de subordonare alți angajați.

ORGANIGRAMA S.C." DESCOPERĂ LUMEA " S.R.L

Figura 1.1

Sistemul de conducere al S.C." DESCOPERĂ LUMEA " S.R.L este reprezentat de:

Administrator, cu urmatoarele atribuții: stabilește relațiile cu finanțele, are dreptul de semnătură a actelor în bancă, aprobă decontările de obligațiuni către stat, aprobă decontările de facturi către furnizori prin CEC, ordin de plată sau cash, prezintă actele la control organelor de control ale statului.

Manager operational, cu urmatoarele atribuții: coordonează din punctul de vedere al afacerii persoanele din subordine, coordoneaza fluxul activității.

Manager vânzări, cu urmatoarele atribuții: stabilește politica de marketing a societății, întocmește listele de oferte cu produse către client, stabilește profitabilitatea ofertelor facturate de furnizori, verifică încasările din activitatea comercială, stabileste politica de vanzari, campanii publicitare/de marketing.

Personalul condus este angajat în cadrul S.C." DESCOPERĂ LUMEA " S.R.L de o comisie formata din:

Administator și Manager operațional

fie

Administator și Manager Vânzări, in funcție de specificul postului ce urmeaza a fi ocupat. Sistemul condus este format din șapte persoane.

Structura personalului:

• structura pe grupe de vârsta:

– 22-40 ani => 5 angajați;

– 41-50 ani => 1 angajați;

– 51-60 ani => 1 angajat.

• structura pe sexe:

– bărbați => 2 angajați;

– femei => 5 angajați.

• structura după pregătirea profesională:

– cu studii superioare => 4 angajați;

– fără studii superioare => 3 angajați.

• structura pe grupe de profesiuni:

– economiști => 4 angajați;

– informaticieni => 1 angajat;

– secretara =>1 angajat;

– personal curațenie => 1 angajat.

Atribuțiile serviciului de marketing și ale celui de vânzări sunt:

promovarea produselor și serviciilor oferite de societate.

promovarea produselor și serviciilor oferite prin flyere, bannere stradale.

organizarea de evenimente (“porți deschise”) pentru atragerea de noi clienți și fidelizarea celor existenți;

creșterea cotei de piață.

Responsabilul de IT se ocupă de întreținerea software și hardware, iar responsabilul economico financiar de documentele ce țin de domeniul sau de activitate: emitere și înregistare facturi, documente de plata și încasare, închideri financiar contabile, depunere declarații către organele competente, realizarea balanțelor și bilanțului societății.

1.5 SISTEMULUI INFORMAȚIONAL

1.5.1 SCHEMA FLUXULUI INFORMATIONAL – DESCRIEREA DOCUMENTELOR UTILIZATE

În figura de mai jos se prezintă pe larg fluxul informațional în cadrul companiei de la inițierea cererii clientului care trece prin departamentul vânzări/ofertare după care merge la responsabilul financiar contabil și revine la vânzări pentru serviciul post-vânzare.

Fluxul poate fi mai scurt, în situația în care agentul de vânzări a înțeles pe deplin nevoile, respectiv solicitările clientului, sau poate fi un flux lung, în situația în care clientul solicită modificări ale ofertei inițiale. În cadrul site-ului, câmpul înregistrare ofera date suplimentare pentru agentul de vânzări care ofertează, respectiv: stare civilaă, vârstă, sex. Plus, site-ul are deja pachetele înregistrate, astfel încât timpul alocat unui client să fie mult mai scurt, iar efectul final să fie un cost redus pentru societate și un client mulțumit de oferta pliată pe nevoile sale.

Deși există un numar redus de documente care circula in cadrul S.C." DESCOPERĂ LUMEA " S.R.L, fluxul a fost creat avand ca obiectiv scurtarea timpului de așteptare pentru client și a costurilor cu timpi morți pentru societate.

Principalele documente ce circula în cadrul societații sunt:

Comanda de la client, respectiv solicitarea de ofertă

Oferta către client

Factura proformă

Document ce atestă/confirmă plata

Voucher de călatorie.

Aceste documente pot fi clasate în două categorii:

Documente de intrare, ce primesc număr de înregistrare în registrul de intrări – cererea de ofertă, document ce dovedește plata

Documente de ieșire, ce primesc număr de înregistrare în registrul de ieșiri – ofertă, factură proformă, voucher.

Model voucher

Figura 1.5

Figura 1.6

Model factură proformă

Figura 1.7

Model confirmare plată

Figura 1.8

Modul în care aceste documente circula în cadrul S.C." DESCOPERĂ LUMEA" S.R.L este exemplificat în schema fluxului informațional de mai jos.

Figura 1.9

Crearea site-ului scurtează timpul pe care clientul este obligat să îl consume pentru a alege pachetul potrivit pentru el: refuzurile ofertelor ar scădea semnificativ, astfel fiecare agent de vânzări ar putea fi încărcat cu un numar suplimentar de solicitari.

Site-ul trebuie să includă ca funcționalitați urmatoarele componente:

Un sistem de ofertare generat pe baza criteriilor de cautare.

Oferta include localizarea, detalii despre unitatea de cazare, servicii, preț.

Aplicația informatică trebuie să fie accesibilă de pe toate dispozitivele mobile (tabletă, telefon mobil, laptop);

Aplicația informatică trebuie să fie disponibilă on line 24 din 24, 7 zile din 7.

Aplicația informatică trebuie să folosească o bază de date centralizată, care să genereze rapoarte ce vor sustine departamentele de marketing și vânzări prin informații asupra persoanelor ce s-au înregistrat pe site: sex, vârstă, stare civilă.

Concluzionând, se poate afirma că implementatrea aplicației informatice va conduce la realizarea urmatoarelor aspecte pozitive:

creșterea vitezei de lucru în ceea ce privește analizarea solicitarilor și intocmirea ofertelor.

creerea unei transparențe totale în relația cu clienții.

o scădere a costurilor per client.

atragerea unor noi clienți și fidelizarea celor existenți prin cunoșterea nevoilor lor.

accesul la aplicație de pe orice dispozitiv mobil de oriunde pentru toate părțile implicate.

aplicația va rula pe 2 servere în același timp situate în data centere diferite cât și unul în cloud evitând întreruperea serviciilor în caz de catastrofe sau dezastre naturale.

1.5.2. FLUXUL DOCUMENTELOR – DESCRIEREA CIRCUITULUI INFORMAȚIONAL

Departamentul vânzări și marketing, la primirea cererii de oferta (document de intrare), analizează solicitarea venită de la potențialul client, identifică cel mai potrivit pachet de servicii, verifică cu responsabilul financiar – contabil costul, respectiv prețul acelui serviciu și trimite către client oferta (document de ieșire).

Clientul va primi un email cu oferta sau oferta pe support de hârtie, va analiza și va confirma prin email sau telefon acceptarea ofertei. În situația în care o refuză, circuitul informațional se inchide. În cazul în care necesită modificari ale ofertei, un email va fi trimis către departmentul de vânzări și marketing.

În momentul în care oferta este acceptată, clientul va trimite și datele de identificare pentru emitrerea documentului de plată. Responsabilul financiar – contabil va emite factura proformă (document de ieșire) și o va trimite către departamentul de vânzări, iar acest department la rândul său o va trimite către client.

Clientul are obligația de a trimite un document ce confirmă plata (document de intrare), iar apoi responsabilul financiar – contabil va emite voucher-ul (document de ieșire). Acesta va fi trimis clientului tot de catre departamentul vanzari.

1.5.3 MODELUL CONCEPTUAL AL PRELUCRARILOR

Analiza sistemului trebuie să se concentreze în principal asupra fluxului de date și asupra secvenței de prelucrări care se efectuează asupra acestor date, în scopul fundamentării deciziilor prin oferirea de informații corecte și în timp util. Modelarea logică a prelucrărilor își propune să repartizeze activitățile pe etape de lucru : fiecare operație se descompune în faze de lucru, iar o succesiune de faze aparținând aceluiași proces va forma o procedură.

Incepem prin a analiza schema fluxului în cazul activității identificându-se următoarele operații:

Clientul trimite o solicitare de ofertă.

Funcție de detaliile din solicitare, un responsabil de vânzări va solicita prin email sau telefonic informații suplimentare, astfel încât să poată pregăti cea mai potrivită ofertă.

Responsabilul de vânzări va trimite oferta către client, după verificarea în prealabil a costurilor cu departamentul financiar – contabil și solicită informațiile necesare emiterii proformei.

Responsabilul financiar – contabil pregatește proforma, după ce clientul acceptă oferta.

Responsabilul vânzări trimite preforma și solicită dovada plații.

Responsabilul financiar – contabil emite voucher, după primirea dovezii plății.

În urma analizei fluxului informațional, am identificat oportunitatea creării unui site, ceea ce ar avea ca rezultat final o creștere a cifrei de afaceri și a profitabilității firmei, prin reducerea timpului alocat fiecarei solicitări, prin fidelizarea clienților ale căror nevoi au fost identificate și satisfăcute corect, prin atragerea unei alte cote de piață, inaccesibilă până la acel moment (potențiali clienți care își încep cautarea exclusiv online). Generarea rapoartelor pe grupe de vârstă, stare civilă, sex direct din site va aduce un plus de informații departamentului vânzări și marketing pentru stabilirea corectă a politicilor de fidelizare clienți, promovare societate, promovare servicii în zonă, dar și extinderea, dat fiind ca o parte semnificativă din clienți ar avea doar legături la nivel virtual cu societatea.

1.5.4 ANALIZA CRITICĂ A SISTEMULUI ACTUAL SI IDENTIFICAREA NEAJUNSURILOR EXISTENTE ÎN FUNCȚIONAREA SISTEMULUI

În urma analizei sistemului actual existent în cadrul S.C. " DESCOPERĂ LUMEA " S.R.L s-au indentificat următoarele deficiențe:

Lipsa prezenței societății în mediul online.

Timp îndelungat alocat la telefon sau prin email pentru a identifica nevoia reală a clientului.

Capacitate limitată a personalului din vânzări și marketing de a cauta noi oportunități de dezvoltare.

Limitarea zonală dată de lipsa prezenței în online.

Timpul alocat de către client pentru a achiziționa un pachet turistic este mai mare, în cazul în care s-ar îndrepta către societatea vizată, dat fiind că nu există nicio informație prealabilă, astfel că pe întreg parcursul procesului de achiziție are nevoie să fie în legatură cu un responsabil de vânzări.

Lipsa viziunii pe termen lung și pericolul de plafonare la cifra de afaceri actuală, care ar avea, în timp, influență negativă asupra profitului.

1.5.5 DIRECȚII DE PERFECȚIONARE

Aplicația informatică care urmează a fi dezvoltată trebuie să aduca urmatoarele beneficii:

– un sistem de ofertare deschis atât către clientul extern cat si catre clientul intern al firmei, respectiv departamentul vanzari marketing. Pentru clientul extern, este importantă prezența informațiilor detaliate în faza de prospectare, informații legate de locație, preț, rating pe motoare de evaluare.

– pentru clientul intern, respectiv departamentul vânzări marketing, sunt de un real folos rapoartele generate per vizitatori, pe categorii de vârstă, sex, stare civilă si desigur, modalitate de contact. Asumând ca o primă vizită a potențialului client pe site nu se finalizează cu o achiziție, responsabilul vânzări îi poate trimite ulterior oferte considerate adecvate. De asemenea, pentru clienții existenți, se poate crea un program de fidelizare, tot bazat pe rapoartele mai sus menționate.

– reducerea timpului alocat închiderii unei solicitări – clientul avaând deja baza ofertei din site, va fi concis în solicitare, astfel încât responsabilul de vânzări să poată face oferta potrivită, fără a fi neceare ajustari ulterioare.

– prezenta pe piață 24/24 și 7/7.

– acces la serviciile societății de pe toate dispozitivele mobile (tabletă, telefon mobil, laptop).

Conluzionând, se poate afirma că implementatrea aplicației informatice va conduce la realizarea urmatoarelor aspecte pozitive:

– creșterea vitezei de lucru în ceea ce privește prelucrarea informațiilor si ofertarea.

– creșterea capacitătii de abordare a unor noi potențiali clienți.

– o analiză centralizată a vizitatorilor site-ului.

– accesul la aplicație de pe orice dispozitiv mobil de oriunde pentru toate parțile implicate;

– aplicația va rula pe 2 servere în același timp situate în data centere diferite cât și unul în cloud evitând întreruperea serviciilor în caz de catastrofe sau dezastre naturale.

CAPITOLUL 2 PREZENTAREA TEHNOLOGIILOR INFORMATICE UTILIZATE PENTRU REALIZAREA APLICAȚIEI

În vederea realizării aplicației informatice care urmează a fi implementata se vor folosi diverse tehnologii ce vor rula atât pe partea de client (utilizator) cât și pe partea de server.

În continuare vom descrie câțiva termeni utilizați pentru a avea o mai bună viziune a fluxurilor informaționale.

Back-end – tehnologii care rulează la nivel de server.

Front-end – tehnologii care ruleaza la nivel de client.

Server – masina fizică (calculator);

Server de bază de date – soft care rulează pe o masină fizică (server, host, workstation);

Server de web – soft care rulează pe o masină fizică (server, host, workstation) care face posibilă disponibilitatea online a aplicației;

Query – comenzi in limbajul SQL

Input – date introduce de utilizator de la tastatură

2.1 TEHNOLOGII UTILIZATE

2.1.1 LIMBAJUL DE SCRIPTING

Limbajul PHP este capabil să prelucreze date la nivel server-side procesând formulare html cu inputul de la utilizatori și introducându-le în baza de date MySql. Toate aceste lucruri pot fi posibile datorita faptului că e capabil să înglobeze în codul sau sintaxe de comenzi adresate serverelor de baze de date. Prin acest fapt se pot executa query-uri pe bazele de date manipulând înregistrari la nivel de tabele.

2.1.2 SERVERUL DE BAZE DE DATE

MySql community server – Este un server de baze de date relaționale cu o utilizare ridicată pentru aplicații web mici si medii. Este de asemenea portabil pe diferite platforme utilizând destul de puține resurse de bandă ceea ce îl face să fie foarte îndragit si apreciat de dezvoltatorii de aplicații web.

2.1.3 HTML 5

HTML – Hypertext Markup Language este un limbaj mark-up folosit pentru crearea paginilor web ce pot fi afișate într-un browser (navigator ex: Internet Explorer, Mozilla Firefox, Chrome, Safari).

2.1.4 CSS3

CSS (Cascading Style Sheets) este un standard pentru formatarea elementelor din cardul unei pagini HTML. Utilizarea CSS ca limbaj de formatare a painilor web se poate face in 2 feluri:

in line, adica codul css este încorporat în pagina HTML;

apelare din o cale de fișiere în interiorul header-ului paginii HTML

2.1.5 JAVASCRIPT

Este un limbaj de programare orientat pe obiect folosit în diferite domenii printre care și la dezvoltarea paginilor WEB. Javascript este folosit pentru introducerea unor funcționalități în paginile web, codul acestuia fiind rulat de către browser.

2.1.6 jQUERY

jQuery faciliteaza îmbunătățirea proceselor precum și parcurgerea structurii arborescente a DOM în HTML, pornirea anumitor evenimente în interiorul browser-ului, a diverselor animații sau procesarea de cereri tip AJAX.

2.2 COMPARAȚIE CU ALTE TEHNOLOGII EXISTENTE PE PIAȚĂ

Toate tehnologiile alese pentru dezvoltarea aplicației pentru firma S.C. Descoperă Lumea S.R.L fac parte din sfera software “open source” ceea ce inseamnă că nu implică costuri de licențiere. Pornind de la premizele că sunt destinate unei companii de marime mici spre medii este oportună aceasta abordare din punct de vedere al costurilor de dezvoltare.

Tehnologii concurente:

Servere de baze de date

Oracle Database – Oracle, SQL Server – Microsoft , PostgreSql, MariaDB, NoSql

Servere WEB:

IIS – Microsoft, nginx – NGINX INC, GWS – Google

Limbaj de scripting:

JSP – java server pages Oracle, ASP – asynchronous server pages, .net – Microsoft

CSS – Frameworks:

Foudation, Skeleton, Less

Tehnologiile alese sunt susținute și dezvoltate de o mare comunitate de dezvoltatori astfel este oferit acces la informații din cele mai diverse legate de acestea. Toate aceste tehnologii garantează succesul aplicației, conlucrând între ele în aplicații și platforme utilizate în zilele noastre, ca in urmatoarele exemple:

Top 10 site-uri care utilizează PHP: facebook.com, wappalyzer.com, wordpress.org, drupal.org, php.net, rutracker.org, vk.com, laravel.com, laracasts.com, freepik.com

Top 15 site-uri de e-commerce (comert online) care folosesc HTML5:

http://puma.com/, http://www.asos.com/, http://www.apple.com/, http://store.diesel.com, http://www.lego.com/en-us/, http://www.nixon.com/, https://global.tommy.com/, http://oxydo.net/, http://www.arsenal.com, http://www.currys.co.uk/, http://www.nike.com/, http://www.niftythriftythings.com/, https://www.net-a-porter.com/, https://www.maccosmetics.com/, http://www.hm.com

CAPITOLUL 3 PROIECTAREA DE DETALIU A APLICAȚIEI INFORMATICE

3.1 Definirea obiectivelor aplicației informatice

Aplicația informatică va avea capacitatea să gestioneze solicitările de oferte ale clienților companiei în funcție de criteriile de căutare și sortare selectate, precum țara de destinație sau bugetul disponibil.

Sistemul are ca obiectiv atât interacțiunea în timp real cu utilizatorii cât și păstrarea datelor personale ale clienților într-un istoric ce va permite ulterior generarea de rapoarte statistice cuprinzând informații legate de preferințele clienților în funcție de vârstă, sex sau stare civila.

În ceea ce privește disponibilitatea sa, obiectivul este ca sistemul să fie „high available“, acesta putând fi accesat 24 din 24, 7 zile din 7.

Aplicația va stoca datele de intrare ieșire într-o bază de date relațională de SGBD (Sistem de gestiune a bazelor de date) Mysql și va oferi posibilitatea salvării de siguranță a datelor și arhivării periodice în vedere stocării pe alte servere ale companiei.

3.2 Proiectarea logică şi fizică a ieşirilor

Site-ul va folosi date ce vor fi stocate in Baza de date „descop_db1“. Aceasta va înregistra datele procesate şi va păstra în istoric datele folosite. Datele de ieşire se vor obţine dinamic prin interogarea SGBD-ului.

Categoriile de entități utilizate în baza de date sunt:

Clienţi – aceștia sunt definiți de următoarele atribute: username, nume_prenume, email, vârstă, gen, stare civilă și parola (folosită pentru autentificarea clienților).

Hoteluri – acestea vor fi definite prin caracteristici ca locul de destinație, numele unitatii turistice și o scurtă descriere a acesteia, prețul unei camere pe noapte, check-in și check-out pentru a defini perioada de disponibilitate, ratingul atribuit unității turistice de către alți clienți, imagine atașată ofertei și o serie de facilități pe care unitatea turistică le pune la dispoziție (ex. spa, fitness etc.).

Excursii – acestea vor fi definite prin caracteristici ca tipul excursiei (ex. munte, mare, băi), numele excursiei și o scurtă descriere a acesteia, prețul excursiei, check-in și check-out pentru a defini perioada de disponibilitate, locul de plecare, ratingul atribuit excursiei de către alți clienți, imagine atașată ofertei și o serie de facilități pe care excursia le pune la dispozitie (ex. aer condiționat, acces animale). Atributul marketing a fost adăugat pentru a-i oferi clientului posibilitatea de a decide care sunt excursiile ce vor fi afișate pe prima pagină în scopuri de marketing.

Croaziere – acestea vor fi definite prin caracteristici ca locul de destinație, numele vasului de croazieră și o scurtă descriere a acestuia, prețul întregului pachet pe persoană, check-in și check-out pentru a defini perioada de disponibilitate, locul de plecare, ratingul atribuit croazierei de către alți clienți, imagine atașată ofertei și o serie de facilități pe care vasul de croazieră le pune la dispoziție (ex. spa, fitness).

Atributul marketing a fost adăugat pentru a-i oferi clientului posibilitatea de a decide care sunt croazierele ce vor fi afișate pe prima pagină în scopuri de marketing.

Activități – acestea vor fi definite prin caracteristici ca tipul activității (ex. echitație, ski), nume și o scurtă descriere a activității, locul desfășurării activității, prețul întregului pachet, check-in și check-out pentru a defini perioada de disponibilitate, ratingul atribuit activității de către alți clienți, imagine atașată ofertei și o serie de opțiuni pe care activitatea le pune la dispoziție (ex. echipament, instructor).

Rezervări – acestea vor fi definite prin caracteristici ca username-ul clientului (folosit pentru identificarea ulterioară a clientului), tipul rezervării (hotel, croazieră, activitate sau excursie), id-ul ofertei (a hotelului, croazierei, excursiei sau activității), check-in-ul și check-out-ul rezervării.

Ieşirile vor fi atât date către clienţi sub formă finită cât și date către administrator sub forma de rapoarte.

Ofertele către clienți se vor baza pe query-urile SQL (interogări ale bazei de date) și se vor genera dinamic în funcție de criteriul ales de către utilizator, dintre cele disponibile: țara de destinație, buget disponibil, perioada dorita, facilitati necesare.

Rapoartele pentru administrator se vor baza tot pe interogări ale bazei de date și se vor genera dinamic în funcție de optiunea aleasă de către administrator, dintre cele disponibile: categoria rezervarii (ex. hoteluri, activități), perioada de raportat (ex. anul 2018, ultimele 3/6 luni, următoarele 3/6 luni), criteriu de grupare (ex. stare civilă, gen).

3.3 Proiectarea logică şi fizică a intrărilor

Aplicația va folosi ca date de intrare date introduse de clienți (date personale ale clienților), date introduse de utilizatorii cu rol de administrator care au ca și responsabilitate introducerea de noi oferte în baza de date și date prelucrate de către aplicație precum rezervările efectuate de clienți. Datele de intrare sunt stocate în baza de date „decop_db1“ in felul următor:

Clienți – conține date de intrare introduse de clienți.

Hoteluri, Excursii, Activități și Croaziere – conține date de intrare introduse de adiministrator

Rezervări – conține date de intrare prelucrate de către aplicație în urma efectuării unei rezervări de către client.

3.4 Proiectarea sistemului de codificare a datelor

Codificarea datelor se face folosind limbajul de scripting PHP ce va rula pe serverul de aplicaţie. Acesta va răspunde cererilor de înregistrare și autentificare venite din partea clienţilor şi va procesa de asemenea datele trimise de aceştia. Totodată tot codul scris în limbajul PHP va realiza popularea bazei de date cu înregistrari noi, actualizarea celor existente cât şi ştergerea lor, de asemenea va face inclusiv interogările responsabile de afișarea ofertelor.

În figura 3.1 se prezintă logica din spatele schimbului de date dintre serverul de aplicaţie şi clienţii simultan conectaţi. Se poate observa că pe serverul de aplicaţie rulează serverul web Apache care aşteaptă conexiunile clienţilor cât şi serverul de baze de date, toate conexiunile între cele 2 servere fiind realizate cu ajutorul PHP.

Figura 3.1 – Flux codificare date server de aplicaţie – clienţi multipli

3.5 Proiectarea bazei de date

La proiectarea bazei de date s-a ţinut cont de mai mulţi factori după cum urmează:

tipul de date tranzacţionate (integer, date, varchar, text, boolean);

volumul de date tranzacţionat;

conexiuni simultane;

referinţe între date (chei şi indecşi);

Astfel s-a creat baza de date descop_db1 ce este compusă din 8 tabele după cum se poate vedea în figura 3.2. Fiecare tabelă are un index unic, autoincrement pentru a ridica viteza de execuție a comenzilor query de SQL în vederea incarcarii grafice pentru client si generării rapoartelor pentru administrator.

Figura 3.2 – Structura bazei de date descop_db1

Figura 3.3 – Înregistrări în tabela clienți

Figura 3.4 – Înregistrări în tabela hoteluri

Figura 3.5 – Înregistrări în tabela croaziere

Am dorit sa ii oferim clientului posibilitatea de a cauta excursii dintr-o anumita categorie (ex. mare, munte, băi, natură). Provocarea a venit din faptul că pentru fiecare categorie vom avea mai multe înregistrări de excursii și în același timp fiecare excursie poate fi încadrată în mai multe categorii.

Să luam ca exemplu categoria „lăcașuri de cult” care poate conține excursiile „Maramureș” și „Mănăstirea Snagov”, iar în același timp, „Maramureș” aparține atât categoriei „lăcașuri de cult” cât și categoriei „natură”.

Pentru a putea gestiona astfel de situații am creat tabele excursii si categorii_excursii între care există o relație de many-to-many. Deasemenea a mai fost nevoie de crearea unei tabele suplimentare numita excursii_link care să stocheze relația dintre fiecare excursie și fiecare categorie din care face parte, aceasta având ca și atribute id-ul excursiei și id-ul categoriei. Vezi figura 3.6.

Figura 3.6 – Înregistrări în tabelele excursii, categorii_excursii si excursii_link

Figura 3.7 – Înregistrări în tabela activități

Figura 3.8 – Înregistrări în tabela rezervări

3.6 Schema de sistem a aplicației

Aplicaţia este compusă din 2 servere fizice aflate în data centerul din sediul firmei şi unul în centru de back-up. S-a ales această opţiune pentru a avea o disponibilitate ridicată a sistemului informatic în cazul întreruperii conexiunilor de internet în sediu sau alte pericole (incendiu, cutremure). Pe aceste servere rulează:

un server web apache

un server MySql

PHP

Serverele de aplicaţie au configuraţii identice la nivel de PHP si Apache singura diferenţă între sediu şi centrul de backup este că la sediu serverul de MySql este Master (Stăpân) iar cel de-al doilea este Slave (sclav) ceea ce înseamnă că toate datele sunt sincronizate între cele 2 în timp real după cum se vede in Figura 3.

Figura 3.9 Schema de sistem a aplicaţiei

În cazul în care conexiunea la internet pică în sediu sau sunt probleme pe serverul principal se comută pe serverul din centrul de backup.

3.7 Proiectarea interfeței aplicației

Aplicația va dispune de o interfață web ce va rula în browser (un software ce are ca scop descărcare și prezentarea resurselor din www – World Wide Web). Interfața aplicației este partea din program care îi este familiară utilizatorului, întrucât acesta lucrează doar cu partea de front-end a proiectului. Deoarece experiența utitlizatorului trebuie să fie de cea mai mare calitate, dar în concordanță cu specificul site-ului, în proiectarea interfeței am lucrat îndeaproape cu departamentul de Vânzări și Marketing.

3.8 Propuneri de dotare cu echipamente IT şi costuri aferente

După cum am arătat în figura 3.1 vom avea nevoie de 2 servere fizice. Acestea vor avea configuraţia de mai jos:

Dell Power Edge R730 Rack Server

Procesor Intel® Xeon® processor E5-2600 v4 product family 33

Placă de baza Intel C610 series chipset

Memorie pâna la 1.5TB (24 DIMM slots): 4GB/8GB/16GB/32GB/64GB DDR4

Stocare HDD: SAS, SATA, nearline SAS; SSD: SAS, SATA 16 x 2.5” – up to 29TB via 1.8TB hot-plug SAS hard drives 8 x 3.5” – up to 64TB via 8TB hot-plug nearline SAS hard drives

Interfeţe reţea 4 x 1Gb, 2 x 1Gb + 2 x 10Gb, 4 x 10Gb

Preţ informativ 1450 euro/bucată.

Tehnologiile folosite la dezvoltarea aplicatiei nu implică costuri de licenţiere folosindu-se framework-uri (o arhitectură de software) din lumea open source.

CAPITOLUL 4 PROIECTAREA DE DETALIU A SITE-ULUI DESCOPERĂ LUMEA

4.1 Tipuri de terminale ce permit rularea aplicaţiei

Aplicația poate rula pe orice device care are instalat un browser Web (se conectează la un server Web și primește pagini Web pentru afișare):

Telefoane inteligente;

Laptopuri;

Tablete;

Staţii de lucru;

4.2 Casete de dialog cu utilzatorii

4.2.1 Home page

Pagina web creată în cadrul acestei lucrări de licență este una ce se axează pe informarea ofertelor turistice din întreaga lume. Căutarea se poate face după destinația preferată sau bugetul pe care îl ai alocat pentru o viitoare călătorie.

Figura 4.1 – Pagina home a proiectului

Pagina web este împărțită în 3 zone: bara de navigare (header), zona de conținut și subsolul paginii (footer).

Zona header (Figura 4.2) cuprinde numărul de telefon la care se poate suna pentru a afla cât mai multe informații despre oferte, numărul de telefon la care se poate suna pentru urgențe, link către pagina M.A.E pentru a te informa legat de alertele de călatorie în diferite tări și link către pagina de facebook a site-ului.

Figura 4.2 – Header

4.2.2 Sign-up și Autentificare

În partea dreaptă, urmează o integrare cu AD-ul (Active Directory) pentru a se putea realiza autentificarea sau înregistrarea.

Prin utilizarea butonului de înregistrare pentru clienții noi se va deschide o casuță de dialog (Figura 4.3) în care utilizatorul poate introduce toate detaliile necesare (nume, prenume, gen etc). Toate câmpurile trebuie completate de către utilizator, datele urmând să fie validate de sistem și salvate în baza de date (în tabelul autentificare) odată ce butonul Trimite este apăsat.

Figura 4.3 – Formular înregistrare

Secțiunea de logare este prezentată în Figura 4.4 și se face pe baza username-ului și parolei furnizate de utilizator la înregistare.

Figura 4.4 – Formular autentificare

Zona de conținut începe cu afișarea logo-ului și paginile de navigare disponibile (Figura 4.5):

Figura 4.5

4.2.3 Despre noi

4.2.4 Contact

În pagina de contact, am creat un form unde putem să facem schimb de informații cu cei care vor să fie la curent cu toate ofertele noastre (Figura 4.6).

Figura 4.6 – Formular de contact

Tot aici am adăugat toate informațiile cu privire la datele de contact, de la numărul de telefon, până la implementarea localizării pe hartă unde se găsește sediu central (Figura 4.7).

Figura 4.6 – Harta

4.2.5 Căutare oferte

Atât în pagina principală, cât și în cea de oferte găsim search tab-urile de unde putem să rezervăm șederea noastră la un hotel, o călătorie pe un vas de croazieră sau într-o excursie și un pachet turistic unde ne vom bucura de activitățile preferate.

Figura 4.7

Pentru implementarea căutării se realizează conexiunea la baza de date și executarea diferitelor query-uri, care sunt construite dinamic în funcție de criteriile de căutare selectate de către utilizator, ca de exemplu destinația, prețul, check-in și check-out în cazul căutării unui hotel sau perioada (ex. August) în cazul căutării unei excursii/croaziere/activități.

$db = mysqli_connect("sql581.your-server.de", "user", "parola", "descop_db1") or die("Error connecting to database: ".mysql_error());

if ($destinatie) {

$sql[] = " destinatie = '$destinatie' ";

}

if ($pret) {

$sql[] = " pret < $pret ";

}

$query = "SELECT *, DATEDIFF('$check_out', '$check_in') as zile FROM hoteluri";

if (!empty($sql)) {

$query .= ' WHERE ' . implode(' AND ', $sql);

}

$result = $db->query($query);

Implementarea completa se poate regasi la anexa numarul 1.

4.2.6 Vizualizare Oferte și Sortare

Vizualizarea ofertelor se poate customiza luând în considerare criteriile selectate de către utilizator. Astfel utilizatorul poate decide care sunt cele mai relevante aspecte ale ofertei ținând cont de necesitățile sale, folosind filtrele predefinite: locația exacta a hotelului, numărul de stele acordate pe site-urile de evaluare, distanța hotelului față de centrul orașului/stațiunii, prețul ofertei.

Ulterior afișării rezultatelor, clientul poate sorta crescător sau descrescător ordinea afișării ofertelor luând în considerare criteriile predefinite.

4.2.7 Statistici

Pentru evidențierea profesionalismului și a ratei de satisfacție în rândul clienților existenți, utilizatorii pot vizualiza pe pagina principală a site-ului statistici pe ani bazate pe numarul de clienți ce au beneficiat de serviciile Descoperă Lumea în ultimii 2 ani, precum și celor care au revenit de-a lungul anilor. Statisticile cuprind și numărul țărilor de destinație pe care firma Descoperă Lumea le are în portofoliul său, precum și restaurante și cafenele partenere. (Figura 4.6)

Figura 4.6 – Statistici clienți și oferte

4.2.8 Marketing

Deoarece reclama e sufletul comerțului și dorim ca utilizarea site-ului atât de către client cât și de către administrator să fie cât mai flexibilă, din contul de administrator se pot modifica ofertele ce vor apărea pe prima pagină pentru a promova cele mai căutate sau cele mai avantajoase oferte.

Pentru a-i permite administratorului să definească ce excursii vor fi afișate pe prima pagină, am introdus în tabela excursii câmpul marketing care poate fi setat cu valorea 1 pentru a marca faptul că oferta respectiva este folosită pentru promovare. Figura 4.7

Figura 4.7 – Secțiunea cele mai bune excursii, pagina principală

Același mecanism, respectiv adăugarea câmpul marketing în tabela croaziere este folosit și pentru ca administratorul să poată decide care sunt ofertele de croaziere pe care dorește să le promoveze. Figura 4.8

Figura 4.8 – Secțiunea croaziere promovate, pagina principală

În cazul hotelurilor și a excursiilor, s-a optat pentru promovarea ofertelor cu cel mai bun rating acordat de clienți pe site-urile de evaluare specializate. Vezi Figura 4.9 si 4.10

Figura 4.9 – Secțiunea cele mai bune hoteluri și excursii, pagina principală

Figura 4.10 – Secțiunea cele mai populare activități, pagina principală

4.2.9 Modul de administrare

Pentru a-i permite administratorului gestiunea tuturor ofertelor, am creat un modul de administrator, unde se pot vizualiza toate ofertele deja introduse, acestea putand fi sterse sau modificate, dar si adaugarea de noi oferte. Vezi Figura 4.11.

Figura 4.11 – Modul administrator

Pentru a ajuta la creșterea procentajului de acceptare a ofertelor, departamentul de Vânzări și Marketing va avea posibilitatea de a genera dinamic rapoarte ce conțin informații legate de numărul de clienți, preferințele clienților în funcție de sex sau stare civilă, ca in Figura 4.12.

Figura 4.12 – Selectare tip raport

Generarea rapoartelor în format PDF se face cu ajutorul codului PHP ce ruleaza pe server interogând baza de date pentru informațiile necesare și construind raportul dinamic, vezi Figura 4.13

Figura 4.13 – Generare raport

CAPITOLUL 5 – EFICIENȚA ȘI UTILITATEA APLICAȚIEI INFORMATICE ÎN CADRUL S.C. "DESCOPERA LUMEA" S.R.L.

Această lucrare a prezentat procesul de dezvoltare a unei aplicații web de complexitate medie, dar și uneltele moderne folosite pentru ducerea la bun sfârșit a unei astfel de aplicații.

Proiectul propus în acest document se diferențiază de celelalte din aceeași categorie, prin folosirea unui panou de aministrare care ușurează munca pentru persoanele nu foarte tehnice și prin folosirea limbajelor de programare PHP pentru partea de back-end și JavaScript pentru front-end. Acestea se îmbină perfect și oferă împreună cu framework-ul folosit, securitatea de care este nevoie.

În alegerea limbajelor de programare folosite, s-a ținut cont și de avansul tehnologic. De la zi la zi apar inovații și cele două limbaje de programare alese pentru această aplicație ocupă un rol foarte important în dezvoltarea acestora.

În momentul de față, aplicația implementează toate funcțiile descrise. Bineînțeles, aceasta poate fi extinsă, deoarece arhitectura permite acest lucru, fără ca structura actuală să sufere modificări. Printre funcționalitățile ce ar putea fi implementate s-ar putea număra:

deținerea unui domeniu propriu;

trecerea la HTTPS și criptarea informațiilor din comunicarea cu serverul;

utilizarea unui server pentru a primi email-uri de înștiințare când cineva este interesat de una din oferte;

implementarea unui chat live pentru a putea acorda informații într-un timp cât mai scurt;

implementarea unui calendar și posibilitatea unei rezervări.

Actuala aplicatie va creste cota de piata, va optimiza timpul de lucru si incarcarea angajatilor, va fideliza clientii existenti si va atrage noi categorii.

In plus, rapoartele generate din aplicatie sunt unelte decizionale pentru managementul firmei si vor duce la cresterea eficientei operationale, ce are ca si efect final cresterea rentabilitatii.

Plecand de la rapoarte, respectiv informatiie generate de aplicatia web, vor alege scenariul cel mai efficient de dezvoltare a afacerii, respectiv promovare, angajare de noi parteneriate. Astfel vor creste profitul net al societatii, dar si cota de piata in domeniu.

Un alt aspect ce va fi imbunatatit, din punct de vedere economic, pentru societate, este imbunatarirea strategiei de marketing, care ajuta la cresterea afacerii. Vom obtine credibilitate, clientii nostril vor fi in permanenta informatii cu privire la noi destinatii, atractii, oferte, ii vom determina sa ivesteasca mai mult in planificarea vacantelor pentru destinatii, pe care nu le-ar fi luat poate in calcul, fara a ne studia site-ul.

Scopul principal al aplicatiei web, este transformarea vizitatorilor in client: pentru ca acest deziderat sa devina realitate, vom inbunatati continuu continutul, prezentarea site-ului. Ne propunem ca site-ul sa fie dinamic, si, desi va pastra structura de baza, clientii nostril vor gasi aici in permanenta, noi informatii. Informatiile pertinente sunt importante, dar, pentru a creste increderea in compania noastra, vom adauga o pagina de testimoniale, dar si un blog.

Ne vom stabili obiective, dupa primele sase luni de functionare, astfel incat aceste obiective sa aiba un rol benefic pentru S.C. "DESCOPERA LUMEA" S.R.L.

Ca si model, vom propune un minim de 50,000 vizitatori unici pe luna si 150.00 de vizite pe luna – in cazul in care sunt indeplinite aceste obiective, pe o perioada de trei luni consecutiv, cu tendinte de crestere, inseamna ca modul de getionare a aplicatiei, informatiile actualizate, modul si timpul la care se fac aceste actualizari, sunt in parametrii optimi.

Daca, din contra, aceste obiective nu sunt indeplinite, vom identifica cauzele ce duc la acest esec si le vom remedia in timp util.

In cazul in care obiectivele generale sunt atinse, ca si aplicatie, vom implementa si oboective ce vizeaza aspecte importante in abordarea dezvoltarii societatii. Ca si exemplu, am gandit: ponderea noilor vizitatori, cat timp petrec la noi pe site, respective durata medie a vizitei, rata de respingere.

Ne vom focusa, desigur si pe testimoniale si pe impresiile lasate de catre vizitatori, sau client. Provocarea pentru noi este ca aplicatia web sa fie accesibila, interesanta sis a raspunda nevoilor unor categorii diferite de utilizatori: diferit ca interese, ca asteptari, ca timp disponibil, varsta. Acesta este motivul pentru care vom adauga continuu rapoarte in aplicatie, rapoarte care sa ne ajute sa ne pliem pe cererile si nevoile unor categorii cat mai variate de vizitatori, respectiv clienti.

BIBLIOGRAFIE:

Learning MySQL Get a Handle on Your Editura: O'Reilly Media

Publicat: Noiembrie 2006

Larry Ullman, PHP for the Web: Visual QuickStart Guide, 2016

PHP 7 Programming Cookbook Editura: O'Reilly Media Publicat: August 2016

Audra Hendrix, Bogdan Brinzarea, Cristian Darie, AJAX and PHP: Building Modern Web Applications, 2009

jQuery Cookbook Solutions & Examples for jQuery Developers Editura:

O'Reilly Media Publicat: Noiembrie 2009

David Upton, CodeIgniter for Rapid PHP Application Development, 2007

Gamma, Erich, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley Professional, 1994

Vlada Marin, Albeanu Grigore, Adascălitei Adrian, ICVL Project, 10 years. The

impact of new technologies in education and research, In Proceedings of the 10th

International Conference on Virtual Learning (ICVL), MODELS &

METHODOLOGIES, TECHNOLOGIES, SOFTWARE SOLUTIONS, Timișoara,

October 31 2015, Bucharest University Press (ISSN 1844-8933), pp. 27-36, 2015,

http://c3.icvl.eu

Vlada M., Romanian Informatics Pioneers, Leon Livovschi and Octavian Bâscă at

the University of Bucharest, In Proceedings of the 10th International Conference

on Virtual Learning (ICVL), MODELS & METHODOLOGIES,

TECHNOLOGIES, SOFTWARE SOLUTIONS, Timișoara, October 31 2015,

Bucharest University Press (ISSN 1844-8933), pp. 37-43, 2015, http://c3.icvl.eu

https://ro.wikipedia.org/

https://httpd.apache.org/

https://secure.php.net/

jQuery

https://www.javascript.com

ANEXE:

Selectarea din baza de date a hotelurilor in urma criteriilor alese – search.php

<?php

$db = mysqli_connect("sql581.your-server.de", "user", "parola", "descop_db1") or die("Error connecting to database: ".mysql_error());

$destinatie = $_GET['destinatie'];

$pret = $_GET['pret'];

$check_in = $_GET['check_in'];

$check_out = $_GET['check_out'];

$animale = $_GET['animale'];

$internet = $_GET['internet'];

$fumat = $_GET['fumat'];

$piscina = $_GET['piscina'];

$spa = $_GET['spa'];

$fitness = $_GET['fitness'];

$aer_conditionat = $_GET['aer_conditionat'];

$demi_pensiune = $_GET['demi_pensiune'];

unset($sql);

if ($destinatie) {$sql[] = " destinatie = '$destinatie' ";}

if ($pret) {$sql[] = " pret < $pret ";}

if ($check_in) {$sql[] = " check_in <= '$check_in' ";}

if ($check_out) {$sql[] = " check_out >= '$check_out' ";}

if ($animale) {$sql[] = " acces_animale = 1 ";}

if ($internet) {$sql[] = " internet = 1 ";}

if ($fumat) {$sql[] = " loc_fumat = 1 ";}

if ($piscina) {$sql[] = " piscina = 1 ";}

if ($spa) {$sql[] = " spa = 1 ";}

if ($fitness) {$sql[] = " fitness = 1 ";}

if ($aer_conditionat) {$sql[] = " aer_conditionat = 1 ";}

if ($demi_pensiune) {$sql[] = " demi_pensiune = 1 ";}

$query = "SELECT *, DATEDIFF('$check_out', '$check_in') as zile FROM hoteluri";

if (!empty($sql)) {$query .= ' WHERE ' . implode(' AND ', $sql);

$result = $db->query($query);

?>

Selectarea din baza de date a celor mai bune oferte in scopuri de marketing – index.php

<?php

$db = mysqli_connect("sql581.your-server.de", "descop_1_w", "Nq8XXJ68ZPPsc8Ue", "descop_db1") or die("Error connecting to database: ".mysql_error());

$query_excursii = "SELECT * FROM excursii WHERE marketing=1 LIMIT 3";

$result_excursii = $db->query($query_excursii);

$query_croaziere = "SELECT * FROM croaziere WHERE marketing=1 LIMIT 3";

$result_croaziere = $db->query($query_croaziere);

$query_hoteluri = "SELECT * FROM hoteluri ORDER BY rating DESC limit 4";

$result_hoteluri = $db->query($query_hoteluri);

$query_activitati = "SELECT * FROM activitati GROUP BY nume ORDER BY rating limit 8 ";

$result_activitati = $db->query($query_activitati);

?>

Sortarea ofertelor in functie de diferite criterii – search_excursii.php

<div class="offers_sorting_container">

<ul class="offers_sorting">

<li>

<span class="sorting_text">pret</span>

<i class="fa fa-chevron-down"></i>

<ul>

<li class="sort_btn" data-isotope-option='{ "sortBy": "price", "sortAscending": false }'

data-parent=".price_sorting"><span>descrescator</span></li>

<li class="sort_btn" data-isotope-option='{ "sortBy": "price", "sortAscending": true }'

data-parent=".price_sorting"><span>crescator</span></li>

</ul>

</li>

<li>

<span class="sorting_text">nume</span>

<i class="fa fa-chevron-down"></i>

<ul>

<li class="sort_btn" data-isotope-option='{ "sortBy": "original-order" }'><span>standard</span></li>

<li class="sort_btn" data-isotope-option='{ "sortBy": "name", "sortAscending": true }'> <span>alfabetic</span></li>

</ul>

</li>

<li>

<span class="sorting_text">stele</span>

<i class="fa fa-chevron-down"></i>

<ul>

<li class="filter_btn" data-filter="*"><span>toate stelele</span></li>

<li class="sort_btn" data-isotope-option='{ "sortBy": "stars", "sortAscending": false }'><span>descrescator</span></li>

<li class="filter_btn" data-filter=".rating_3"><span>3</span></li>

<li class="filter_btn" data-filter=".rating_4"><span>4</span></li>

<li class="filter_btn" data-filter=".rating_5"><span>5</span></li>

</ul>

</li>

<li>

<span class="sorting_text">animale</span>

<i class="fa fa-chevron-down"></i>

<ul>

<li class="filter_btn" data-filter="*"><span>nu conteaza</span></li>

<li class="filter_btn" data-filter=".animale_1"><span>acces animale</span></li>

</ul>

</li>

<li>

<span class="sorting_text">AC</span>

<i class="fa fa-chevron-down"></i>

<ul>

<li class="filter_btn" data-filter="*"><span>nu conteaza</span></li>

<li class="filter_btn" data-filter=".aer_conditionat_1"><span>AC</span></li>

</ul>

</li>

</ul>

</div>

Formularul de crearea a rapoartelor – rapoarte.php

<div class="search_panel active">

<form action="raport_selectat.php" method="GET" id="search_form_1" class="search_panel_content d-flex flex-lg-row

flex-column align-items-lg-center align-items-start justify-content-lg-between justify-content-start">

<div class="search_item">

<div>Tip rezervare</div>

<select name="tip" id="tip_1" class="dropdown_item_select search_input">

<option value="1" selected>cele mai rezervate hoteluri</option>

<option value="2">cele mai rezervate excursii</option>

<option value="3">cele mai rezervate croaziere</option>

<option value="4">cele mai rezervate activitati</option>

</select>

</div>

<div class="search_item">

<div>perioda raportata</div>

<select name="perioada" id="perioada_1" class="dropdown_item_select search_input">

<option value="2018">anul 2018</option>

<option value="2019">anul 2019</option>

<option value="-3" selected>ultimele 3 luni</option>

<option value="-6">ultimele 6 luni</option>

<option value="3">in viitoarele 3 luni</option>

<option value="6">in viitoarele 6 luni</option>

</select>

</div>

<div class="search_item">

<div>criteriu de grupare</div>

<select name="criteriu" id="criteriu_1" class="dropdown_item_select search_input">

<option value="1" selected>–fara grupare–</option>

<option value="2">masculin/feminin</option>

<option value="3">casatorit/necasatorit</option>

</select>

</div>

<button class="button search_button">genereaza raport<span></span><span></span><span></span></button>

</form>

</div>

Crearea query-ului pentru generarea unui raport in functie de criteriile selectate – raport_selectat.php

<?php

$tip = $_GET['tip'];

$perioada = $_GET['perioada'];;

$criteriu = $_GET['criteriu'];

$sql = "SELECT nume, nume_prenume, gen, stare_civila, count(id_entitate) FROM rezervari ";

if ($tip == 1) {

$sql .= " JOIN (hoteluri, clienti) ON (hoteluri.id = rezervari.id_entitate and rezervari.username=clienti.username) ";

} elseif ($tip == 2) {

$sql .= " JOIN (excursii, clienti) ON (excursii.id = rezervari.id_entitate and rezervari.username=clienti.username) ";

} elseif ($tip == 3) {

$sql .= " JOIN (croaziere, clienti) ON (croaziere.id = rezervari.id_entitate and rezervari.username=clienti.username) ";

} elseif ($tip == 4) {

$sql .= " JOIN (activitati, clienti) ON (activitati.id = rezervari.id_entitate and rezervari.username=clienti.username) ";

}

$sql .= ' WHERE tip=' . $tip;

if ($perioada == 2018 || $perioada == 2019) {

$sql .= " AND YEAR(rezervari.check_in) = " .$perioada;

}

if ($perioada == 3 || $perioada == 6) {

$sql .= " AND rezervari.check_in >= NOW() AND rezervari.check_in <= NOW() + INTERVAL " .$perioada ." MONTH";

}

if ($perioada == -3 || $perioada == -6) {

$sql .= " AND rezervari.check_in <= NOW() AND rezervari.check_in >= NOW() – INTERVAL " .-$perioada ." MONTH";

}

if ($criteriu == 1) {

$sql .= " group by id_entitate";

} elseif ($criteriu == 2) {

$sql .= " group by id_entitate, gen";

} elseif ($criteriu == 3) {

$sql .= " group by id_entitate, stare_civila";

}

?>

Formular pentru introducerea unei noi oferte de tip hotel in baza de date – adaugare_hotel.php

<div class="wrapper">

<h2>Adaugare hotel nou</h2>

<form action="salvare_hotel.php" method="post" enctype="multipart/form-data">

<div class="form-group">

<label>Destinatie</label>

<input type="text" name="destinatie" class="form-control" required>

</div>

<div class="form-group">

<label>Nume</label>

<input type="text" name="nume" class="form-control" required>

</div>

<div class="form-group">

<label>Check_in</label>

<input type="date" name="check_in" class="form-control">

</div>

<div class="form-group">

<label>Check_out</label>

<input type="date" name="check_out" class="form-control" required>

</div>

<div class="form-group">

<label>Pret</label>

<input type="text" name="pret" class="form-control">

</div>

<div class="form-group">

<label>Descriere</label>

<input type="text" name="descriere" class="form-control" required>

</div>

<div class="form-group">

<label>Distanta</label>

<input type="text" name="distanta" class="form-control">

</div>

<div class="form-group">

<label>Rating</label>

<input type="text" name="rating" class="form-control">

</div>

<div class="clearfix">

<input name="animale" type="checkbox" id="search_extras_1" class="search_extras_cb" value="1">

<label for="search_extras_1"> acces Animale</label>

</div>

<div class="clearfix">

<input name="internet" type="checkbox" id="search_extras_2" class="search_extras_cb" value="1">

<label for="search_extras_2"> internet Wireless</label>

</div>

<div class="clearfix">

<input name="fumat" type="checkbox" id="search_extras_3" class="search_extras_cb" value="1">

<label for="search_extras_3"> loc de fumat</label>

</div>

<div class="clearfix">

<input name="piscina" type="checkbox" id="search_extras_4" class="search_extras_cb" value="1">

<label for="search_extras_4"> piscina</label>

</div>

<div class="clearfix">

<input name="spa" type="checkbox" id="search_extras_5" class="search_extras_cb" value="1">

<label for="search_extras_5"> spa</label>

</div>

<div class="clearfix">

<input name="fitness" type="checkbox" id="search_extras_6" class="search_extras_cb" value="1">

<label for="search_extras_6"> centru fitness</label>

</div>

<div class="clearfix">

<input name="aer_conditionat" type="checkbox" id="more_options_1" class="search_extras_cb" value="1">

<label for="more_options_1"> aer conditionat</label>

</div>

<div class="clearfix">

<input name="demi_pensiune" type="checkbox" id="more_options_2" class="search_extras_cb" value="1">

<label for="more_options_2"> demi-pensiune</label>

</div>

<div class="form-group">

<label>Selecteaza poza:</label>

<input type="file" name="fileToUpload" id="fileToUpload" required>

</div>

<div class="form-group">

<input type="submit" name="submit" class="btn btn-primary" value="Salveaza">

</div>

</form>

</div>

Salvarea unei noi oferte de tip hotel in baza de date – salvare_hotel.php

<?php

$target_dir = "images/";

$fisier = basename($_FILES["fileToUpload"]["name"]);

$target_file = $target_dir . $fisier;

$uploadOk = 1;

$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {}

$db = mysqli_connect("sql581.your-server.de", "descop_1_w", "Nq8XXJ68ZPPsc8Ue", "descop_db1") or die("Error connecting to database: ".mysql_error());

$fileToUpload = $_POST['fileToUpload'];

$destinatie = $_POST['destinatie'];

$descriere = $_POST['descriere'];

$distanta = $_POST['distanta']?$_POST['distanta']:0;

$nume = $_POST['nume'];

$pret = $_POST['pret']?$_POST['pret']:0;

$rating = $_POST['rating']?$_POST['rating']:0;

$check_in = $_POST['check_in'];

$newCheckin = date("Y-m-d", strtotime($check_in));

$check_out = $_POST['check_out'];

$newCheckout = date("Y-m-d", strtotime($check_out));

$animale = $_POST['animale']?$_POST['animale']:0;

$internet = $_POST['internet']?$_POST['internet']:0;

$fumat = $_POST['fumat']?$_POST['fumat']:0;

$piscina = $_POST['piscina']?$_POST['piscina']:0;

$spa = $_POST['spa']?$_POST['spa']:0;

$fitness = $_POST['fitness']?$_POST['fitness']:0;

$aer_conditionat = $_POST['aer_conditionat']?$_POST['aer_conditionat']:0;

$demi_pensiune = $_POST['demi_pensiune']?$_POST['demi_pensiune']:0;

$sql = "INSERT INTO hoteluri (destinatie, nume, check_in, check_out, pret, descriere, distanta, rating, acces_animale, piscina, internet, loc_fumat, spa, fitness, aer_conditionat, demi_pensiune, poza) VALUES ('$destinatie', '$nume', '$newCheckin', '$newCheckout', $pret, '$descriere', $distanta, $rating, $animale, $piscina, $internet, $fumat, $spa, $fitness, $aer_conditionat, $demi_pensiune, '$fisier')";

if ($db->query($sql) == TRUE) {

} else {

echo "Error: " . $sql . "<br>" . $db->error;

}

$db->close();

?>

Updatarea unei oferte de tip hotel in baza de date – salvare_hotel.php

$sql = "UPDATE hoteluri set destinatie='$destinatie', nume='$nume', check_in='$newCheckin', check_out='$newCheckout', pret=$pret, descriere='$descriere', distanta=$distanta, rating=$rating, acces_animale=$animale, piscina=$piscina, internet=$internet, loc_fumat=$fumat, spa=$spa, fitness=$fitness, aer_conditionat=$aer_conditionat, demi_pensiune=$demi_pensiune";

if (!empty($fisier)) {

$sql .= ", poza='$fisier'";

}

$sql .= " WHERE id=$id_hotel";

Similar Posts