Product price management application with PIM integration

Maat: px
Weergave met pagina beginnen:

Download "Product price management application with PIM integration"

Transcriptie

1 Scriptie ingediend tot het behalen van de graad van PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT Product price management application with PIM integration Jonathan Dewilde en Rob Liekens Departement Wetenschappen en Techniek Opleiding Elektronica-ICT Academiejaar Interne promotor: Patrick Van Houtven Externe promotors: Frederik De Galan Nick De Kock Versie: 12 juni 2015

2 Dankwoord Met het schrijven van dit dankwoord leggen we de laatste hand aan onze scriptie. Het was een periode waarin we veel hebben geleerd, zowel op technisch als analytisch gebied. We willen graag even stilstaan bij de mensen die ons de afgelopen achttien weken enorm gesteund en geholpen hebben. In de eerste plaats willen we de werknemers van ons stagebedrijf Xplore Group bedanken voor de fijne samenwerking. We willen ons in het bijzonder richten tot Frederik De Galan en Nick De Kock, de bedrijfspromotors die ons met raad en daad bijstonden doorheen het gehele verloop van de stage. Daarnaast willen we graag onze AP promotor Patrick Van Houtven en de algemene stagecoördinator Tim Dams bedanken voor hun goede begeleiding en adviezen. Antwerpen, 12 juni 2015 Jonathan Dewilde en Rob Liekens i

3 Abstract Het onderwerp van deze scriptie is de ontwikkeling van een verkoopkanaal afhankelijke prijsberekeningsapplicatie die kan communiceren met het Product Content Management systeem van Hybris, in opdracht van Xplore Group. Deze scriptie beschrijft de technologie en structuur van de prijsberekeningsmodule, alsook het algoritme ontwikkeld om de ideale verkoopprijzen te berekenen. Het Hybris Product Content Management systeem, één van de leiders op het gebied van PIM (Product Information Management), laat gebruikers toe om product informatie centraal aan te maken, beheren en publiceren. Het idee achter onze applicatie is dat een webshop beheerder, die zijn artikelen wil aanbieden via diverse online verkoopkanalen (bv. Amazon, Bol.com,...) met de price management applicatie automatisch de meest efficiënte verkoopprijs per verdeler kan berekenen, en dat deze prijs vervolgens doorgestuurd wordt naar het PIM systeem. Om dit te verwezenlijken is een Java-based backend ontwikkeld, gekoppeld aan een SQL database die prijsgerelateerde informatie bevat. De user interface bestaat uit een HTML5-based frontend met AngularJS, Bootstrap en jquery integratie. Onderlinge communicatie gebeurt via REST services. Het resultaat is een dynamische, schaalbare en gebruiksvriendelijke webapplicatie waarin alle product prijsinformatie beheerd kan worden, en waarmee bovendien synchronisatie met een PIM systeem mogelijk is. ii

4 Inhoudsopgave Dankwoord Abstract Lijst van afkortingen Glossarium i ii ix x 1 Situering Bedrijf Project Introductie Doel Vereisten Samenvatting Conclusie Technologieën Backend Front end Libraries & frameworks Backend Front end Tools Bespreking Price Management Application Inleiding Aanpak Use cases User use cases Business use case overview iii

5 INHOUDSOPGAVE iv 2.4 Workflow User workflow Business workflow Technical Introductie Architectuur Design Backend Front end User interface Introductie Design Sequence diagram Business logic Price logic Status logic Testing Resultaten Doelstellingen Resultaten Login Navigatie Algemene functionaliteit Zoekfilters Dashboard Product Sales channels Overige pagina s Besluit Reflectie A Use cases 90 A.1 CRUD A.1.1 Suppliers A.2 GET Products A.3 Price enrichment A.3.1 Price overwrites A.4 Calculate prices A.4.1 Calculate selected A.4.2 Calculate all A.5 Send prices

6 INHOUDSOPGAVE v A.5.1 Send selected A.5.2 Send all A.6 Status management A.6.1 Show statuses of selected prices A.6.2 Show products with errors B ER diagram 97 B.1 ER diagram parameters C Bespreking overige applicatiepagina s 102 C.1 Transport C.1.1 Regions C.1.2 GLS colli C.1.3 GLS freight C.2 Packaging C.2.1 Aanmaken van een nieuwe verpakking C.2.2 Wijzigen van een verpakking C.2.3 Verwijderen van een verpakking C.2.4 Overzicht Packaging pagina C.3 Supplier C.3.1 Aanmaken van een nieuwe leverancier C.3.2 Wijzigen van een leverancier C.3.3 Verwijderen van een leverancier C.3.4 Overzicht Supplier pagina

7 Lijst van figuren 1.1 Logo Xplore Group Basic project overview Logo Java Logo SQL JPQL Query Flow JPA Principle JAX-RS Principle Logo Java Enterprise Edition Logo MySQL Logo WildFly Logo HTML Logo CSS Logo Javascript Basic Architecture Hibernate Basic Architecture RESTEasy Logo Apache Maven Logo Quartz Estimated hardware cost to crack a password in 1 year Logo Bootstrap Angular's MVW structure Font Awesome icon examples Logo jquery Smart-table example Logo Eclipse Logo Git en Bitbucket Atlassian Products Agile Development User use case overview Business use case overview vi

8 LIJST VAN FIGUREN vii 2.4 User workflow Business workflow General project overview Internet Explorer 403 Error CRUD REST actions Flow of products and prices between Price Management Application and PIM Technical flow overview Price Management Application Overview Development Stack Overview Simplified ER diagram REST API Methods Bootstrap grid structure Angular view structure Sequence diagram Price influential parameters Basic price logic Fixed product cost logic Fixed transport cost logic Minimum profit calculation logic Final price Status overview scheme Login screen Navigatiemenu in open en gesloten toestand Compact screen navigation menu Navigation bar Save changes button Save confirmation popup Export to Excel button Details button Search filters Search & sort tables Dashboard error overview Dashboard buttons Product search page Select sales channels page Column select functionality Packaging button Packaging menu Price overwrite page Product transport page Calculation & Status page Status info on mouse hover

9 LIJST VAN FIGUREN viii 3.22 Price calculation information button Price calculation information menu General information from product details page General price information from product details page Price overwrite information from product details page Status information from product details page Creation information from product details page Add product page Editable table field Zone button Delete button Delete sales channel error popup Sales channel page overview C.1 Editable table field C.2 Delete region error popup C.3 Region page overview C.4 Select region option C.5 Editable table field C.6 GLS colli page overview C.7 Select region option C.8 Editable table field C.9 GLS freight page overview C.10 Editable table field C.11 Delete packaging error popup C.12 Packaging page overview C.13 Editable table field C.14 Delete supplier error popup C.15 Supplier page overview

10 Lijst van afkortingen ˆ API Application Programming Interface ˆ AWS Amazon Web Services ˆ CRUD Create, Read, Update and Delete ˆ DTO Data Transfer Object ˆ DOM Document Object Model ˆ ERP Enterprise Resource Planning ˆ GUI Graphical User Interface ˆ IDE Integrated Development Environment ˆ JEE Java platform, Enterprise Edition ˆ JPA Java Persistence API ˆ KDF Key Derivation Function ˆ MVW Model-View-Whatever ˆ ORM Object Relational Mapping ˆ PIM Product Information Management ˆ POC Proof Of Concept ˆ SPA Single Page Application ˆ SQL Structured Query Language ˆ UI User Interface ix

11 Glossarium ˆ Agile softwareontwikkeling: methode van softwareontwikkeling die toelaat dynamischer met het ontwikkelingsproces om te gaan. ˆ Brute force attack: een crypto analytische aanval, die gebruik maakt van rekenkracht om domweg alle mogelijke wachtwoordcombinaties uit te testen, zonder het gebruik van algoritmen om dit proces te versnellen. ˆ Commit,push,pull: Git terminologie die gebruikt wordt voor het samenvoegen van code kopieen van verschillende ontwikkelaars. ˆ Continuous integration: het meermaals per dag samenvoegen van developercode kopieën op een gedeelde mainline. ˆ Entiteit: een object waarover door middel van een ER diagram gegevens worden vastgelegd, meestal als onderdeel van het ontwerp van een databank. ˆ Kanban: een specifieke agile ontwikkelingsmethode. ˆ Module: een module is een losstaand onderdeel in een systeem, dat apart gecreëerd en gebruikt kan worden in verschillende systemen. ˆ Rainbow table: een eenvoudige tabel met mogelijke wachtwoorden en hun overeenkomstige hashes. ˆ Repository: opslaglocatie. ˆ Scrum: een specifieke agile ontwikkelingsmethode. x

12 Hoofdstuk1 Situering Dit document beschrijft de price management applicatie voor het bedrijf Xplore Group. In de eerste plaats wordt hier uitgelegd wat de aanleiding en de vereisten van het project waren. Verder biedt deze situering de nodige uitleg over verschillende gebruikte technologieën, tools en bibliotheken. 1.1 Bedrijf Xplore Group is een bedrijf dat deel uitmaakt van de alom gekende Cronos Group. Xplore Group werd in 1997 opgestart als een IT consultancy bedrijf, met de nadruk op het leveren van hoge kwaliteit IT oplossingen aan hun klanten, door het gebruik van Java en PHP solutions. Binnen Xplore Group zijn er nog een aantal kleinere bedrijven, waaronder XT-i, het bedrijf waar onder andere onze externe promotors, Frederik De Galan en Nick De Kock, voor werken. Het merendeel van de mensen die meewerken aan het project waartoe onze prijscalculator behoort, zijn medewerkers van XT-i, hoewel er ook enkele collega's van Xplore Group ingeschakeld zijn. Figuur 1.1: Logo Xplore Group 1

13 HOOFDSTUK 1. SITUERING Project Introductie Consumenten maken meer en meer gebruik van grote verkoopplatformen, zoals bijvoorbeeld Amazon of Bol.com, om een product te verkrijgen. Het aanbod is er gewoonlijk veel hoger en de prijzen liggen over het algemeen lager, wat het voor kopers dus zeer aantrekkelijk maakt. Dit zorgt ervoor dat webshops vaak ook kiezen voor deze bijkomende verkoopstrategie om hun producten aan te bieden. Zo heeft onder andere Mike Boon, een collega van onze externe promotors, een aantal webwinkels, waarop hij speelgoed en fietshelmen aanbiedt. Naarmate de webshop groeide, werd het echter steeds moeilijker om alle artikelen handmatig te beheren (voorheen gebeurde dit via Microsoft Excel). Hierdoor is het idee ontstaan om dit beheer te automatiseren, en daarbij ook de prijsberekening automatisch te laten verlopen. Het project bestaat dus eigenlijk uit twee delen: ˆ De ontwikkeling van een product management systeem, het zogenaamde PIM systeem, waarin alle verkoopartikelen en productgerelateerde eigenschappen beheerd worden. Dit systeem zal productdata naar de price management applicatie doorsturen. ˆ De ontwikkeling van een prijsberekeningsmodule, waarin alle prijsgerelateerde eigenschappen van de verkoopartikelen beheerd worden. Deze module zal bovendien de finale verkoopprijs per product per verkoopkanaal berekenen, en deze vervolgens naar het PIM systeem doorsturen. Merk op dat het eerste deel van het project ontwikkeld wordt door een ander team van Xplore Group, en dus buiten het bestek van deze scriptie valt. Dit brengt ons bij het tweede deel van het project en daarmee ook bij onderwerp van deze scriptie: het ontwikkelen van een software applicatie die de prijsberekeningen automatiseert, en vervolgens de berekende ideale prijzen terugstuurt naar het PIM systeem. Figuur 1.2: Basic project overview

14 HOOFDSTUK 1. SITUERING Doel Het doel is om voor het PIM systeem een prijsberekeningsmodule te ontwikkelen die automatisch de beste prijs per product per verkoopkanaal berekent, aan de hand van een aantal parameters. De price calculator is niet gebaseerd op bestaande software, en wordt ontwikkeld als een losstaande module, aan de hand van voorwaarden afgeleid uit een aantal gesprekken met onze bedrijfsbegeleiders en Mike Boon, de beheerder van de webshops. De applicatie zou moeten zorgen voor een sterke centralisatie van prijsdata en een automatisatie van prijsdataverwerking, met verschillende grote voordelen als gevolg: ˆ Significante verlaging van de kans op fouten; ˆ Duidelijk overzicht van relevante informatie; ˆ Tijdsbesparing Vereisten User requirements Prijsberekening De belangrijkste vereiste van onze price calculator is uiteraard de mogelijkheid om verkoopprijzen per product per verkoopkanaal te berekenen. Indien de uiteindelijke verkoopprijs niet correct zou zijn, gaat dit gepaard met rampzalige verliezen in verkoop en/of winst. De price management application staat of valt dus met de ideale prijsberekening. Kort samengevat moeten per product per verkoopkanaal 2 prijzen berekend gaan worden: enerzijds de minimumprijs en anderzijds de maximumprijs. De parameters die deze prijzen beïnvloeden kunnen opgedeeld worden in de onderstaande groepen: ˆ Aankoopprijs en BTW; ˆ Leverancier; ˆ Verpakking; ˆ Verkoopkanaal; ˆ Transport; ˆ Winst.

15 HOOFDSTUK 1. SITUERING 4 Basic operations: create, read, update en delete Het moet mogelijk zijn voor de beheerder om op elke pagina enkele basisoperaties uit te voeren. Read en update zijn overal noodzakelijk, create en delete zijn afhankelijk van de entiteit. Producten worden uit het PIM systeem opgehaald, en prijsinformatie wordt na bepaalde acties automatisch aangemaakt, dus hiervoor zullen create en delete acties overbodig zijn. Voor alle andere entiteiten (verpakking, leverancier, transport en verkoopkanaal), moet ook create en delete functionaliteit voorzien worden. Het is uiteraard essentieel dat al deze basisoperaties simpel en snel uitgevoerd kunnen worden, zodat de gebruikers zo weinig mogelijk hinder ondervinden bij het aanroepen van deze acties. Mass updates Naast de basisoperaties, moet het mogelijk zijn om bepaalde velden op een makkelijke manier te updaten voor een grote hoeveelheid producten en/of prijzen. Deze bulk updates moeten duidelijk en overzichtelijk weergegeven worden. Ook is het niet voldoende om waardes simpelweg te overschrijven, of overal dezelfde waarde in te voeren, maar ook simpele berekeningen (x+y en x-y) moeten uitgevoerd kunnen worden. Ook hier is het vanzelfsprekend dat de aanpassingen vlot moeten verlopen, zodat de gebruiker weinig tot geen vertraging ondervindt na het uitvoeren van een mass update. Status management De applicatie moet op een overzichtelijke manier kunnen weergeven waar eventuele fouten en/of verouderde prijzen opgetreden zijn. Hiervoor zullen een aantal statussymbolen geïntegreerd moeten worden, die voor verschillende doeleinden gebruikt kunnen worden. Zo kan er bijvoorbeeld makkelijk weergegeven worden of: ˆ Prijsinformatie voor een bepaald product reeds gekend is door de prijscalculator; ˆ Prijzen herberekend moeten worden (bijvoorbeeld na het veranderen van de aankoopprijs van een product); ˆ Prijzen (her)verzonden moeten worden naar het Hybris hoofdsysteem.

16 HOOFDSTUK 1. SITUERING 5 Dynamisch De applicatie moet een dynamisch karakter hebben. Dit houdt in dat de prijsberekeningsmodule gebouwd moet worden op een manier waarbij business gerelateerde veranderingen van informatie makkelijk opgevangen kunnen worden. Praktisch zal dit erop neerkomen dat alle waardes op product en/of prijsniveau overschrijfbaar moeten zijn om onder andere promoties, bijzondere verzend- of verpakkingsmethodes en dergelijke op te vangen. Ook technologische veranderingen moeten makkelijk op te vangen zijn. Er is dus een hoge compatibiliteit vereist met verschillende elektronische apparaten (smartphones, tablets, laptops en desktop computers) en besturingssystemen. User friendly De price calculator moet gebruiksvriendelijk zijn. Er zal op sommige plaatsen ontzettend veel data weergegeven moeten worden op een overzichtelijke manier. Onder andere zoekfilters, sorteerbare tabellen en duidelijke links naar gerelateerde pagina's in de applicatie zijn dus een must.

17 HOOFDSTUK 1. SITUERING 6 Business requirements Hybris synchronisatie Nieuwe producten moeten uit het hoofdsysteem opgehaald kunnen worden. Na het verrijken van de product prijsinformatie en het berekenen van de minimum en maximumprijs, moet de ideale prijs op een bepaalde manier naar het PIM systeem gestuurd kunnen worden. Scalability Onze applicatie wordt in de eerste plaats door het bedrijf ontwikkeld voor de klant, maar met een groot aantal andere potentiële klanten in het achterhoofd. De prijscalculator wordt op het moment dus vooral als POC (Proof Of Concept) ontwikkeld, maar we kunnen er al vanuit gaan dat de mogelijkheid bestaat dat de module later ook voor andere bedrijven gebruikt moet kunnen worden. De applicatie moet dus zo ontworpen worden dat uitbreidingen in de toekomst makkelijk mogelijk zijn. Technical requirements Modulaire opbouw De keuze voor een aparte module voor de prijsberekening is nogal vanzelfsprekend. Aangezien de price calculator applicatie op deze manier geïmplementeerd kan worden als een vrijstaande component, kan de module parallel ontwikkeld worden met het voorgenoemde PIM systeem. Bovendien maakt dit het mogelijk om in de toekomst uitbreidingen aan deze component te maken, zonder dat het hoofdsysteem gewijzigd moet worden. Omgekeerd zou het dan ook perfect mogelijk zijn om van hoofdsysteem te veranderen en deze prijscalculator te blijven gebruiken. Hybris communication through REST Het Hybris PIM systeem bevat een REST API, waarmee de prijzen en producten verzonden/- ontvangen dienen te worden.

18 HOOFDSTUK 1. SITUERING Samenvatting Concreet kunnen we stellen dat het eindresultaat moet voldoen aan volgende eisen: ˆ De applicatie moet per product twee prijzen kunnen berekenen: maximumprijs; een minimum- en ˆ Op elke pagina moeten een aantal basisoperaties uitgevoerd kunnen worden: Create, Read, Update en Delete; ˆ De gebruiker kan mass (bulk) updates uitvoeren; ˆ De toepassing is voorzien van een status management tool, die weergeeft waar mogelijke fouten voorkomen; ˆ De tool moet een dynamisch karakter hebben; ˆ De applicatie moet gebruiksvriendelijk zijn; ˆ De applicatie moet een modulaire structuur bezitten; ˆ Er moet synchronisatie met het hoofdsysteem (Hybris) mogelijk zijn; ˆ De applicatie moet makkelijk aangepast kunnen worden voor nieuwe, gelijkaardige toepassingen.

19 HOOFDSTUK 1. SITUERING Conclusie Uit de prijsberekeningsvereisten kunnen we afleiden dat er een relatief ingewikkeld relationeel databasemodel opgesteld zal moeten worden, om alle verschillende parameters te kunnen omvatten. Om dit databasemodel compatibel te maken met de software, zal gebruik gemaakt moeten worden van ORM (Object-relational mapping). Qua softwareomgeving wordt gekozen voor Java, vermits Xplore Group een Java gespecialiseerd bedrijf is. Met behulp van ORM is het dan mogelijk om de CRUD (Create, Read, Update, Delete) acties in Java uit te voeren. Omdat de applicatie dynamisch moet zijn, wordt als gebruikersomgeving gekozen voor een webapplicatie, vermits deze universeel bruikbaar zou zijn (een installatie op het toestel van de gebruiker is hierbij ook overbodig). Bovendien zijn er voor webapplicaties een groot aantal frameworks en plugins beschikbaar om de toepassing schaalbaar en gebruiksvriendelijker te maken. In deze omgeving moet gezorgd worden dat de gebruiker afgeschermd wordt van de onderlinge complexe relaties van het databasemodel. Elke pagina zal dus enkel de informatie bevatten rond één bepaald onderwerp om verwarring voor de gebruikers te vermijden. De applicatie zal modulair zijn, waardoor het kan meegroeien met de veranderende eisen van de gebruikers. Deze modulaire aanpak, met een extra aandachtspunt voor scalability, zorgt ervoor dat het in de toekomst relatief makkelijk wordt om aanpassingen te maken. Door deze modulaire opbouw zal het mogelijk moeten zijn om op een bepaalde manier te kunnen communiceren met het hoofdsysteem. Ook de gebruikersomgeving zal op één of andere manier met ons backend (Java) systeem moeten kunnen communiceren.

20 HOOFDSTUK 1. SITUERING Technologieën Backend ˆ Java: Java is een platform onafhankelijke objectgeoriënteerde programmeertaal, die syntactisch grotendeels gebaseerd is op C++. Aangezien ons stagebedrijf gespecialiseerd is in Java en PHP solutions, is de keuze voor Java vanzelfsprekend. Figuur 1.3: Logo Java ˆ SQL: SQL is een gestandaardiseerde taal voor een relationeel database managementsysteem. Met de taal kunnen databanken aangemaakt of aangepast worden. Ook wordt de taal gebruikt om data uit een database op te vragen. Figuur 1.4: Logo SQL ˆ JPQL: Java Persistence Query Language is een taal die sterke gelijkenissen vertoont met SQL qua syntax, maar toegepast wordt op objecten van JPA entiteiten in plaats van rechtstreeks op de database tabellen. Figuur 1.5: JPQL Query Flow, Bron:[12] ˆ JPA: Java Persistence API wordt gebruikt om de toegang tot en het beheer van data tussen java klassen en een relationele database te regelen. JPA is geen product maar een specificatie. Het kan dus niet op zichzelf bestaan, maar is een collectie van interfaces. Er zijn vele JPA implementaties(bijvoorbeeld Java EE Application Server, Hibernate,...).

21 HOOFDSTUK 1. SITUERING 10 Figuur 1.6: JPA Principle, Bron:[10] ˆ JAX-RS: JAX-RS is een Java programming language API voor RESTful Web Services. Hierbij worden annotations toegepast om de ontwikkeling en implementatie van web service clients te vergemakkelijken. De communicatie tussen backend en Hybris, alsook de onderlinge communicatie tussen backend en front end maken hiervan gebruik. De belangrijkste annotations specifieert het relatieve pad van de methode of HTTP request type dat duidelijk maakt dat er geen parameters meegegeven worden, en dat er iets opgehaald moet wordt gebruikt wanneer er een methode word aangeroepen waar een parameter aan wordt specifieert het datatype dat gebruikt wordt in een specifieert het datatype dat verzonden wordt nadat een request is uitgevoerd. Figuur 1.7: JAX-RS Principle, Bron:[5]

22 HOOFDSTUK 1. SITUERING 11 Computing platform ˆ JEE: Java Platform Enterprise Edition biedt een API en runtime environment aan, die gebruikt kan worden voor development en deployment van enterprise software. De software voor dit platform wordt hoofdzakelijk in Java geschreven, en het platform zelf bestaat voornamelijk uit modulaire componenten die draaien op een application server. De grote verschillen met de Standard Edition van het Java Platform zijn de vele uitbreidingen van de functionaliteit van bestaande application programming interfaces, en de toegevoegde API voor web services en object-relational mapping. Een product kan pas als Java EE compatibel bestempeld worden wanneer het voldoet aan bepaalde requirements. Figuur 1.8: Logo Java Enterprise Edition Database management ˆ MySQL: MySQL is het populairste (open source) managementsysteem voor relationele databanken. Onderhouden, aanmaken en opvragen van data uit een databank gebeurd via SQL. MySQL valt onder de GPL v.2 licentie en is bezit van de Oracle Corporation. Figuur 1.9: Logo MySQL Application server ˆ WildFly: WildFly is een open source cross-platform application server, die JEE implementeert en geschreven is in Java. Vroeger was WildFly gekend als Jboss Application Server, maar bij de overname van het bedrijf Jboss door Red Hat is de naam gewijzigd. Er is echter nog steeds veel bruikbare informatie te vinden onder de oude naam. Figuur 1.10: Logo WildFly

23 HOOFDSTUK 1. SITUERING Front end ˆ HTML5 (HyperText Markup Language 5): de nieuwste versie van de HTML standaard. HTML is een taal die gebruikt wordt om documenten op te maken, die gepubliceerd kunnen worden op het internet, en bekeken kunnen worden met behulp van een webbrowser. Vermits onze applicatie universeel bruikbaar moet zijn, is HTML de logische keuze. Op deze manier kan iedere gebruiker, onafhankelijk van het gebruikte toestel en/of besturingssysteem, een versie van de tool openen. Figuur 1.11: Logo HTML5 ˆ CSS3 (Cascading Style Sheets 3): CSS wordt gebruikt om de vormgeving van HTML documenten vast te leggen. CSS kan zowel toegepast worden in de te stijlen HTML pagina's, als in een apart *.css bestand, met een verwijzing vanuit de HTML pagina's. Vermits er gekozen is voor een HTML applicatie, is het gebruik van CSS onvermijdelijk. Figuur 1.12: Logo CSS3 ˆ Javascript: een programmeertaal geschikt om scripts te schrijven, die gebruikt worden om interactieve webpagina's te creëren. De keuze voor HTML, gecombineerd met de verwachte functionaliteit van de applicatie, maakt het gebruik van Javascript noodzakelijk. Figuur 1.13: Logo Javascript

24 HOOFDSTUK 1. SITUERING Libraries & frameworks Hieronder worden alle bibliotheken en frameworks die we voor dit project gebruikt hebben kort toegelicht. Bij verdere interesse kan gerelateerde code teruggevonden worden in het portfolio onder 'Finaal product/third party code' Backend ˆ Hibernate: Hibernate ORM is een object-relational mapping bibliotheek voor java. Het bied een framework aan dat gebruikt wordt voor het mappen van een objectgeoriënteerd domeinmodel naar een relationele database. Dit gebeurt door elke database tabel te koppelen aan één of meerdere Java klasse(s). Hibernate is gratis software die uitgeven wordt onder de GNU Lesser General Public License. Figuur 1.14: Basic Architecture Hibernate, Bron:[11] ˆ RESTEasy: RESTEasy is een JBoss project, dat verschillende frameworks aanbiedt voor het bouwen van RESTful Web Services en RESTful Java applicaties. Het is een volledig gecertificeerde en portable implementatie van de JAX-RS specification. Figuur 1.15: Basic Architecture RESTEasy, Bron:[9]

25 HOOFDSTUK 1. SITUERING 14 ˆ Apache Maven: Maven is een framework dat bestaat uit een aantal plugins die gezamenlijk gebruikt kunnen worden als build automation tool. Maven beschrijft hoe software gebouwd wordt, en welke dependencies de software heeft. Hoewel er al jaren ondersteuning is voor C#, Ruby, Scala en andere programmeertalen, wordt Maven nog steeds hoofdzakelijk gebruikt voor Java projecten. Figuur 1.16: Logo Apache Maven ˆ Quartz: Quartz is een open source job scheduling library die in bijna elke Java applicatie geïntegreerd kan worden. Tijdsschema's worden in deze bibliotheek opgesteld in de vorm 'cron expressions', wat het mogelijk maakt om zowel zeer makkelijke als ongelooflijk ingewikkelde tijdsplanningen op te stellen. Figuur 1.17: Logo Quartz ˆ Bcrypt: Bcrypt is een KDF (Key Derivation Function) voor wachtwoorden, gebaseerd op het Blowfish cipher (een symetric-key block cipher). Bcrypt voegt random salts toe aan de wachtwoorden om omvorming met behulp van rainbow tables te voorkomen. Een bijkomend voordeel is het adaptief karakter van bcrypt: het aantal encryptie herhalingen, ook gekend als de 'cost' of work factor, kan verhoogd worden zodat de code resistant blijft tegen brute-force attacks wanneer de kracht van hedendaagse computers vergroot. Figuur 1.18: Estimated hardware cost to crack a password in 1 year, Bron: [7]

26 HOOFDSTUK 1. SITUERING Front end ˆ Bootstrap: Bootstrap is een front-end framework dat gebruikt wordt om op een snelle en makkelijke manier een mooi design aan een webpagina te geven. Ook zijn er een hele hoop gratis thema templates voor te vinden, wat het nog simpeler maakt om een webpagina een professionele look te geven. Wij hebben gebruik gemaakt van het SB Admin 2 thema, een administratorgerichte en gebruiksvriendelijke web application user interface (bron: template-overviews/sb-admin-2/). Figuur 1.19: Logo Bootstrap ˆ AngularJS: AngularJS is een Javascript MVW (Model-View-Whatever) framework dat de tekortkomingen van HTML bij de ontwikkeling van dynamische views aanpakt. AngularJS is vooral populair bij het ontwikkelen van SPA's (Single Page Applications), omwille van de vele krachtige mogelijkheden van het framework. Zo is er onder andere ondersteuning voor two-way databinding, partial views en directives (een manier om nieuwe herbruikbare HTML tags te ontwikkelen). Figuur 1.20: Angular's MVW structure,bron:[2]

27 HOOFDSTUK 1. SITUERING 16 ˆ Font Awesome: Font Awesome is een CSS framework dat bestaat uit een uitgebreide collectie iconen, die als glyphs (karakters van een lettertype) aangeroepen kunnen worden. Het lettertype dat speciaal hiervoor gecreëerd wordt, noemt men hierdoor ook wel een icon font. Een groot voordeel aan het gebruik van een icon font in vergelijking met gewone iconen, is het feit dat deze op dezelfde manier aan te passen zijn als tekst. Men kan dus makkelijk visuele eigenschappen zoals de kleur, grootte of schaduw van de iconen naar eigen wensen aanpassen, met behulp van CSS. Figuur 1.21: Font Awesome icon examples ˆ jquery (v.1.11): jquery is een zeer uitgebreide Javascript library die vooral gericht is op het verkorten en vergemakkelijken van standaard Javascript functies, zoals event handling, HTML DOM manipulatie, animaties en Ajax calls. Merk op dat er op het moment van schrijven al een jquery 2.0 versie uitgebracht is, maar deze ondersteunt geen Internet Explorer 6,7 en 8 meer. Aangezien deze webbrowsers tegenwoordig toch nog regelmatig worden gebruikt, is beslist om een oudere jquery versie te implementeren. Figuur 1.22: Logo jquery ˆ Editable table: Editable table is een compacte jquery plugin die elke tabel verandert in een aanpasbaar spreadsheet. Vermits de klant voor de ontwikkeling van onze applicatie al zijn berekeningen in Excel deed, is dit een ideale plugin om de applicatie een vertrouwd uiterlijk te geven. ˆ Bootstrap datepicker: een klein kalender widget waarop een datum geselecteerd kan worden, in Bootstrap stijl. Deze plugin vergemakkelijkt de 'zoeken op datum' functionaliteit in onze applicatie. Dit is een perfecte visuele additie voor de applicatie, aangezien het thema van de gebruikersomgeving reeds op Bootstrap gebaseerd is.

28 HOOFDSTUK 1. SITUERING 17 ˆ Smart Table: Smart Table is een AngularJS module die kan worden gebruikt om data op een duidelijke en simpele manier in tabelvorm te tonen, sorteren en filteren. Hiervoor zijn een groot aantal alternatieven beschikbaar, maar Smart Table is één van de betere keuzes omwille van verschillende redenen: Gebruiksvriendelijk: de HTML tabel opmaak blijft hetzelfde als voordien, met uitzondering van enkele toegevoegde attributen in de table tags. Bovendien zijn custom builds mogelijk, en is het relatief simpel om eigen plugins in de bibliotheek te implementeren; Compact: de minified versie is slechts 4kB groot; 1 dependency: de enige dependency van de bibliotheek is AngularJS, wat reeds gebruikt wordt; Stabiele release: redelijk veel AngularJS-based alternatieven zijn nog steeds enkel in bèta versie beschikbaar. Figuur 1.23: Smart-table example, Bron:[3]

29 HOOFDSTUK 1. SITUERING Tools ˆ Eclipse: Eclipse is vooral bekend voor zijn open source Java IDE (Integrated Development Environment), waar ook hier gebruik van gemaakt wordt. Verder zijn er een groot aantal add-ons en plugins voor deze IDE beschikbaar. Figuur 1.24: Logo Eclipse ˆ MySQL Workbench: MySQL Workbench wordt in dit project enkel gebruikt voor het beheer van onze online MySQL database, hoewel het programma veel meer functionaliteit bezit. Zo kunnen er onder andere ook databasemodellen met ontworpen en gegenereerd worden. ˆ Git: Git is een gratis open source version control systeem dat zeer makkelijk bruikbaar is. Git maakt het mogelijk om op een overzichtelijke manier met meerdere mensen aan een softwareproject te werken. Om Git te kunnen gebruiken is het uiteraard noodzakelijk om een repository te bezitten. Hier is gekozen voor een Atlassian Bitbucket repository om een aantal verschillende redenen: Xplore Group was al bekend met andere Atlassian software, zoals Confluence, JIRA en HipChat; Integratie met andere Atlassian software is mogelijk. Nieuwe commits worden voor dit project bijvoorbeeld weergegeven als een HipChat boodschap; Bitbucket is gratis (voor maximum 5 gebruikers); We hadden als studenten al gebruik gemaakt van Bitbucket in het verleden, en waren er toen zeer tevreden over. Ook zorgt dit ervoor dat er nu geen registratieproces meer doorlopen moet worden. Figuur 1.25: Logo Git en Bitbucket ˆ SmartGit: SmartGit is een gratis Git client die het mogelijk maakt om op een grafische manier toegang te krijgen tot Git. Dit maakt het gebruik van scripts om verschillende Git acties (push, pull, commit) uit te voeren volledig overbodig. ˆ Dropbox: Dropbox is een populaire cloud sharing service voor allerlei bestanden. Op deze manier kan documentatie, analyses en technische schema's makkelijk onderling gedeeld worden. Bovendien is Dropbox gratis in gebruik voor een beperkte hoeveelheid opslagruimte, die op verschillende manieren sterk vergroot kan worden.

30 HOOFDSTUK 1. SITUERING 19 ˆ JIRA: JIRA is een project management tool van Atlassian, dat gebruikt kan worden om taken te creëren en beheren. Elke taak kan hierbij een eigen prioriteit en verwachte datum van voltooiing toegewezen krijgen. Verder kan JIRA ook fouten opslaan en documenteren. JIRA is bovendien een ideale tool voor agile softwareontwikkeling: development methodes als scrum en kanban zitten standaard in het programma verwerkt. ˆ Confluence: Confluence is een ander populair product van Atlassian. Het wordt omschreven als een team management tool. Het gebruik van Confluence zorgt er onder andere voor dat verschillende gebruikers projectgerelateerde documentatie makkelijk kunnen delen met hun teamgenoten. In dit project is Confluence onder andere gebruikt om een overzicht van het project te schetsen, installatie-en configuratiestappen voor bepaalde software te documenteren, een algemene planning aan te maken en nuttige bronnen te delen. ˆ Bamboo: Bamboo is een continuous integration en delivery tool voor softwareprojecten van Atlassian. Het wordt gebruikt om veranderingen in code automatisch te deployen naar een server, na het uitvoeren van een aantal (optionele) testen. ˆ HipChat: HipChat, ons laatste gebruikte Atlassian programma, is een instant messaging programma, waarin groepschats en videochats mogelijk zijn. Ook zijn er voor HipChat mobiele apps, en is er een optie om boodschappen bij afwezigheid van de ontvanger via mail te versturen. Verder is ook hier integratie met andere Atlassian software mogelijk. Deze superieure chatapplicatie maakt communicatie met collega s op bijna elk moment van de dag mogelijk. Figuur 1.26: Various Atlassian Products

31 Hoofdstuk2 Bespreking Price Management Application 2.1 Inleiding De berekening van de ideale prijs van een product op een bepaald verkoopkanaal is niet zo eenvoudig. Er zijn tenslotte een zeer groot aantal parameters die in rekening gebracht worden. Deze bespreking beschrijft de uitwerking van de in het vorige hoofdstuk besproken requirements (zie 1.2.3), alsook onze projectaanpak en de toelichting van de motivatie achter bepaalde gemaakte keuzes. 2.2 Aanpak Voor de uitwerking van dit project hebben we gekozen voor een agile aanpak, omdat er meer van een idee/concept vertrokken is, dan van een product met strikte vereisten. Vanaf het begin bleek dat de klant nog veel knopen moest doorhakken, waardoor vrijwel meteen beslist is dat een agile approach de way-to-go was. Zowel de klant als de interne promotors zijn vanaf het begin sterk bij het project betrokken, door op geregelde basis meetings te houden en zichtbare delen van het project te tonen en te testen. Op deze manier kon het product zich zeer dynamisch ontwikkelen, en terwijl perfect afstemmen naar de eisen van de klant. Verder is er doorheen het project constant continuous integration gebruikt. Doordat alle teamleden op regelmatige tijdstippen per dag nieuwe commits uitvoerden, zijn grote integratieproblemen op de main branch vermeden. 20

32 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 21 Figuur 2.1: Agile Development, Bron: [4]

33 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Use cases Om de user, business en technical requirements te helpen bepalen en visualiseren, zijn zowel user use cases als business use cases opgesteld. Deze scriptie zal zich beperken tot het bespreken van de algemene use case overviews. Bij verdere interesse kunnen enkele use cases teruggevonden worden in bijlage A. Ook zijn alle use cases terug te vinden in de folder 'Finaal product/schema's' van het portfolio User use cases De user use cases kunnen opgesplitst worden in vijf groepen, die elk bestaan uit een aantal taken die de gebruiker kan ondernemen: ˆ CRUD functionaliteit: dit is één van de meest uitgebreide groepen, vermits voor elke entiteit met invloed op de prijsberekening Create, Read, Update en Delete functionaliteit voorzien moet zijn; ˆ Price enrichment: de gebruiker moet op product en prijsniveau parameterwaarden (of overwrites) kunnen invullen om de berekende prijs naar wens te beïnvloeden; ˆ Hybris synchronisatie: Nieuwe en geupdate producten ophalen uit het Hybris PIM systeem; Berekende prijzen terugsturen naar het Hybris systeem. ˆ Prijsberekening: na het verkrijgen en verrijken van de prijsgerelateerde productinfo moet de gebruiker een prijs kunnen laten berekenen; ˆ Status management: de gebruiker moet in staat zijn om fouten op een overzichtelijke en duidelijke manier te kunnen vinden en interpreteren.

34 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 23 User use case overview Figuur 2.2: User use case overview Business use case overview Het business use case overview beschrijft hoe geïnteresseerde partijen hun gewenste doel kunnen bereiken door gebruik te maken van de applicatie, en welke activiteiten/acties nodig zijn om dit doel te bereiken. Algemeen kan gesteld worden dat het project gesplitst is in twee delen, zoals eerder reeds vermeld is (zie 1.2.1). In de price management application zullen een aantal stappen uitgevoerd moeten worden vooraleer de berekende prijs in Hybris getoond kan worden: 1. Producten moeten ingeladen worden uit Hybris. Merk op dat dit ook elk uur automatisch gebeurt (zie figuur 2.3) 2. Voor elk product dienen de gewenste verkoopkanalen geselecteerd te worden. 3. Prijsgerelateerde parameters worden ingevuld en/of overschreven. 4. Prijzen moeten berekend worden (zie Price logic) 5. De berekende prijzen worden verzonden naar het PIM systeem van Hybris. Merk op dat dit ook elk uur automatisch gebeurt (zie figuur 2.3) 6. Voor elke prijs wordt gecontroleerd op fouten via het status management. Zowel fouten bij het verzenden en berekenen van prijzen, alsook aanpassingen van gebruikte parameters zullen een error status weergeven (zie Status logic).

35 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 24 Figuur 2.3: Business use case overview

36 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Workflow User workflow Een gebruiker moet om zijn doel te kunnen bereiken een aantal vaste stappen doorlopen. Eerst moet hij zich identificeren door middel van credentials (gebruikersnaam en wachtwoord). Wanneer de credentials goedgekeurd worden, voert hij zijn gewenste handeling(en) uit, zoals bijvoorbeeld het aanmaken van sales channels, leveranciers wijzigen, of prijzen berekenen. Tenslotte moeten de wijzigingen opgeslagen worden om de actie te finaliseren. Figuur 2.4: User workflow Business workflow Om de prijs van een product te berekenen dienen er een aantal stappen te gebeuren: 1. Een nieuw product wordt toegevoegd in het Product Information Management systeem; 2. Dit product wordt opgehaald door de price calculation module; 3. Parameters met prijsinvloed worden ingevoerd en/of overschreven; 4. Prijzen worden berekend; 5. De prijzen worden teruggestuurd naar het Hybris PIM systeem. Figuur 2.5: Business workflow

37 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Technical Introductie Architectuur Algemeen projectoverzicht Vooraleer de prijscalculator uitgelegd wordt, is hier het volledige project geschetst. Zie onderstaande figuur 2.6 voor een algemeen overzicht van het project. De productinformatie van de webshop wordt beheerd door het centrale Product Content Management systeem van Hybris, in het algemeen een PIM systeem genoemd. Vanuit dit systeem vertrekt productdata naar alle andere componenten. Informatie over de voorraden van de producten wordt bijgehouden met behulp van Navision, een Enterprise Resource Planning en boekhouding tool van Microsoft. Deze software zal updates van stockinformatie doorzenden naar het PIM systeem. Merk op dat momenteel enkel de voorraden van de rechtstreekse verkoopkanalen (Kinderenkoning.be en Mynutty.be) opgevolgd worden. Deze rechtstreekse verkoopkanalen worden beheerd met Magento, een open source ecommerce managementsysteem voor webshops. In de rechterbovenhoek van de figuur staat de price calculation module, het onderwerp van deze scriptie. Deze module zal, zoals alle andere componenten, productinformatie ontvangen van het PIM systeem. Figuur 2.6: General project overview

38 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 27 Technical flow Zoals reeds vermeld in de use case bespreking op pagina 22 kunnen de mogelijke acties in de applicatie opgedeeld worden in verschillende stukken: ˆ Authenticatie; ˆ CRUD operaties; ˆ Hybris synchronisatie: GET products; PUT/POST prices; ˆ Prijscalculatie. In dit deel worden al deze processen iets technischer toegelicht. Authenticatieproces De gebruiker dient zijn inlog gegevens in te geven in de web applicatie. Deze worden via REST door gestuurd naar de WildFly application server, waar het wachtwoord gehashed wordt met behulp van het bcrypt algoritme, en vervolgens de combinatie wachtwoord&inlognaam vergeleken wordt met de database voor een match. Indien de login gegevens correct ingevuld werden, wordt er een authorisatie token naar de browser teruggestuurd in de vorm van een cookie. Indien de inloggegevens fout waren, wordt er een HTTP error code 403 (Forbidden) teruggestuurd, en krijgt de gebruiker hier een melding van. Figuur 2.7: Standaard Internet Explorer 403 Error CRUD operaties Via de web applicatie kan de gebruiker makkelijk per entiteit verschillende CRUD acties uitvoeren. Wanneer de gebruiker zijn wijzigingen vervolgens opslaat, worden deze via de corresponderende REST actie (zie figuur 2.8) naar de WildFly server verzonden. Voor elke entiteit zijn voor deze REST communicatie 2 DTO's voorzien:

39 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 28 ˆ één DTO voor read functionaliteit, omdat hier tevens een 'in use' status wordt meegezonden, zodat er na het laden van een pagina geen objecten verwijderd kunnen worden die parent zijn van andere objecten; ˆ een tweede DTO wordt gebruikt om de wijzigingen terug te sturen naar de server. Dit verloopt op de volgende manier: Eerst wordt deze DTO geparsed naar de daadwerkelijke entiteit; Vervolgens wordt deze doorverwezen naar status management, waar wordt gecontroleerd of de veranderingen invloed hebben op de prijs calculatie. Zo ja, dan worden de relevante statussen (zie Status logic) gewijzigd; Als laatste stap worden de wijzigingen gepersisteerd door de Hibernate ORM tool. Figuur 2.8: CRUD REST actions GET products Deze functie wordt automatisch elk uur uitgevoerd als een asynchrone job. Dit gebeurt met behulp van de Quartz scheduler. Er is verder ook nog een optie om deze methode manueel aan te roepen via de web applicatie. De werking is als volgt: ˆ In de database wordt de laatste synchronisatiedatum bij gehouden. Deze datum wordt gebruikt in de REST call naar Hybris, om alle producten die aangemaakt of gewijzigd zijn sinds de synchronisatiedatum, op te halen; ˆ Hierna worden de opgehaalde Hybris producten geconverteerd naar de product entiteit van de applicatie server. Deze producten worden gesplitst in nieuwe- en gewijzigde producten, door ze te gaan vergelijken met rijen in de producttabel van de applicatie database; ˆ Voor de nieuwe producten worden er een aantal default waardes ingevuld. Verder wordt de beste (kleinst mogelijke) verpakking gekozen aan de hand van de productafmetingen. Voor gewijzigde producten worden enkel de parameters afkomstig uit Hybris geupdate, waarna enkele statussen(zie Status logic) aangepast worden indien nodig.

40 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 29 PUT/POST prices Net als de Hybris GET products methode, wordt deze functie elk uur automatisch uitgevoerd als een asynchrone job met behulp van de Quartz scheduler. Ook hier is weer een optie om de taak manueel te triggeren. Deze taak verloopt als volgt: ˆ Eerst wordt de 'send' status van de door te sturen prijzen op 'sending' gezet; ˆ Hybris heeft een POST REST methode om nieuwe prijzen te versturen, en een PUT REST methode om bestaande prijzen te updaten. Omdat er voor de price management application geen enkele manier is om op voorhand te weten of een prijs bestaand of onbestaand is in het Hybris syteem, worden voor alle te verzenden prijzen eerst de POST (create) methode uitgevoerd. Enkel voor prijzen waarbij deze REST call een 404 error terugstuurt, zal de PUT (update) methode aangeroepen worden; ˆ Tenslotte wordt de send status aangepast naar 'sent' voor prijzen die succesvol doorgestuurd zijn, of naar de corresponderende error code voor prijzen waarbij fouten opgetreden zijn. Figuur 2.9: Flow of products and prices between Price Management Application and PIM Calculate prices Deze functie kan enkel manueel getriggerd worden via de web applicatie. Na het aanroepen van de functie, wordt ook hier weer een asynchrone job gestart met behulp van de Quartz scheduler. Deze taak gebeurt als volgt: ˆ Alle prijzen die berekend dienen te worden, krijgen een calculation status 'calculating'; ˆ De prijzen worden één voor één berekend. onderdeel Price logic gevonden worden; Meer info over de prijslogica kan bij het ˆ Bij een succesvolle prijsberekening wordt de calculation status op 'calculated' gezet. Indien een error optreedt wordt als calculation status van de desbetreffende prijs de overeenkomstige error code ingevuld.

41 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 30 Technical flow overview De onderstaande figuur (2.10) illustreert hoe de aparte componenten van de product price management application met elkaar en het PIM systeem communiceren. Figuur 2.10: Technical flow overview

42 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Design Al vanaf het begin was het duidelijk hoe ons algemeen ontwerp er zou uitzien: een web applicatie als frontend, die via REST services communiceert met een Java backend, die op zijn beurt communiceert met het PIM systeem en de database. Als frontend is er gekozen voor een webapplicatie, met als frameworks een combinatie van AngularJS en Bootstrap, en daar bovenop nog een aantal kleine toegevoegde plugins, zoals editable table en Smart Table. Met dit totaalpakket van technologieën, frameworks en libraries, hebben we een performante en intuïtieve SPA gebouwd. Vooral de databinding van AngularJS is een veelgebruikte feature, die de applicatie zeer developer en user friendly maakt. Als backend is er een WildFly application server, waarop een Java application draait. Voor de communicatie met de front end hebben we een RESTful API geïmplementeerd met behulp van JAX-RS. Dit hebben we ook gebruikt voor onze REST calls naar Hybris. Voor de communicatie met de database is er gebruikt gemaakt van een combinatie van JPA en Hibernate als ORM. Omdat alle data nodig voor de prijsberekening niet door Hybris gekend is, is er een MySQL database aangemaakt zodat deze data in de price management application ingegeven kan worden. Figuur 2.11: Price Management Application Overview

43 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 32 Development stack Er is voor continuous integration gekozen om integratieproblemen zo veel mogelijk proberen te vermijden. Om dit te verwezenlijken is gewerkt met lokale Git repositories, die meerdere keren per dag gesynchroniseerd worden met de master branch op Bitbucket. Als test server wordt er gebruik gemaakt van een Amazon Web Services ec2 instance waar Ubuntu 12 op draait. Op deze server staan zowel onze application server als onze database. Om onze applicatie te deployen naar de application server, wordt gebruik gemaakt van Atlassian's continuous integration tool Bamboo: op het einde van elke dag zal de recentste projectversie van Bitbucket opgehaald worden, om deze vervolgens te builden op de testserver met behulp van Maven. Ook zijn er enkele basistesten geïntegreerd in het Bamboo proces. Een bijkomend voordeel van Bamboo is dat het tot de Atlassian stack behoort, en dus gelinkt kan worden aan andere Atlassian programma's. Alle stappen in verband met commits en builds worden zo bijvoorbeeld in het Atlassian chatprogramma HipChat getoond, zodat developers meteen op de hoogte zijn van mogelijke problemen, ook indien deze problemen bij een geautomatiseerd proces zouden optreden. Figuur 2.12: Development Stack Overview

44 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 33 Database Omdat niet alle data nodig voor de prijsberekening door Hybris gekend is, is er gekozen om een MySQL database te linken aan onze applicatie. Na een gesprek met de klant, is als eerste stap in het ontwikkelingsproces een relationeel model uitgewerkt. Dit model is vervolgens nog meerdere keren gewijzigd, om zo goed mogelijk tegemoet te komen aan de eisen van de klant. ER diagram De figuur hieronder illustreert de relaties tussen de verschillende entiteiten in ons datamodel. Merk op dat deze figuur maar een compacte versie van het ER diagram is. Zie bijlage B op pagina 97 voor het volledige ER diagram. Figuur 2.13: Simplified ER diagram Relaties Op de volgende pagina worden de relaties tussen de verschillende entiteiten kort uitgelegd. Verder zijn in bijlage B op pagina 98 enkele tabellen bijgevoegd die de betekenis van alle gebruikte parameters verduidelijken. Elke tabel in deze bijlage stelt een aparte entiteit van het entity relationship diagram voor.

45 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 34 Packaging: deze entiteit bevat de verschillende mogelijke verpakkingen die gebruikt worden voor een product. Packaging is enkel afhankelijk van het product en optioneel, maar er zijn meerdere verpakkingen mogelijk (many-to-many relatie). Zo kan er bijvoorbeeld een doos met noppenfolie gecombineerd worden, of extra cadeauverpakking in rekening gebracht worden. De afmetingen van de verpakking zijn optionele eigenschappen, vermits bij bv. een strik enkel de prijs belangrijk is. Aan de hand van de afmetingen van een product kan automatisch de meest geschikte doos en de bijhorende verpakkingsprijs bepaald worden. Met de afmetingen van de verpakking en het gewicht van het product, kan vervolgens bepaald worden of het product via GLS Colli(geschikt voor kleine pakketten en goedkoop) of GLS Freight(geschikt voor grotere pakketten en duur) verzonden zal worden. Supplier: deze entiteit bevat de kortingen per leverancier (zowel aankoopkorting als staffelkorting). Een leverancier zal meerdere producten leveren, terwijl elk product maar één leverancier heeft (one-to-many relatie). Product: deze entiteit bevat alle toebehoren van een product (algemene informatie, winstmarges, prijzen, kosten enzovoort). Ook zijn er op productniveau een aantal overwrites/flags beschikbaar. Zo kan er bijvoorbeeld beslist worden of de listing price genegeerd mag worden door het aanpassen van de listing price flag. Elk product wordt op verschillende kanalen verkocht en elk kanaal zal verschillende producten aanbieden (many-to-many relatie). Ook zal een product meerdere prijzen hebben (1 prijs per sales channel), maar elke prijs zal wel aan 1 product gebonden zijn (one-to-many relatie). Ook zal een product per regio een verschillende transportkost en Drop&Ship prijs hebben (one-tomany relatie). Transport: deze entiteit bevat de transportkost en Drop&Ship prijzen. Het transport van een product is landafhankelijk. Er zullen dus meerdere transporten per product en per land mogelijk zijn (one-to-many relatie). Price: er zullen verschillende prijzen zijn voor een product (many-to-one relatie). Tegelijk zullen er aan elk kanaal ook verschillende prijzen gekoppeld zijn (many-to-one relatie), namelijk 1 prijs per product. Een prijs zal mogelijk overwrites hebben maar dit is niet noodzakelijk het geval (one-to-(n)one relatie). Hoewel de optimale prijs geen overwrite is, hebben we deze hier toch geplaatst omdat deze ook optioneel en kanaalafhankelijk is. Voor de rest bestaat de prijs uit een aantal noodzakelijke, berekende velden (one-to-one relatie met calculated). Price overwrite: zie Price. Price calculated: zie Price.

46 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 35 Channel: er zijn vele kanalen die elk een aantal producten verkopen (many-to-many relatie). De producten hebben allemaal een afzonderlijke prijs, dus een kanaal zal aan meerdere prijzen gekoppeld zijn (one-to-many relatie). Elk kanaal zal leveren in verschillende zones (one-to-many relatie). Per kanaal zal een land van bestemming gedefinieerd worden (one-to-one relatie), waarvoor we de transportprijzen berekenen. Region: een regio kan voorkomen in meerdere zones en een zone kan bestaan uit meerdere regio's (many-to-many relatie). Meestal zal een regio een volledig land zijn, maar dit is niet altijd het geval. Voor Sardinië bijvoorbeeld, zal GLS een hogere transportkost aanrekenen dan de rest van Italië. Zone: de relaties van zone zijn al besproken in channel en region. GLS Colli: België heeft per bestemming (regio) meerdere GLS Colli tarieven (one-to-many relatie), die afhankelijk zijn van de afmetingen en het gewicht van het pakket. GLS Freight: België heeft per bestemming (regio) meerdere GLS freight tarieven (one-tomany relatie), die afhankelijk zijn van de afmetingen en het gewicht van het pakket. Parameters Zie bijlage B op pagina 98 voor meer informatie over de parameters uit het ER diagram.

47 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Backend Zoals zichtbaar in het Price Management Application Overview op pagina 31, is er als ontwikkelingsplatform gebruik gemaakt van Java Enterprise Edition. De ontwikkelde applicatie draait op een WildFly application server, die gedeployed wordt op een Ubuntu 12 omgeving in de cloud. Inhoudelijk bestaat de backend grotendeels uit een REST API voor communicatie met de front end GUI, en code voor de communicatie met Hybris. Verder wordt in dit onderdeel ook job scheduling en security toegelicht. CRUD functionaliteit Nadat de entiteiten en hun onderlinge relaties die reeds beschreven zijn in het ER diagram, is van dit diagram een databasemodel opgesteld. Dit database model is op zijn beurt met behulp van ORM, in dit geval de Hibernate plugin, omgezet in Java klassen die bruikbaar zijn in de backend applicatie. Dit liet ons toe om, met behulp van JPQL queries, heel makkelijk CRUD functionaliteit te implementeren. In de code hieronder wordt gedemonstreerd hoe een read mogelijk is van alle producten die nog geen prijs hebben, of waar de prijsberekening niet meer up to date is. Listing 2.1: query to read products without prices or with outdated prices TypedQuery<Object [] > query = em. c r e a t e Q u e r y ( SELECT DISTINCT p, p r i FROM Product p LEFT JOIN p. p r i c e s p r i LEFT JOIN p r i. p r i c e O v e r w r i t e pow LEFT JOIN p r i. p r i c e C a l c u l a t e d pc WHERE NOT EXISTS (SELECT p r i c FROM P r i c e p r i c WHERE p r i c. product=p ) OR pc. s t a t u s P r i c e=false, Object [ ]. c l a s s ) ; Zoals zichtbaar in de onderste regel van het codevoorbeeld, heeft de CRUD functionaliteit een extra dimensie die nog niet besproken is: status. Statussen bijhouden is in deze applicatie essentieel, vermits er op verschillende plaatsen desynchronisatie van data kan optreden. Het status management wordt verder uitgelegd in het onderdeel Status logic op pagina 56.

48 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 37 REST API De voorgenoemde REST API is op een consistente en logische manier opgebouwd.dit is de algemene structuur die gebruikt is: /pricing/rest/entiteit/subentiteit/aantal Merk op dat de subentiteit en het aantal niet overal essentieel zijn, en al dan niet toegepast worden afhankelijk van de nodige actie. Om verschillende CRUD acties te onderscheiden, is gebruik gemaakt van HTTP methodes. Figuur 2.14: REST API Methods, Bron:[8] Met het onderstaande codevoorbeeld wordt gedemonstreerd hoe de verschillende HTTP REST methodes voor een entiteit geïmplementeerd zijn. Listing 2.2: Region entity RESTful service example /* * * This c l a s s p r o d u c e s a RESTful s e r v i c e to read / w r i t e the c o n t e n t s o f the * Region i n f o. ( / r e g i o n RequestScoped p u b l i c c l a s s R e g i o n R e s o u r c e R e s t S e r v i c e I n j e c t p r i v a t e R e g i o n R e p o s i t o r y r e p o s i t o r Produces ( MediaType. APPLICATION JSON) p u b l i c L i s t <RegionLoadDTO> l i s t R e g i o n ( ) { return r e p o s i t o r y. findallorderedbyname ( ) ( MediaType. APPLICATION Produces ( MediaType. APPLICATION JSON) p u b l i c void update ( L i s t <Region> regn ) { r e p o s i t o r y. updateregion ( regn ) ( MediaType. APPLICATION Produces ( MediaType. APPLICATION JSON)

49 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 38 p u b l i c void c r e a t e ( L i s t <Region> regn ) { r e p o s i t o r y. c r e a t e R e g i o n ( regn ) ; ( /{ i d } Produces ( MediaType. APPLICATION JSON) p u b l i c void remove ( i d ) long i d ) { i n t i d i n t = ( i n t ) i d ; Region regn = r e p o s i t o r y. f i n d B y I d ( i d i n t ) ; r e p o s i t o r y. d e l e t e R e g i o n ( regn ) ; } Hybris REST connectie Voor de communicatie met Hybris, wordt de REST API van Hybris aangesproken vanuit de backend. Om dit te bereiken is gebruik gemaakt van RESTeasy. Listing 2.3: Hybris PIM connection p u b l i c i n t u p d a t e P r i c e ( S t r i n g c a t a l o g, P r i c e C a l c u l a t e d p r i c e C a l c u l a t e d, P r i c e p r i c e ) { R e s t e a s y C l i e n t c l i e n t = new R e s t e a s y C l i e n t B u i l d e r ( ). b u i l d ( ) ; } ResteasyWebTarget t a r g e t = c l i e n t. t a r g e t ( b a s e U r l ). path ( / p r i c e m o d u l a t o r / c a t a l o g s / +c a t a l o g+ / p roduct / +p r i c e. g e tproduct ( ). getsku ()+ / updatepricerow ) ; S t r i n g code=c a t a l o g. touppercase ()+ +p r i c e. getchannel ( ). getname ( ). touppercase ()+ +p r i c e. g e tproduct ( ). getsku ( ). touppercase ( ) ; Double p r i c e D o u b l e = p r i c e C a l c u l a t e d. g e t O p t i m a l P r i c e ( ) ; Response r e s p o n s e = n e w D e f a u l t B u i l d e r ( t a r g e t ). p o s t ( E n t i t y. j s o n (new UpdatePriceBodyPost ( code, p r i c e D o u b l e ) ) ) ; LOG. i n f o ( u p d a t e P r i c e ( ) r e s p o n s e : {}, r e s p o n s e. g e t S t a t u s ( ) ) ; return r e s p o n s e. g e t S t a t u s ( ) ;

50 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 39 Scheduler Om de performantie en het gebruiksgemak van de applicatie te vergroten, worden bepaalde functies asynchroon op een bepaalde tijdsbasis uitgevoerd. Om dit te verwezenlijken is er gebruik gemaakt van de Quartz scheduler library. De implementatie van deze bibliotheek bestaat uit een takenplanner, waar alle jobs (de functies die asynchroon uitgevoerd moeten worden) gepland worden. Listing 2.4: Job scheduler p u b l i c void s c h e d u l e J o b s ( ) { t r y { s c h e d u l e r = new S t d S c h e d u l e r F a c t o r y ( ). g e t S c h e d u l e r ( ) ; s c h e d u l e r. s e t J o b F a c t o r y ( c d i J o b F a c t o r y ) ; c r e a t e O u t d a t e d P r i c i n g J o b ( ) ; s c h e d u l e H y b r i s P r o d u c t S y n c J o b ( ) ; s c h e d u l e H y b r i s P r i c e S y n c J o b ( ) ; c r e a t e H y b r i s P r i c e S y n c S p e c i J o b ( ) ; s c h e d u l e r. s t a r t ( ) ; p r i n t J o b s A n d T r i g g e r s ( s c h e d u l e r ) ; } catch ( S c h e d u l e r E x c e p t i o n e ) { LOG. e r r o r ( E r r o r w h i l e c r e a t i n g s c h e d u l e r, e ) ; } De planning van de jobs kan opgesplitst worden in periodische en manueel getriggerde jobs (schedule & create taken). In functie zijn ze bijna identiek, maar enkel bij de periodische jobs wordt er een trigger gecreëerd, waarin de periodiciteit beschreven staat met behulp van de cron notatie. Onderstaande code toont een cron notatie, die eenmaal per uur betekent. Daarop volgt een voorbeeld van de code gebruikt om een job te creëeren en plannen. Listing 2.5: Cron notation - once every hour p r i v a t e s t a t i c f i n a l S t r i n g HYBRIS PRODUCT SYN CRON = 0 0 0/1 1/1 *? * ; Listing 2.6: Job creation and scheduling code - Nick De Kock p u b l i c void t r i g g e r H y b r i s P r o d u c t S y n c J o b ( ) throws S c h e d u l e r E x c e p t i o n { s c h e d u l e r. t r i g g e r J o b ( JobKey. jobkey ( h y b r i s product sync, p r i c i n g ) ) ; } p r i v a t e void s c h e d u l e J o b ( S t r i n g jobname, S t r i n g groupname, S t r i n g triggername, Class <? extends Job> j o b C l a s s, S t r i n g cron ) throws S c h e d u l e r E x c e p t i o n { JobKey jobkey = JobKey. jobkey ( jobname, groupname ) ; J o b D e t a i l j o b D e t a i l ;

51 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 40 i f ( s c h e d u l e r. c h e c k E x i s t s ( jobkey ) ) { j o b D e t a i l = s c h e d u l e r. g e t J o b D e t a i l ( jobkey ) ; } e l s e { // C r e a t e s j o b i f i t doesn t e x i s t y e t LOG. i n f o ( jobkey + doesn t e x i s t yet, c r e a t i n g J o b D e t a i l ) ; j o b D e t a i l = J o b B u i l d e r. newjob ( j o b C l a s s ). w i t h I d e n t i t y ( jobkey ). b u i l d ( ) ; } } TriggerKey t r i g g e r K e y = TriggerKey. t r i g g e r K e y ( triggername+ +jobkey, groupname ) ; T r i g g e r t r i g g e r ; i f ( s c h e d u l e r. c h e c k E x i s t s ( t r i g g e r K e y ) ) { t r i g g e r = s c h e d u l e r. g e t T r i g g e r ( t r i g g e r K e y ) ; } e l s e { // C r e a t e s t r i g g e r and s c h e d u l e s j o b i f i t doesn t e x i s t y e t LOG. i n f o ( t r i g g e r K e y + doesn t e x i s t yet, c r e a t i n g T r i g g e r and i m m e d i a t e l y s c h e d u l i n g + j o b D e t a i l ) ; t r i g g e r = T r i g g e r B u i l d e r. newtrigger ( ). w i t h I d e n t i t y ( t r i g g e r K e y ). w i t h S c h e d u l e ( C r o n S c h e d u l e B u i l d e r. c r o n S c h e d u l e ( cron ) ). f o r J o b ( jobkey. getname ( ), jobkey. getgroup ( ) ). b u i l d ( ) ; s c h e d u l e r. s c h e d u l e J o b ( j o b D e t a i l, t r i g g e r ) ; }

52 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 41 Security Authenticatie gebeurt via bcrypt. In de database wordt de combinatie username en password bijgehouden, waarbij het wachtwoord in geëncrypteerde vorm volgens het bcrypt algoritme opgeslagen wordt. Als een gebruiker besluit om in te loggen, worden zijn gegevens via de front end door de REST API naar de backend gestuurd. Hier wordt gecontroleerd of de gebruiker bestaat. Zo ja, dan wordt gecontroleerd of het gehashte passwoord overeenkomt met dat in de database. Als deze check ook 'true' terugstuurt, zal een web token teruggestuurd worden in de vorm van een cookie, die vanaf dan gebruikt kan worden om alle REST calls te authoriseren. Het onderstaande codevoorbeeld demonstreert hoe de security service geïmplementeerd is: Listing 2.7: Security service implementation - Nick De A p p l i c a t i o n S c o p e d p u b l i c c l a s s S e c u r i t y S e r v i c e I m p l implements S e c u r i t y S e r v i c e I n j e c t p r i v a t e U s e r R e p o s i t o r y u s e r R e p o s i t o r y ; p r i v a t e f i n a l byte [ ] jsonwebtokenkey ; p r i v a t e Logger LOG = L o g g e r F a c t o r y. g e t L o g g e r ( S e c u r i t y S e r v i c e I m p l. c l a s s ) ; p u b l i c S e c u r i t y S e r v i c e I m p l ( ) { jsonwebtokenkey = new byte [ 6 4 ] ; new SecureRandom ( ). n e x t B y t e s ( jsonwebtokenkey ) ; p u b l i c S t r i n g a u t h e n t i c a t e ( S t r i n g username, S t r i n g password ) { User u s e r = u s e r R e p o s i t o r y. getbyusername ( username ) ; i f ( u s e r == n u l l ) { LOG. i n f o ( User not found f o r {}, username ) ; return n u l l ; } i f ( BCrypt. checkpw ( password, u s e r. getpassword ( ) ) ) { LOG. i n f o ( S u p p l i e d password i s c o r r e c t f o r {}, username ) ; S t r i n g jsonwebtoken = Jwts. b u i l d e r ( ). s e t S u b j e c t ( username ). signwith ( S i g n a t u r e A l g o r i t h m. HS256, jsonwebtokenkey ). compact ( ) ; LOG. i n f o ( R e t u r n i n g jsonwebtoken {}, jsonwebtoken ) ; return jsonwebtoken ; } e l s e { LOG. i n f o ( S u p p l i e d password i s i n c o r r e c t f o r {}, username ) ; return n u l l ; } p u b l i c boolean a u t h o r i z e ( S t r i n g jsonwebtoken ) { t r y { Jws<Claims> jws = Jwts. p a r s e r ( ). s e t S i g n i n g K e y ( jsonwebtokenkey )

53 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 42. p a r s e C l a i m s J w s ( jsonwebtoken ) ; LOG. i n f o ( S u c c e s s f u l l y p a r s e d jsonwebtoken with username {}, jws. getbody ( ). g e t S u b j e c t ( ) ) ; return true ; } } } catch ( S i g n a t u r e E x c e p t i o n e ) { LOG. i n f o ( Unable to a u t h o r i z e jsonwebtoken {}, jsonwebtoken ) ; return f a l s e ; }

54 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Front end Zoals te zien in figuur 2.11, bestaat de front end uit een HTML5 applicatie met AngularJS, jquery en Bootstrap integratie. Hier bovenop zijn nog een aantal kleine plugins gebruikt die reeds toegelicht zijn in het onderdeel Libraries & frameworks op pagina 15. Structuur De front end is gestructureerd als een standaard AngularJS applicatie: er is een HTML hoofdbestand, met een aantal kleinere HTML bestanden die dynamische 'views' bevatten. Afhankelijk van de gevolgde route, wordt één van deze views in het hoofdbestand weergegeven, gecombineerd met de vaste inhoud van het hoofdbestand. De vaste inhoud bestaat in dit geval enkel uit hoofdingen en menu's. Als AngularJS javascript files wordt gebruik gemaakt van services, controllers en een routecontroller. De routecontroller bepaald welke dynamische views wanneer getoond moeten worden. De controllers zijn in feite javascript bestanden gelinkt aan een bepaald dynamisch view. Ter verduidelijking dit voorbeeld: de routecontroller zal ervoor zorgen dat bij het openen van een link naar '#/Dashboard' de dynamische 'dashboard.html' geladen wordt in het HTML hoofdbestand, en daarbij wordt ook de bijhorende dashboard controller geladen. AngularJS services worden in dit geval gebruikt om de REST services te configureren. Indien een AngularJS controller vervolgens gebruik wilt maken van één van deze rest services, kan dit makkelijk door het toevoegen van de correcte dependency en het aanroepen van de gewenste methode. Het onderstaand voorbeeld toont hoe de REST services in AngularJS geimplementeerd zijn, en vervolgens hoe ze aangeroepen kunnen worden. Listing 2.8: Angular REST service example s e r v i c e s. f a c t o r y ( c h a n n e l s, f u n c t i o n ( $ r e s o u r c e ) { return $ r e s o u r c e ( / p r i c i n g / r e s t / c h a n n e l, {}, { query : { method : GET, i s A r r a y : true }, update : { method : PUT, i s A r r a y : true }, c r e a t e : { method : POST, i s A r r a y : true } }) } ) ;

55 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 44 Aanroepen in de page controller kan, na het toevoegen van de dependency 'channels', op de volgende manier: Listing 2.9: Angular REST call example $scope. c h a n n e l C o l l e c t i o n= c h a n n e l s. query ({}, { }, f u n c t i o n ( r e t u r n V a l u e, r e s p o n s e H e a d e r s ) { // a c t i o n on s u c c e s s }, f u n c t i o n ( httpresponse ) { c o n n e c t i o n E r r o r ( httpresponse. s t a t u s, ) ; } ) ; UI De basis van het UI is het thema SB Admin 2 (Bron: [1]), waarop een hele hoop wijzigingen en uitbreidingen zijn aangebracht. Het eindresultaat van het UI kan bij Resultaten op pagina61 teruggevonden worden. De technische uitdagingen aan dit user interface, waren de schaalbaarheid en plaatsing van alle elementen. De elementen zijn grotendeels gepositioneerd door het gebruik van de Bootstrap grid structuur, waarmee elke pagina duidelijk in schaalbare stukken opgedeeld kan worden. Verder is het mogelijk om verschillende Bootstrap attributes toe te wijzen aan HTML tags, zodat ze afhankelijk van de schermgrootte optimaal gepositioneerd worden. Figuur 2.15: Bootstrap grid structure, Bron:[6]

56 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 45 Verder zorgt het gebruik van AngularJS ervoor dat niet de volledige pagina geladen en gepositioneerd moet worden, maar enkel het dynamische 'view'. Headers en menubalken blijven hierdoor ongeschonden, vanaf de eerste pagina door de browser geladen is. Figuur 2.16: Angular view structure Databinding Nog een voordeel van AngularJS, is de mogelijkheid om op een makkelijke manier aan databinding te doen: er hoeven enkel een paar attributes toegevoegd te worden aan de HTML tags waarin men een bepaalde waarde wil weergeven. Verder zijn ook opties voor databinding van collecties mogelijk. Hierbij zal AngularJS ervoor zorgen dat voor elk element in de collectie het gewenste HTML object gecreëerd wordt door het gebruik van ng-repeat. Het spreekt voor zich dat hiervan veelvuldig gebruik gemaakt is in het project. De code op de volgende pagina demonstreert hoe eenvoudig het is om met behulp van AngularJS een tabel te creëren voor x elementen met y properties. Het voorbeeld implementeert bovendien ook search & sort functionaliteit met behulp van de AngularJS plugin Smart Table. Hiervoor zijn de attributen st-table, st-sort en st-search aan de tabelstructuur toegevoegd.

57 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 46 Listing 2.10: Angular ng-repeat example <t a b l e i d= s u p p l i e r T a b l e st t a b l e= s u p p l i e r C o l l e c t i o n st s a f e s r c= s e a r c h C o l l e c t i o n c l a s s= t a b l e t a b l e s t r i p e d > <thead i d= thd > <tr > <th st s o r t= name width= 40% >Name</th> <th st s o r t= p u r c h a s e D i s c o u n t width= 15% > Purchase d i s c o u n t </th> <th st s o r t= s c a l e D i s c o u n t width= 13% > S c a l e d i s c o u n t </th> <th c l a s s= s c r o l l C o l u m n ></th> </tr > <tr > <th><i n p u t st s e a r c h= name p l a c e h o l d e r= s e a r c h s u p p l i e r name c l a s s= input sm form c o n t r o l type= s e a r c h /></th> <th><i n p u t st s e a r c h= p u r c h a s e D i s c o u n t p l a c e h o l d e r= s e a r c h p u r c h a s e d i s c o u n t c l a s s= input sm form c o n t r o l type= s e a r c h /></th> <th><i n p u t st s e a r c h= s c a l e D i s c o u n t p l a c e h o l d e r= s e a r c h s c a l e d i s c o u n t c l a s s= input sm form c o n t r o l type= s e a r c h /></th> </tr > </thead > <tbody i d= tbdy > <t r ng r e p e a t= s u p p l i e r i n s u p p l i e r C o l l e c t i o n i d= {{ s u p p l i e r. i d }} > <td i d= Name{{ s u p p l i e r. i d }} >{{ s u p p l i e r. name}}</td> <td i d= P u r c h a s e D i s c o u n t {{ s u p p l i e r. i d }} > {{ s u p p l i e r. p u r c h a s e D i s c o u n t }}</td> <td i d= S c a l e D i s c o u n t {{ s u p p l i e r. i d }} > {{ s u p p l i e r. s c a l e D i s c o u n t }}</td> </tr > </tbody> </t a b l e >

58 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION User interface Introductie Het hoofddoel van de applicatie is om het prijsberekeningsproces te automatiseren, zodat door het gebruik van de applicatie tijd en denkwerk gespaard wordt. Om dit te bereiken is per takengroep een aparte pagina gemaakt, waar updates uitgevoerd kunnen worden. Tevens is er voor elk product ook een detail pagina, waarmee alle informatie over de prijsinformatie van een product overzichtelijk wordt weergegeven en aangepast. Vanuit elk resultaat op een takenpagina kan via een link naar de detailpagina van het desbetreffende product genavigeerd worden. Om op de specifieke pagina's het overzicht te bewaren zijn er een hele reeks zoekfilters toegevoegd. Daarbuiten kan men nog eens specifiek elke tabel op kolom filteren en sorteren. Deze zoekfilters worden als URL parameters opgeslagen, zodat browser navigatie (back & forward knoppen) makkelijk gebruikt kan worden. Waar nodig is mass update functionaliteit voorzien. Dit houdt in dat een gebruiker een parameter van een selectie van producten (of alle producten) in één actie kan aanpassen. Niet alleen simpelweg overschrijven is mogelijk, maar ook wiskundige basisbewerkingen (+ en -). Verder is de applicatie voorzien van een gedetailleerd statusoverzicht, en een dashboard waarop veelvoorkomende acties en error management van de 20 meest relevante fouten uitgevoerd worden Design Volgens deze bron [13], bezit een goed ontworpen UI een aantal kenmerken. Hieronder worden deze kenmerken opgelijst, en wordt er kort toegelicht hoe rekening gehouden is met deze kenmerken in de applicatie: ˆ Clarity: alle tekst is in duidelijk, kort en bondig Engels geformuleerd. Er is geen ingewikkelde woordenschat gebruikt, en waar nodig zijn popups toegevoegd om een boodschap te verduidelijken. ˆ Concision: zoals hiervoor vermeld, is tekst zo kort mogelijk gehouden. Dit vermijdt dat het scherm er te 'vol' of 'warrig' gaat uitzien. ˆ Familiarity: bepaalde elementen zullen voor nieuwe gebruikers nog steeds vertrouwd aanvoelen. Dit is onder andere mogelijk door het gebruik van Bootstrap. De grid structuur en knoppen in dit framework worden alom toegepast, waardoor de nieuwe gebruikers zich automatisch iets meer thuis gaan voelen in deze onbekende omgeving. ˆ Responsiveness: door het gebruik van de databinding van AngularJS zullen aangepaste waardes vrijwel meteen overal in het user interface aangepast worden. Verder is het

59 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 48 zo dat fouten relatief snel opgevangen worden, zodat geen onmenselijke wachttijden bij het uitvoeren van bepaalde acties ontstaan. Bovendien worden langdurige taken als een asynchrone job gepland door de backend, zodat de gebruiker hier geen hinder van ondervindt. ˆ Consistency: elke pagina heeft een specifiek takenpakket, dat overal op dezelfde manier geïmplementeerd wordt. Verder zijn user interface objecten op elke pagina op dezelfde manier gestructureerd: knoppen staan indien mogelijk overal op dezelfde plaats, tabellen komen op elke pagina terug,etc. ˆ Aesthetics: het uiterlijk van de applicatie is het eerste dat een potentiële nieuwe gebruiker te zien krijgt. Hoewel een mooie applicatie niet essentieel is om zijn bestemde taken correct uit te voeren, is het wel aangenamer voor de gebruiker. In dit geval is voor dit aspect het Bootstrap thema SB Admin 2 [1] gebruikt, een thema speciaal ontworpen voor administrator gerichte toepassingen zoals deze. ˆ Efficiency: het gebruik van asynchrone jobs voor grote taken en het tijdelijk opslaan van wijzigingen op een pagina tot op de save button geklikt wordt, gecombineerd met de vlotte databinding van AngularJS, zorgen ervoor dat de applicatie zeer efficiënt is. Een gebruiker kan eigenlijk enkel bij connectieproblemen merkbare hinder ondervinden bij het uitvoeren van een actie. ˆ Forgiveness: bij het optreden van fouten zal altijd een duidelijke foutboodschap aan de gebruiker overgebracht wordt door het gebruik van popup menu's. Met behulp van deze foutboodschappen kan de gebruiker eventuele fouten relatief snel lokaliseren en oplossen.

60 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Sequence diagram Het onderstaande schema (figuur 2.17) visualiseert welke stappen uitgevoerd moeten worden om een prijs te berekenen. Merk op dat er vanuit gegaan wordt dat er nog helemaal geen data in de applicatie aanwezig is bij de start van het schema. Figuur 2.17: Sequence diagram

61 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Business logic Het hoofddoel van de applicatie blijft de mogelijkheid om prijzen te berekenen. Dit onderdeel van de scriptie beschrijft de logica van deze prijsberekening, alsook de logica van het status managementsysteem Price logic Introductie De perfecte verkoopsprijs berekenen is geen simpele opgave, vooral als deze afhangt van meerdere parameters en entiteiten die verschillende onderlinge relaties hebben. De onderlinge relaties zijn al eerder besproken in het ER diagram. De parameters uit dit diagram, die effectief invloed op de prijs hebben zijn hieronder grafisch weergegeven. Figuur 2.18: Price influential parameters Al deze parameters opsommen is uiteraard niet voldoende. Er zullen bewerkingen uitgevoerd moeten worden om tot het correcte resultaat te komen. Om de berekening makkelijker en overzichtelijker te laten verlopen, is de prijscalculatie in een aantal delen opgesplitst: ˆ Een vaste kost: deze is verder verdeeld in een productafhankelijke, transportafhankelijke en verkoopkanaal afhankelijke kost;

62 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 51 ˆ Winst; ˆ Een variabele kost: deze bestaat uit een aantal procentueel opgeslagen kosten; ˆ Bewerkingen na de prijsberekening: achteraf moeten een aantal controles en aanpasssingen gebeuren vooraleer de eindprijs bekomen wordt. Denk maar aan het afronden van een prijs etc. Figuur 2.19: Basic price logic Omdat de gebruiker grote flexibiliteit vereist van de applicatie (er zijn tenslotte een hele reeks optionele en overschrijfbare velden), moet er per blok een hoop logica worden toegepast. Deze logica is onmogelijk duidelijk in woorden te omschrijven, dus deze scriptie zal de verschillende kostenberekeningen verduidelijken aan de hand van een aantal schematische voorstellingen.

63 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 52 Vaste kosten De fixed cost bestaat uit meerdere delen, die na berekening worden opgeteld om de totale vaste kost te vormen. Fixed product cost Figuur 2.20: Fixed product cost logic F ixed product cost = purchase price + packaging cost + handling cost Fixed channel cost De fixed channel cost is relatief simpel wat een schematische voorstelling overbodig maakt: F ixed channel cost = f ixed channel commission + f ixed 3rd party channel commission In de bovenstaande formule verstaan we onder 3rd party software: applicaties die gebruikt worden om prijzen automatisch aan te passen en/of te deployen naar een bepaald verkoopkanaal, en hiervoor een vaste commissie vragen.

64 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 53 Fixed transport cost Figuur 2.21: Fixed product cost logic F ixed transport cost = fixed region cost + transport cost + admin cost

65 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 54 Winst Voor het berekenen van de winst zijn er eigenlijk twee marges die berekent moeten worden: een minimum, -en een maximum winstbedrag. Onderstaande figuur (2.22) toont de logica voor het bepalen van de minimumwaarde. Het maximum berekenen gebeurt uiteraard op gelijkaardige wijze. Figuur 2.22: Minimum profit calculation logic

66 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 55 Variabele kosten Na het optellen van de vooraf bepaalde kosten, kunnen de variabele kosten voor dit bedrag bepaald worden. Op dit moment worden ook de minimum- en maximumprijs bepaald. Dit gebeurt via de onderstaande formules: Minimum price = (fixed cost + fork minimum) (1/1 ((sales channel commission % + 3rd party commission % + region extra cost % + payment commission %)/100)) (1 + (BT W/100)) Maximum price = (fixed cost + fork maximum) (1/1 ((sales channel commission % + 3rd party commission % + region extra cost % + payment commission %)/100)) (1 + (BT W/100)) Bewerkingen na de prijsberekening De berekende optimale prijs is niet altijd de prijs waaraan men wil verkopen. Voor de verkoop gebruikt men liever afgeronde waarde, zoals bv.95. Ook moet rekening gehouden worden dat er voor sommige producten een minimale prijs (listing price) is, waaronder niet verkocht mag worden van bepaalde leveranciers. Door de volgende logica toe te passen komt men op de finale verkoopsprijs. Merk op dat men verder rekent met het minimum. Dit is omdat de veronderstelling gemaakt wordt, dat de ideale verkoopprijs zich rond het minimum bevindt aangezien de concurrentie bij online verkoop zo talrijk is. Figuur 2.23: Final price

67 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Status logic Het nut van status management in een beheertool is al meermaals in deze scriptie aangehaald: het zorgt er enerzijds voor dat problemen en waarschuwingen duidelijk weergegeven worden, en anderzijds stelt het de gebruiker gerust wanneer geen fouten bij een actie optreden. Status management is dus een overzichtelijke en uitgebreide manier om ten allen tijde feedback aan een gebruiker te bieden. Gebruikte statussen Price status In de applicatie zijn er verschillende veranderlijke parameters die invloed hebben op de prijsberekening. Als één van deze parameters wordt aangepast nadat er al een prijs berekend is, wil dit dus zeggen dat de berekende prijs niet meer up-to-date is. Indien dit voorvalt, wordt de volgende beschreven status (calculation status) gewijzigd. Om een gebruiker meer inzicht te geven in hoe zijn veranderingen de prijzen beïnvloeden, zijn er een reeks extra, meer gedetaileerde statussen toegevoegd, die per gedesynchroniseerd product weergeven door welke wijzigingen de prijs niet meer up-to-date is. Deze toegevoegde statussen zijn: ˆ Product; ˆ Packaging; ˆ Price overwrite; ˆ Channel; ˆ Transport; ˆ Supplier. Het spreekt voor zich dat aanpassingen die geen invloed hebben op de prijsberekening (bijvoorbeeld een verandering van de naam van een sales channel), uiteraard niet voor een statuswijziging zullen zorgen. Dit is geïmplementeerd door, bij het uitvoeren van elke mogelijke CRUD actie, de veranderingen eerst langs een status management functie te sturen. Op de volgende pagina bevindt zich een codevoorbeeld van de status management methode die aangeroepen wordt bij het updaten van verpakkingen:

68 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 57 Listing 2.11: Packaging status calculation T r a n s a c t i o n a l p u b l i c void u p d a t e S t a t u s P a c k a g i n g ( L i s t <Packaging> packaging ) { } L i s t <I n t e g e r > p a c k a g i n g I d L i s t=new A r r a y L i s t <I n t e g e r >(); L i s t <I n t e g e r > p a c k a g i n g I d L i s t S t a t u s U p d a t e=new A r r a y L i s t <I n t e g e r >(); // get a l l packaging t h a t i s b e i n g updated f o r ( Packaging pack : packaging ) { p a c k a g i n g I d L i s t. add ( pack. g e t I d ( ) ) ; } TypedQuery<Packaging> query1 = em. c r e a t e Q u e r y ( SELECT pack FROM Packaging pack WHERE pack. i d IN : p a c k a g i n g s, Packaging. c l a s s ) ; query1. s e t P a r a m e t e r ( p a c k a g i n g s, p a c k a g i n g I d L i s t ) ; // check i f packaging update i n f l u e n c e s p r i c e f o r ( Packaging packnew : packaging ) { f o r ( Packaging packold : query1. g e t R e s u l t L i s t ( ) ) { i f ( packold. g e t I d ()==packnew. g e t I d ( ) ) { i f (! packold. g e t P r i c e ( ). e q u a l s ( packnew. g e t P r i c e ( ) ) ) { p a c k a g i n g I d L i s t S t a t u s U p d a t e. add ( packnew. g e t I d ( ) ) ; } } } } // update packaging s t a t u s f o r a l l p r i c e s a f f e c t e d by the packaging update i f ( p a c k a g i n g I d L i s t S t a t u s U p d a t e. s i z e () >0){ TypedQuery<P r i c e C a l c u l a t e d > query = em. c r e a t e Q u e r y ( SELECT pc FROM P r i c e pr INNER JOIN pr. p r i c e C a l c u l a t e d pc INNER JOIN pr. product p INNER JOIN p. p a c k a g i n g s pack WHERE pack. i d IN : p a c k a g i n g s AND EXISTS (SELECT pack FROM p. p a c k a g i n g s pack ), P r i c e C a l c u l a t e d. c l a s s ) ; query. s e t P a r a m e t e r ( p a c k a g i n g s, p a c k a g i n g I d L i s t S t a t u s U p d a t e ) ; f o r ( P r i c e C a l c u l a t e d p r i c e C : query. g e t R e s u l t L i s t ( ) ) { p r i c e C. s e t S t a t u s P a c k a g i n g ( f a l s e ) ; p r i c e C. s e t S t a t u s P r i c e ( f a l s e ) ; em. p e r s i s t ( p r i c e C ) ; } em. f l u s h ( ) ; } In de bovenstaande code gebeuren dus 4 dingen: 1. Ophalen van verpakkingen die gewijzigd zijn; 2. Voor elke verpakking controleren of een wijziging de prijs van de verpakking beïnvloedt; 3. Alle producten met een gewijzigde verpakkingsprijs ophalen; 4. Voor elk product de status 'Packaging' op false zetten.

69 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 58 Calculation status Zoals bij de bespreking van de price status op pagina 50 reeds vermeld is, zal bij een prijs desynchronisatie de calculation status van de desbetreffende prijs op 'Changed' gezet worden. Andere mogelijke waarden voor deze status zijn: ˆ Draft: deze status geeft aan dat er nog geen prijs berekend is; ˆ Calculating: deze status wordt gegeven aan alle prijzen die (her)berekend worden, zodat de gebruiker bij lange wachttijden of trage connectie kan zien welke prijzen nog aan het berekenen zijn (of berekend, maar nog niet teruggezonden zijn). Ook bij serverpanne tijdens het uitvoeren van de calculatiejob, zal de status op 'Calculating' blijven staan, zodat de calculatie hervat kan worden wanneer de server opnieuw opgestart is; ˆ Calculated: geeft weer dat de prijs correct berekend, en up-to-date is; ˆ Error: Dit treed op als er een fout optreedt tijdens het berekenen van een prijs. Er zijn meerdere foutboodschappen mogelijk, waarvan de meeste te maken hebben met het feit dat er te weinig data aanwezig is om de berekening correct uit te voeren. Send status Deze status is relatief eenvoudig en kan de volgende waardes verkrijgen: ˆ Draft: de prijs is nog nooit verzonden; ˆ Changed: als er een prijs verandert, geeft deze status aan dat de prijs opnieuw verstuurd dient te worden; ˆ Sending: Alle prijzen die verzonden dienen te worden krijgen deze status. Dit heeft, net als de calculation status 'Calculating', als voordeel dat de gebruiker beter zicht heeft op wat er intern gebeurt, en zorgt er bovendien voor dat eventuele niet-verstuurde prijzen na een systeemcrash opnieuw verzonden kunnen worden; ˆ Sent: de prijs is succesvol verzonden; ˆ Error code: deze error code komt overeen met de error die Hybris terugstuurt als een bepaalde prijs niet verzonden kan worden. Momenteel zijn de mogelijke error codes: 404: ofwel kan het product, ofwel het verkoopkanaal van de prijs niet gevonden worden in het PIM systeem; 500: internal server error. Hoe de error in deze situatie kan optreden valt buiten het bestek van deze scriptie.

70 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION 59 Status overview Figuur 2.24 toont de verschillende mogelijke statussen die een prijs kan verkrijgen, nadat bepaalde acties uitgevoerd zijn. Figuur 2.24: Status overview scheme

71 HOOFDSTUK 2. BESPREKING PRICE MANAGEMENT APPLICATION Testing Omdat de applicatie optimale verkoopsprijzen moet gaan bereken is er op dit vlak geen plaats voor foutmarges. Tijdens de development fase is er dus veel aandacht besteed aan de controle van de berekeningsmethode. Dit hebben we bereikt door de klant vroeg in het proces te betrekken. De prijsberekeningsformule is aan de hand van overleggen in samenspraak met de klant ontwikkeld en doorheen het ontwikkelingsproces verder geëvolueerd. Er is in de loop van het project aan verschillende vormen van testing gedaan: ˆ Unit testing: er zijn enkele basis unit tests geschreven, die CRUD acties kunnen testen. In de toekomst zullen er voor de prijsberekeningsmethode en het status management ongetwijfeld ook nog een aantal unit tests geschreven worden. ˆ User acceptance testing: zoals in de inleiding van het onderdeel?? al vermeld werd, is de klant vanaf het begin van het ontwikkelingsproces bij het project betrokken. Vanaf er een stuk functionaliteit af was, heeft de klant deze kunnen uitproberen in de testomgeving, en eventuele bugs of verbeteringen doorgegeven. ˆ Operational testing: er is getracht zoveel mogelijk fouten op te vangen en vervolgens getest of al deze fouten de correcte feedback aan de gebruiker doorgeven. Verdere operational testing zal zeker gebeuren vooraleer de applicatie in productie genomen wordt. ˆ Functional/manual testing: zoals altijd tijdens de ontwikkeling van software, is elk stuk code/functionaliteit uitvoerig getest vooraleer dit definitief geïmplementeerd werd.

72 Hoofdstuk3 Resultaten 3.1 Doelstellingen Zoals vermeld in het Doel op pagina 3, was de bedoeling om voor het PIM systeem een prijsberekeningsmodule te ontwikkelen die automatisch de beste prijs per product per verkoopkanaal berekent, aan de hand van een aantal parameters. De applicatie zou moeten zorgen voor een sterke centralisatie van prijsdata en een automatisatie van prijsdataverwerking, met verschillende grote voordelen als gevolg: ˆ Significante verlaging van de kans op fouten; ˆ Duidelijk overzicht van relevante informatie; ˆ Tijdsbesparing. Verder waren er een hele hoop Vereisten besproken (vanaf pagina 3), waaraan de applicatie moest voldoen. 61

73 HOOFDSTUK 3. RESULTATEN Resultaten Vermits de eerste ontwikkelingsfase net afgelopen is, is het nog niet mogelijk om met zekerheid te zeggen dat de kans op fouten bij het beheer van verkoopprijzen lager is dan voordien. Ook of er een tijdsbesparing is, kan nog niet getest worden aangezien de gebruiker nog in de gewenningsfase van de software zit. Wel geeft de applicatie al zeker een duidelijk overzicht van relevante informatie. Verder voldoet de applicatie aan alle voorgenoemde Vereisten, dus we kunnen besluiten dat de doelstellingen gehaald zijn. Het resultaat van het ontwikkelingsproces dat besproken is in deze scriptie, is een volledig functionele web applicatie die producten kan ophalen, productinformatie kan verrijken, prijzen kan berekenen en deze prijzen tenslotte kan terugzenden naar het PIM systeem. Vanaf de volgende pagina wordt per webpagina alle mogelijke functionaliteit kort uitgelegd.

74 HOOFDSTUK 3. RESULTATEN Login Vooraleer de applicatie gebruikt kan worden, dient ingelogd te worden op de login pagina. Dit gebeurt door op de 'Login ' knop te klikken na het invoeren van de onderstaande gegevens: ˆ Username: admin ˆ Password: pricing Figuur 3.1: Login screen Wanneer de login gegevens succesvol ingevoerd zijn, zal de gebruiker worden doorverwezen naar de homepage van de applicatie, het Dashboard.

75 HOOFDSTUK 3. RESULTATEN Navigatie Om van de ene naar de andere pagina in de applicatie te verplaatsen, kan zowel het navigatiemenu, als de compactere navigatiebalk gebruikt worden. Navigatiemenu Standaard weergave Het menu bevindt zich voor grotere schermen, zoals computers en laptops, aan de linkerzijde van de pagina. Met een klik op de pijl bovenaan in het menu, kan de menubalk ingeklapt worden, zodat meer informatie op het scherm getoond kan worden. Dit is vooral handig op pagina's zoals Price, waar soms ontzettend grote tabellen weergegeven moeten worden. Figuur 3.2: Navigatiemenu in open en gesloten toestand Hierboven is het menu weergegeven in geopende en ingeklapte toestand. Merk op dat de pagina die momenteel geopend is, altijd iets donkerder weergegeven wordt in het menu. Op de linkerfoto bovenaan, is duidelijk zichtbaar dat de dashboard pagina geopend is.

76 HOOFDSTUK 3. RESULTATEN 65 Compacte weergave Voor kleinere tablets en smartphones, bevindt het menu zich in de balk bovenaan. Openen en sluiten van het menu gebeurt door op de knop in de rechterbovenhoek te drukken. Figuur 3.3: Compact screen navigation menu Navigatiebalk Onder de titel van elke pagina is een compacte navigatiebalk te vinden, die weergeeft waar in het menu de gebruiker zich bevindt. Figuur 3.4: Navigation bar

77 HOOFDSTUK 3. RESULTATEN Algemene functionaliteit Doorheen de applicatie is er een hele hoop functionaliteit die meermaals terugkomt. Zo zal er bijna overal een 'Save changes' knop te vinden zijn, en zal elke pagina één of meerdere tabellen weergeven. Wijzigingen opslaan In de linkeronderhoek van bijna elke pagina is een 'Save changes' knop te vinden. Alle wijzigingen die op deze pagina uitgevoerd zijn, worden pas definitief opgeslagen wanneer op deze knop geklikt wordt. Figuur 3.5: Save changes button Na het selecteren van de knop, zal vervolgens een confirmatie popup tevoorschijn komen, zoals op het onderstaande voorbeeld. Indien de gebruiker beslist om de veranderingen definitief op te slaan, dient 'OK' geselecteerd te worden. Het selecteren van de 'Cancel' knop, zal zorgen dat de gebruiker terug op de originele pagina terecht komt en eventuele verdere aanpassingen kan doen, alvorens hij deze opslaat. Figuur 3.6: Save confirmation popup Opmerking: indien de gebruiker besluit om wijzigingen niet op te slaan, is het voldoende om het browservenster te herladen.

78 HOOFDSTUK 3. RESULTATEN 67 Exporteren naar Excel De 'Export' knop kan op elke pagina(uitgezonderd Product Details) in de rechterbenedenhoek teruggevonden worden. Deze knop zorgt ervoor dat resultaten opgeslagen kunnen worden als een Excel tabel. Figuur 3.7: Export to Excel button Link naar details pagina In alle tabellen die producten of productprijzen weergeven, is uiterst rechts een kolom 'Info' voorzien. Deze kolom bevat per rij een knop, waarmee makkelijk naar de detailpagina van het product genavigeerd kan worden. Figuur 3.8: Details button

79 HOOFDSTUK 3. RESULTATEN Zoekfilters Elke pagina heeft verschillende manieren om naar bepaalde informatie te zoeken. Zoekfilters bovenaan de pagina Op een aantal pagina's kan bovenaan een aantal zoekvelden ingevuld worden, vooraleer resultaten weergegeven worden. Na het invullen van de gewenste zoekcriteria, gevolgd door een druk op de 'Search' knop, zullen alle resultaten onder het zoekvenster in tabelvorm weergegeven worden. Deze tabel kan bovendien ook nog verder gefilterd worden (zie Zoekfunctionaliteit in tabellen). Verder is er de optie om deze zoekfilter in te klappen door een klik op het icoon links naast 'Search filters'. Figuur 3.9: Search filters Opmerking: indien de gebruiker alles wil tonen zonder het gebruik van de zoekfilter, selecteert hij bij 'General' het bolletje links naast 'SKU' vooraleer op de 'Search' knop te klikken.

80 HOOFDSTUK 3. RESULTATEN 69 Zoekfunctionaliteit in tabellen In alle tabellen (uitgezonderd Product Details), is er de mogelijkheid om te sorteren op kolomnaam, of te zoeken naar een bepaalde waarde in een kolom. Door een waarde in te vullen in de 'search..' velden, kan gezocht worden naar deze waarde. Sorteren gebeurt door te klikken op de vetgedrukte titel van een kolom, zodat een driehoekig pijltje naast de titel verschijnt. Als dit pijltje naar boven wijst, zal de tabel alfabetisch gerangschikt worden van A-Z volgens naam. Indien nogmaals op dit pijltje geklikt wordt, zal de tabel omgekeerd worden, zodat van Z naar A gesorteerd wordt. Het onderstaande voorbeeld demonstreert deze functionaliteit: de tabel is in dit geval alfabetisch gesorteerd op 'Name', en verder is er gefilterd naar rijen waarvan de waarde in kolom 'Purchase discount %' begint met het getal 3. Figuur 3.10: Search & sort tables

81 HOOFDSTUK 3. RESULTATEN Dashboard Het dashboard is een overzichtspagina, die standaard geopend wordt nadat de gebruiker ingelogd is. Op deze pagina zijn een aantal belangrijke functies mogelijk, die hier uitgelegd worden. Error overview De tabel die weergegeven wordt op deze pagina, bevat een lijst van producten waarvan de prijzen fouten bevatten. Om prestatieredenen zullen hier maximaal 20 producten per keer getoond worden. Zoals te zien op het onderstaande screenshot, zijn in dit error overzicht een aantal verschillende statussen te vinden: ˆ Channels linked: geeft weer of een product al gebonden is aan verkoopkanalen. Indien dit niet het geval is, zullen er ook nog geen prijzen voor het product beschikbaar zijn. ˆ Price status: geeft weer of één van de prijzen van een bepaald product niet meer up-todate is. Deze status is een combinatie van verschillende statussen die op de statuspagina te vinden zijn, namelijk: Product; Packaging; Price overwrite; Sales channel; Transport; Supplier. ˆ Calc status: geeft de berekeningsstatus van de prijzen van het product weer. Indien één van de prijzen herberekend wordt/moet worden, of nog nooit berekend is, zal ook deze status een waarschuwing tonen. ˆ Sync status: geeft weer of de prijzen van het product naar Hybris doorgestuurd zijn. Ook hier zal een waarschuwing getoond worden wanneer de laatst berekende prijs nog niet doorgestuurd is.

82 HOOFDSTUK 3. RESULTATEN 71 Figuur 3.11: Dashboard error overview Extra: ook de statuskolommen kunnen hier gefilterd worden. Dit gebeurt door het ingeven van de letter 't' (true) voor statussen zonder problemen, of het invoeren van de letter 'f' (false) voor het weergeven van statussen met problemen. Overige functionaliteit Onder het error overview kunnen een aantal knoppen teruggevonden worden: ˆ Calculate all: wanneer deze knop ingedrukt wordt, zal een taak gestart worden waarin alle verouderde/onberekende prijzen in het systeem (her)berekend worden. Denk eraan dat deze taak lang kan duren, zeker indien er een groot aantal prijzen met fouten in het systeem zitten. Als alternatief is er de optie om op de Calculation & Status pagina een aantal prijzen te selecteren die herberekend moeten worden. ˆ Get new products: deze knop zal controleren of er nieuwe/gewijzigde producten in het Hybris PIM systeem zijn. Merk op dat deze taak automatisch elk uur uitgevoerd zal worden, en het meestal dus overbodig is om deze knop te gebruiken. ˆ Send prices: knop om nieuwe en/of herberekende prijzen door te sturen naar het Hybris hoofdsysteem. Ook deze taak wordt elk uur automatisch uitgevoerd, wat het gebruik van de knop in de meeste gevallen niet noodzakelijk maakt. ˆ Export: zie Exporteren naar Excel Figuur 3.12: Dashboard buttons

83 HOOFDSTUK 3. RESULTATEN Product Dit is geen op zich bestaande pagina, maar een deel van het menu dat verder onderverdeeld is voor het gemak van de gebruiker. Search Deze pagina bestaat uit een aantal zoekfilters (zie Zoekfilters), gevolgd door een tabel die basisinformatie over het product weergeeft. Het nut van deze pagina is om makkelijk en vlot een bepaald product te kunnen vinden, om vervolgens de productdetails te kunnen bekijken, door op de details knop (zie pagina 67)te klikken. Figuur 3.13: Product search page

84 HOOFDSTUK 3. RESULTATEN 73 Select sales channels Deze pagina wordt gebruikt om, na het toevoegen van nieuwe producten, de gewenste verkoopkanalen te selecteren. Voor al deze verkoopkanalen zal vervolgens een rij in de prijstabellen voorzien worden. Deze pagina bevat bovenaan ook weer een aantal velden waarop de productenlijst gefilterd kan worden. Zo wordt het bijvoorbeeld heel makkelijk om enkel de meest recente producten weer te geven door het gebruik van de datum filter. In de resultatentabel is het niet nodig om per product per verkoopkanaal het vakje aan te vinken. Indien een verkoopkanaal voor alle producten gebruikt zal worden, kan gewoon de select all knop bovenaan gebruikt worden, waardoor alle vakjes in de kolom van het verkoopkanaal automatisch aangevinkt zullen zijn. Figuur 3.14: Select sales channels page Na het selecteren van de gewenste sales channels, moeten de wijzigingen uiteraard bevestigd worden met de 'Save changes' knop. Verder is ook hier functionaliteit om de informatie uit de tabel te exporteren naar Excel.

85 HOOFDSTUK 3. RESULTATEN 74 Price Deze pagina wordt gebruikt om prijs gerelateerde parameters op productniveau in te stellen. Omdat er zo'n uitgebreide hoeveelheid informatie op deze pagina weergegeven kan worden, is een bijkomende filter toegevoegd waarmee geselecteerd kan worden welke kolommen weergegeven moeten worden op het scherm. Deze filter is te vinden in de rechterbovenhoek van het resultatenscherm. Figuur 3.15: Column select functionality In de Price pagina kan behalve een aantal waardes ook de verpakking(en) van een product geselecteerd worden. Dit gebeurt door een druk op de Packaging knop (zie onderstaande figuur) van het desbetreffende product. Figuur 3.16: Packaging button Vervolgens zal een popup menu geopend worden, waarin een aantal knoppen te vinden zijn: ˆ Add packaging: hiermee kan een verpakking aan het product toegevoegd worden. Vervolgens wordt op de naam van de toegevoegde verpakking geklikt en de gewenste verpakking geselecteerd. ˆ Done: selecteer deze knop indien de toegevoegde verpakking(en) later opgeslagen moeten kunnen worden. ˆ Cancel: selecteer deze knop indien de wijzigingen aan de productverpakking later niet opgeslagen moeten worden (bv. bij fouten).

86 HOOFDSTUK 3. RESULTATEN 75 Figuur 3.17: Packaging menu Opmerking: na het toevoegen van verpakkingen en het selecteren van 'Done' knop, moet nog steeds onderaan de pagina op 'Save changes' geklikt worden om de nieuwe/gewijzigde verpakking definitief op te slaan!

87 HOOFDSTUK 3. RESULTATEN 76 Price overwrites Deze pagina wordt gebruikt om prijs gerelateerde parameters op product-verkoopkanaal niveau in te stellen (voor een product dat verkocht wordt op x kanalen, zullen hier dus x resultaten getoond worden). Na het toepassen van de gewoonlijke zoekfilters, verkrijgt men een gelijkaardig resultaat als de onderstaande figuur. Figuur 3.18: Price overwrite page De niet aanpasbare getallen in de tabel stellen de winsten en listing price op productniveau voor. In de input velden kan dan per verkoopkanaal een 'overwrite' waarde ingesteld worden. Deze overwrites zijn bijvoorbeeld nuttig wanneer een gebruiker op een bepaald verkoopkanaal veel meer concurrentie heeft, en dus beter iets minder winst maakt dan normaal om daardoor toch meer te verkopen dan de concurrentie. Met het 'ignore' vakje kan een vooropgelegde listing price van de leverancier op een bepaald verkoopkanaal genegeerd worden.

88 HOOFDSTUK 3. RESULTATEN 77 Transport Op deze pagina kunnen alle bestemming afhankelijke parameters van een bepaald product aangepast worden. Merk op dat enkel de bestemmingen van een product getoond worden, die als 'main region' gebruikt zijn voor de geselecteerde verkoopkanalen (zie Sales channels). Verdere informatie bij deze pagina is overbodig, vermits alle andere functionaliteit al uitgelegd is in het onderdeel Algemene functionaliteit. Figuur 3.19: Product transport page

89 HOOFDSTUK 3. RESULTATEN 78 Calculation & Status Deze pagina toont alle statussen (behalve de 'Channels linked' status, vermits de prijs op dit ogenblik al bestaat en deze status dus altijd in orde zou zijn) en de berekende prijzen van de gewenste producten, alsook de laatste prijsberekeningsdatum. Deze statussen zijn: ˆ Calc status: geeft de berekeningsstatus van de prijzen weer. Indien een prijs herberekend wordt/moet worden, of nog nooit berekend is, zal deze status een waarschuwing tonen. ˆ Sync status: geeft weer of de prijzen naar Hybris doorgestuurd zijn. Ook hier zal een waarschuwing getoond worden wanneer de laatst berekende prijs nog niet doorgestuurd is. ˆ Product: geeft weer of de productgerelateerde prijsparameters (bv. aankoopprijs, BTW,...) up-to-date zijn t.o.v. de laatste prijsberekening. ˆ Packaging: geeft weer of de geselecteerde verpakkingen up-to-date zijn in de laatste prijsberekening t.o.v. de laatste prijsberekening. ˆ Price OW: geeft weer of de price overwrite waarden, met andere woorden de productverkoopkanaal afhankelijke parameters, up-to-date zijn t.o.v. de laatste prijsberekening ˆ Channel: geeft weer of de verkoopkanaal gebonden kosten up-to-date t.o.v. de laatste prijsberekening. ˆ Transport: geeft weer of de transportkosten up-to-date zijn t.o.v. de laatste prijsberekening ˆ Supplier: geeft weer of de kosten en/of kortingen van de leverancier up-to-date zijn t.o.v. de laatste prijsberekening. Figuur 3.20: Calculation & Status page

90 HOOFDSTUK 3. RESULTATEN 79 Ook hier zijn de statuskolommen sorteer-en filterbaar. Alle statussen, met uitzondering van 'Calc' en 'Sync' status, kunnen gevonden worden door de letters 't' (true, toont de correcte statussen) of 'f' (false, toont de error statussen). Voor de 'Calc' status zijn de zoekmogelijkheden als volgt: ˆ Status OK: Calculated ˆ Momenteel de prijs aan het berekenen: Calculating ˆ Error: Missing data; No colli; No freight; No transport Voor 'Sync' zijn er deze keywords: ˆ Draft; ˆ Sending; ˆ Sent; ˆ Changed; ˆ Error. Opmerking: bij de 'Sync' en 'Calc' statuskolommen is het mogelijk om de huidige statusboodschap te tonen door met de muis over het status icoon te hoveren. Dit kan handig zijn om specifiekere informatie over een error te verkrijgen. Figuur 3.21: Status info on mouse hover Verder is er op deze pagina nog een knop te vinden die meer informatie over de uitgevoerde prijsberekening weergeeft (zie figuur 3.22). Figuur 3.22: Price calculation information button

91 HOOFDSTUK 3. RESULTATEN 80 Een druk op deze knop opent het onderstaand menu. Figuur 3.23: Price calculation information menu

92 HOOFDSTUK 3. RESULTATEN 81 Product Details Deze pagina is de meest uitgebreide pagina in de hele applicatie. Per product kan alle prijsgerelateerde informatie hier teruggevonden en aangepast worden. Deze pagina is productafhankelijk, en kan alleen geopend worden door in een resultatentabel op de Link naar details pagina knop te klikken. Er is op deze pagina dus ook geen zoekfunctionaliteit voorzien, vermits alle data al productspecifiek is. Wel is de pagina ingedeeld in verschillende inklapbare vensters, die allemaal een deel van de producteigenschappen bevatten. Zo zijn er vensters gemaakt voor: ˆ Algemene informatie; ˆ Algemene prijsinformatie; ˆ Verkoopkanaal specifieke prijsinformatie; ˆ Status informatie; ˆ Productcreatie informatie. Opmerking: al deze informatie kan uiteraard ook in de reeds besproken pagina's geselecteerd worden. De detailpagina dient louter om een gedetailleerd overzicht van prijsinformatie over een product weer te geven, zodat eventuele fouten of ongekende informatie makkelijk gevonden en verbeterd kunnen worden. Algemene informatie Dit venster toont enerzijds de informatie afkomstig uit Hybris (naam, SKU nummer, merk, gewicht en afmetingen), en anderzijds enkele producteigenschappen die in de Price Management Application geselecteerd moeten/kunnen worden (leverancier en transportmethode zijn verplicht, geschat gewicht en verpakking is optioneel). Figuur 3.24: General information from product details page

93 HOOFDSTUK 3. RESULTATEN 82 Algemene prijsinformatie In dit venster wordt productspecifieke prijsinformatie ingesteld. Aan de linkerzijde worden alle prijzen en kosten weergegeven, en aan de rechterzijde de winsten. Merk op dat packaging cost een niet aanpasbaar veld is, vermits deze afhangt van de prijs van de geselecteerde verpakkingen. Om dit te omzeilen is er een packaging cost overwrite veld voorzien. Figuur 3.25: General price information from product details page Verkoopkanaal specifieke prijsinformatie Dit onderdeel bevat alle verkoopkanaal specifieke parameters van de prijsbepaling, met andere woorden de 'price overwrite' parameters. Ook de selectie van de verkoopkanalen waarvoor een prijs berekend moet worden gebeurt hier. Verder worden rechts de minimum-, maximum- en finale prijs weergegeven. Figuur 3.26: Price overwrite information from product details page

94 HOOFDSTUK 3. RESULTATEN 83 Status informatie Dit venster bevat een tabel, gelijkaardig aan de tabel op de reeds besproken Calculation & Status pagina. Verder zijn hier 2 knoppen te vinden: een knop voor het (her)berekenen van geselecteerde prijzen, en een knop voor het verzenden van een selectie prijzen naar het PIM systeem. Deze functionaliteit is ook reeds besproken in de voorgenoemde Calculation & Status pagina. Figuur 3.27: Status information from product details page Productcreatie informatie Dit venster toont enerzijds de informatie afkomstig uit Hybris (naam, SKU nummer, merk, gewicht en afmetingen), en anderzijds enkele producteigenschappen die in de Price Management Application geselecteerd moeten/kunnen worden (leverancier en transportmethode zijn verplicht, geschat gewicht en verpakking is optioneel). Figuur 3.28: Creation information from product details page

95 HOOFDSTUK 3. RESULTATEN 84 Add a product Op deze pagina kunnen eventueel nieuwe producten aan de Price Management Application toegevoegd worden. Dit zou echter enkel voor testredenen mogen gebeuren, vermits deze producten niet in Hybris aanwezig zijn, en het terugsturen van hun berekende prijzen gegarandeerd fouten zal veroorzaken. Deze pagina is dus nuttig om snel een prijs voor een fictief product te kunnen berekenen, maar niet aan te bevelen voor regelmatig gebruik. Figuur 3.29: Add product page

96 HOOFDSTUK 3. RESULTATEN Sales channels Op deze pagina kunnen verkoopkanalen toegevoegd, gewijzigd of verwijderd worden. Aanmaken van een verkoopkanaal Toevoegen van een verkoopkanaal gebeurt op de volgende manier: 1. Druk op de knop 'Add channel' 2. Bovenaan de tabel zal een nieuwe rij verschijnen 3. Door op een veld in de rij te klikken, zal de waarde aangepast kunnen worden zoals op de onderstaande foto. Figuur 3.30: Editable table field 4. Vervolgens kan stap 3 herhaald worden voor elk veld in de rij tot aan de 'Zones' kolom. Opmerking: het veld 'Currency' is optioneel, vermits alle eindprijzen in euro weergegeven worden. 5. Indien gewenst kunnen een aantal delivery zones toegevoegd worden aan het verkoopkanaal door een druk op de zone knop (zie onderstaande figuur). Vervolgens zal het onderstaand menu geopend worden. Zones toevoegen gebeurt op dezelfde manier als het toevoegen van verpakkingen op de Price pagina. Figuur 3.31: Zone button Opmerking: Deze stap is optioneel, en heeft op geen enkele manier invloed op de prijsberekening. 6. Na het instellen van alle gewenste waardes dient een 'Main region' geselecteerd te worden. Deze regio kan eigenlijk geïnterpreteerd worden als de regio van levering. Wanneer vanuit België verstuurd wordt voor een verkoopkanaal dat levert in België en Nederland, is het bijvoorbeeld het veiligst om Nederland te selecteren, vermits zo de hoogst mogelijke transportkosten in de prijscalculatie verwerkt zijn. 7. Selecteer de 'Save changes' knop en klik vervolgens op 'OK'.

97 HOOFDSTUK 3. RESULTATEN 86 Wijzigen van een verkoopkanaal Indien een bestaand verkoopkanaal gewijzigd dient te worden, dienen de stappen voor het Aanmaken van een verkoopkanaal vanaf stap 3 herhaald te worden. Verwijderen van een verkoopkanaal Een verkoopkanaal kan simpelweg verwijderd worden door op de onderstaande knop te drukken. Figuur 3.32: Delete button Indien het verkoopkanaal dan niet verwijderd wordt, zal de onderstaande popup getoond worden. Deze popup betekent dat het verkoopkanaal momenteel nog in gebruik is door een aantal producten. Om dit op te lossen, dient de gebruiker op de Select sales channels pagina het vinkje bij dit verkoopkanaal voor alle producten uit te vinken. Figuur 3.33: Delete sales channel error popup

98 HOOFDSTUK 3. RESULTATEN 87 Overzicht Sales channels pagina Figuur 3.34: Sales channel page overview Overige pagina s Alle overige ontwikkelde pagina's hebben min of meer dezelfde functionaliteit als de Sales channels pagina die vanaf bladzijde 85 besproken wordt. In bijlage C is meer informatie over deze pagina's beschikbaar indien gewenst.

99 Hoofdstuk4 Besluit In functioneel opzicht voldoet het product aan de vooropgestelde eisen. Er worden producten vanuit het PIM systeem opgehaald, deze producten kunnen met informatie verrijkt worden, er kunnen prijzen berekend worden en tot slot kunnen deze berekende prijzen teruggestuurd worden naar het PIM systeem. Het succes van het project hing echter niet enkel af van de functionele vereisten, maar ook van de vraag of de applicatie bruikbaar zou zijn in een zakelijke omgeving en of de nieuwe tool een verbetering opleverde tegenover de voorgaande werkmethode. Uit de laatste gesprekken met de opdrachtgevers kan er geconcludeerd worden dat de tool wel degelijk een beter overzicht van de relevante informatie bevat. Door het simpele en intuïtieve design, maar ook door de snelheid en performantie van een SPA, kan vermoedelijk ook een merkbare hoeveelheid tijd bespaard worden, hoewel dit door de huidige, korte periode van gebruik nog niet met zekerheid gezegd kan worden. Tijdens de ontwikkeling van de applicatie waren er twee beperkende factoren. Het eerste probleem was dat er een hele hoop nieuwe technologieën en tools aangeleerd moesten worden. Er was dus een zeer steile leercurve, zeker tijdens de eerste ontwikkelingsweken. De tweede factor, die versterkt werd door de eerste, was de omvang van het project in verhouding met de beschikbare tijd. Dit resulteerde in een aantal zaken die beter gekund hadden. Vooral unit testing had iets uitgebreider mogen gebeuren, en er had iets meer aandacht aan de leesbaarheid en onderhoudbaarheid van de code besteed moeten worden. 88

100 HOOFDSTUK 4. BESLUIT Reflectie We vonden het over het algemeen een zeer boeiende stage. Het was vooral interessant om te ontdekken hoe het voelt om het volledige ontwikkelingsproces van een project uit te voeren. Zowel de analytische als technische aspecten van softwareontwikkeling zijn aan bod gekomen, en we hebben op beide vlakken ontzettend veel kunnen bijleren. Hoewel er een aantal zaken waren die we onderschat hadden (vooral bij analytische taken), zijn we er toch in geslaagd om het project tot een goed einde te brengen en aan de eisen van de klant te voldoen. Verder zien we duidelijk het nut en potentieel van onze applicatie, en hebben we al een hele hoop uitbreidingen in gedachten. Hierbij denken we aan: ˆ Automatische conversie van de eindprijs naar andere munteenheden; ˆ Producten met hun berekende prijs automatisch aanbieden op het juiste verkoopkanaal; ˆ Logboeken van prijzen bijhouden doorheen de tijd zodat analyses uitgevoerd kunnen worden; ˆ Rekening houden met stockhoeveelheid bij de keuze van het transporttype en de berekening van de verkoopprijs; ˆ...

101 BijlageA Use cases Tijdens dit project zijn een groot aantal use cases beschreven. Deze kunnen allemaal teruggevonden worden in het portfolio onder Finaal product/schema's. Hieronder worden enkele van de beschreven use cases weergegeven. A.1 CRUD Zoals weergegeven in figuur 2.2, zijn er relatief veel CRUD gerelateerde use cases. Om de grootte van dit document wat te beperken zijn deze niet allemaal in bijlage opgenomen. Aan de hand van het onderstaande voorbeeld wordt duidelijk gemaakt wat deze use cases inhouden. Men kan er dus vanuit gaan dat de andere CRUD gerelateerde cases in figuur 2.2 op een gelijkaardige manier beschreven zijn. A.1.1 Suppliers Read 90

102 BIJLAGE A. USE CASES 91 Create Update

103 BIJLAGE A. USE CASES 92 Delete A.2 GET Products Deze use case beschrijft hoe een gebruiker nieuwe/geupdate producten kan ophalen uit het Hybris PIM systeem. Merk op dat deze actie niet noodzakelijk door een gebruiker aangeroepen moet worden, maar ook via een job event getriggerd kan worden.

104 BIJLAGE A. USE CASES 93 A.3 Price enrichment Deze sectie bestaat uit een aantal verschillende use cases, die in figuur 2.2 allemaal vooraf gegaan worden door het woord Product (met uitzondering van Product Status&calculated values ). Ook hier is de inhoud van deze use cases grotendeels gelijkaardig, en is er dus ook gekozen om maar één voorbeeld in deze bijlage op te nemen. Wat deze use cases onderscheidt van de CRUD use cases, is dat ze enerzijds zoekfunctionaliteit bevatten, en anderzijds geen Create/Delete functionaliteit bezitten. A.3.1 Price overwrites Read Update

105 BIJLAGE A. USE CASES 94 A.4 Calculate prices Deze use cases beschrijven hoe een gebruiker de prijsberekeningsmethode kan aanroepen. A.4.1 Calculate selected A.4.2 Calculate all

106 BIJLAGE A. USE CASES 95 A.5 Send prices Deze use cases beschrijven hoe een gebruiker de gewenste prijzen naar Hybris kan doorsturen. Merk op dat deze actie niet noodzakelijk door een gebruiker aangeroepen moet worden, maar ook via een job event getriggerd kan worden. A.5.1 Send selected A.5.2 Send all

107 BIJLAGE A. USE CASES 96 A.6 Status management Deze use cases beschrijven hoe een gebruiker na het uitvoeren van bepaalde acties kan zien of er fouten/verouderde prijzen voorkomen. Een prijsaanpassing van een verpakking zal bijvoorbeeld tot gevolg hebben dat alle prijzen van producten die deze verpakking gebruiken een error status verkrijgen. Er zijn een uitgebreid aantal statussen voorzien, die allemaal beschreven worden in het onderdeel status logic op pagina 56. A.6.1 Show statuses of selected prices A.6.2 Show products with errors

108 BijlageB ER diagram 97

109 BIJLAGE B. ER DIAGRAM 98 B.1 ER diagram parameters Packaging Supplier Supplier Transport

110 BIJLAGE B. ER DIAGRAM 99 Product Price

111 BIJLAGE B. ER DIAGRAM 100 Price Overwrite Price Calculated Sales channel Delivery zone

112 BIJLAGE B. ER DIAGRAM 101 Delivery region GLS Colli GLS Freight

Technisch Ontwerp W e b s i t e W O S I

Technisch Ontwerp W e b s i t e W O S I Technisch Ontwerp W e b s i t e W O S I WOSI Ruud Jungbacker en Michael de Vries - Technisch ontwerp Website Document historie Versie(s) Versie Datum Status Omschrijving / wijzigingen 0.1 20 nov 2008 Concept

Nadere informatie

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 02 april 2009. Versie 2.1.0

Technisch ontwerp. Projectteam 6. Project Web Essentials 02 april 2009. Versie 2.1.0 Projectteam 6 Faculteit Natuur en Techniek Hogeschool Utrecht Projectleider: Hans Allis, hans.allis@student.hu.nl Technisch ontwerp Project "Web Essentials" 02 april 2009 Versie 2.1.0 Teamleden: Armin

Nadere informatie

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous 2006-2007 Inhoudsopgave 1 2 1.1 Programmeertaal PHP5..................... 2 1.2 MySQL database......................... 3 1.3 Adobe Flash...........................

Nadere informatie

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407 Project plan Erwin Hannaart Sander Tegelaar 61849 62407 I4C2 I4C1 1 Inhoudsopgave Doel en doelgroep van het project... 3 Beschrijving van het project... 4 Benodigde materialen... 5 Te verwachten resultaten,

Nadere informatie

Software Test Plan. Yannick Verschueren

Software Test Plan. Yannick Verschueren Software Test Plan Yannick Verschueren Maart 2015 Document geschiedenis Versie Datum Auteur/co-auteur Beschrijving 1 November 2014 Yannick Verschueren Eerste versie 2 December 2014 Yannick Verschueren

Nadere informatie

Software Test Plan. Yannick Verschueren

Software Test Plan. Yannick Verschueren Software Test Plan Yannick Verschueren November 2014 Document geschiedenis Versie Datum Auteur/co-auteur Beschrijving 1 November 2014 Yannick Verschueren Eerste versie 1 Inhoudstafel 1 Introductie 3 1.1

Nadere informatie

Responsive web applicaties op Oracle

Responsive web applicaties op Oracle APEX Responsive web applicaties op Oracle Spreker(s) : Datum : E-mail : Arian Macleane & Jacob Beeuwkes 06-06-2013 info@transfer-solutions.com WWW.TRANSFER-SOLUTIONS.COM Outline Trends APEX intro APEX

Nadere informatie

Beschrijving functioneel en technisch design van de website

Beschrijving functioneel en technisch design van de website Bespreking Punten: Beschrijving functioneel en technisch design van de website Nr. Punt 1 Student 2 Bedrijf 3 Algemene lay out 4 Technologieën 5 Webruimte en datatrafiek 1. Student Registratie Bij de registratie

Nadere informatie

Oracle Application Server Portal Oracle Gebruikersgroep Holland Oktober 2003

Oracle Application Server Portal Oracle Gebruikersgroep Holland Oktober 2003 Oracle Application Server Portal Oracle Gebruikersgroep Holland Oktober 2003 Page 1 1 Kees Vianen Senior Sales Consultant Technology Solutions Oracle Nederland Agenda Geschiedenis van Oracle Portal Portal

Nadere informatie

Workflows voor SharePoint met forms en data K2 VOOR SHAREPOINT

Workflows voor SharePoint met forms en data K2 VOOR SHAREPOINT Slimmer samenwerken met SharePoint Workflows voor SharePoint met forms en data K2 VOOR SHAREPOINT Workflows, forms, reports en data WAAROM KIEZEN VOOR K2? Of u nu workflows moet maken voor items in SharePoint

Nadere informatie

Gestart als demo/research voor cloud-oplossing. Een Afslagveiling

Gestart als demo/research voor cloud-oplossing. Een Afslagveiling WAZUG BCC Veiling Concept Gestart als demo/research voor cloud-oplossing Een Afslagveiling Afslag variant Prijsdump variant Windows Azure CMS: Orchard Admin app: dynamic data Auction Manager Proces: worker

Nadere informatie

Zelftest Java EE Architectuur

Zelftest Java EE Architectuur Zelftest Java EE Architectuur Document: n1218test.fm 22/03/2012 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST JAVA EE ARCHITECTUUR Nota:

Nadere informatie

NHibernate als ORM oplossing

NHibernate als ORM oplossing NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een

Nadere informatie

Technologieverkenning

Technologieverkenning Technologieverkenning Videocontent in the cloud door de koppeling van MediaMosa installaties Versie 1.0 14 oktober 2010 Auteur: Herman van Dompseler SURFnet/Kennisnet Innovatieprogramma Het SURFnet/ Kennisnet

Nadere informatie

Software Design Document

Software Design Document Software Design Document PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie

Nadere informatie

Technische nota AbiFire5 Rapporten maken via ODBC

Technische nota AbiFire5 Rapporten maken via ODBC Technische nota AbiFire5 Rapporten maken via ODBC Laatste revisie: 29 juli 2009 Inhoudsopgave Inleiding... 2 1 Installatie ODBC driver... 2 2 Systeeminstellingen in AbiFire5... 3 2.1 Aanmaken extern profiel...

Nadere informatie

Webapplicatie-generatie NIOC 2013

Webapplicatie-generatie NIOC 2013 Webapplicatie-generatie NIOC 2013 Eddy Luursema, Misja Nabben, Arnoud van Bers Research Group Model Based Information Systems Presentation Introduction M-BIS Data intensive systems Requirements Generation

Nadere informatie

APEX en JasperReports

APEX en JasperReports APEX en JasperReports een Dream Team! Spreker(s) : Datum : E-mail : Vincent Deelen 28 mei 2013 vincent.deelen@transfer-solutions.com WWW.TRANSFER-SOLUTIONS.COM Outline APEX en rapporten Oracle BI publisher

Nadere informatie

Les 15 : updaten van gegevens in de database (deel2).

Les 15 : updaten van gegevens in de database (deel2). Les 15 : updaten van gegevens in de database (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige lessen en documenten om informatie op te zoeken

Nadere informatie

SPTOOLS SHAREPOINT CONNECTOR -

SPTOOLS SHAREPOINT CONNECTOR - SPTOOLS SHAREPOINT CONNECTOR - 1/6 Inhoudsopgave 1. SPTOOLS... 3 WAT KAN HET?... 3 Document Browser...3 Document Bundels...3 Consistente Data Quality...3 SharePoint workflows en document goedkeuring...3

Nadere informatie

Inhoudsopgave. Hoofdstuk 1.JMS...2

Inhoudsopgave. Hoofdstuk 1.JMS...2 Inhoudsopgave Hoofdstuk 1.JMS...2 1.1.Inleiding...2 1.2.Messaging architectuur...3 1.2.1.Point to point domein...3 1.2.2.Publish/Subscribe domein...4 1.2.3.Synchrone - asynchrone verwerking...4 1.2.4.De

Nadere informatie

Sparse columns in SQL server 2008

Sparse columns in SQL server 2008 Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

Nadere informatie

SURFconext Cookbook. Het koppelen van Alfresco aan SURFconext. Versie: 1.0. Datum: 8 december 2013. 030-2 305 305 admin@surfnet.nl www.surfnet.

SURFconext Cookbook. Het koppelen van Alfresco aan SURFconext. Versie: 1.0. Datum: 8 december 2013. 030-2 305 305 admin@surfnet.nl www.surfnet. SURFconext Cookbook Het koppelen van Alfresco aan SURFconext Auteur(s): Frank Niesten Versie: 1.0 Datum: 8 december 2013 Radboudkwartier 273 3511 CK Utrecht Postbus 19035 3501 DA Utrecht 030-2 305 305

Nadere informatie

Model driven Application Delivery

Model driven Application Delivery Model driven Application Delivery Fast. Flexible. Future-proof. How Agis streamlines health procurement using Mendix Model driven Application Platform Mendix in a nutshell Mendix delivers the tools and

Nadere informatie

Handleiding Magento - Yuki

Handleiding Magento - Yuki Handleiding Magento - Yuki www.webwinkelfacturen.nl Samenvatting Dit is de handleiding voor de koppeling van Magento naar Yuki. De koppeling zorgt dat voor facturen in Magento automatisch een factuur of

Nadere informatie

Releasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken

Releasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken Releasen met een druk op de knop: Met behulp van Continuous Delivery sneller uw doel bereiken De business organisatie heeft altijd stijgende verwachtingen van uw IT organisatie. Meer dan ooit is het van

Nadere informatie

Software Design Document

Software Design Document Software Design Document Mathieu Reymond, Arno Moonens December 2014 Inhoudsopgave 1 Versiegeschiedenis 2 2 Definities 3 3 Introductie 4 3.1 Doel en Scope............................. 4 4 Logica 5 4.1

Nadere informatie

Functionaliteiten 4orange Connect

Functionaliteiten 4orange Connect Functionaliteiten 4orange Connect 4orange, 2014 Hogehilweg 24 1101 CD Amsterdam Zuidoost www.4orange.nl 2 4orange Connect: de nieuwste release van FileFrame 4orange Connect is de nieuwste release van FileFrame.

Nadere informatie

mypurchasing Adoptie van uw inkoopprocessen met mypurchasing Mei 2013 - Versie 1.0

mypurchasing Adoptie van uw inkoopprocessen met mypurchasing Mei 2013 - Versie 1.0 mypurchasing Adoptie van uw inkoopprocessen met mypurchasing Mei 2013 - Versie 1.0 1 Introductie... 3 2 Overzicht van scenario s... 4 2.1 myrequisitions... 4 2.2 myguidedbuy... 6 2.3 myconfirmation...

Nadere informatie

Beschrijving webmail Enterprise Hosting

Beschrijving webmail Enterprise Hosting Beschrijving webmail Enterprise Hosting In dit document is beschreven hoe e-mail accounts te beheren zijn via Enterprise Hosting webmail. Webmail is een manier om gebruik te maken van e-mail functionaliteit

Nadere informatie

Your view on business On your favorite device

Your view on business On your favorite device ANY2INFO OVER ONS Your view on business On your favorite device Any2info is een ICT-onderneming gespecialiseerd in de ontwikkeling van standaard software waarmee mobiele bedrijfsapps kunnen worden gebouwd

Nadere informatie

1 Dienstbeschrijving Lancom Workspace 365

1 Dienstbeschrijving Lancom Workspace 365 1 Dienstbeschrijving Lancom Workspace 365 2 Inleiding Lancom biedt haar klanten reeds sinds 2007 de mogelijkheid om te gaan werken van uit een Cloud model waarbij de servers in een datacenter van Lancom

Nadere informatie

Factsheet KICKSTARTERS Mirabeau

Factsheet KICKSTARTERS Mirabeau Factsheet KICKSTARTERS Mirabeau KICKSTARTERS We lanceren binnen twee maanden een nieuw digitaal platform waarmee u in hoog tempo business value genereert. De digitale transformatie is in volle gang. Consumenten

Nadere informatie

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise Inhoudsopgave 1. Voorbereiding... 4 2. Web Service Connector tool configuratie... 5 3. TaskCentre taak voor het aanmaken van

Nadere informatie

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB Connect Social Business Plan van Aanpak voor mijn stage bij ConnectSB Joey Kaan September 28, 2014 Inhoudsopgave 1 Achtergronden 1 2 Probleemstelling & Doelstelling 2 2.1 Leren Professioneel Functioneren..................

Nadere informatie

Handleiding Magento - Asperion

Handleiding Magento - Asperion Handleiding Magento - Asperion www.webwinkelfacturen.nl Samenvatting Dit is de handleiding voor de koppeling van Magento naar Asperion. De koppeling zorgt dat voor facturen in Magento automatisch een factuur

Nadere informatie

Korte uitleg gebruik Jira als bevindingregistratie systeem

Korte uitleg gebruik Jira als bevindingregistratie systeem MEMO Korte uitleg gebruik Jira als bevindingregistratie systeem Aan : Jira gebruikers Datum : 26 juli 2010 Van : Sogeti Jira beheer Versie : 1.1 INLEIDING Deze verkorte uitleg van het gebruik van Jira

Nadere informatie

Handleiding Magento - Factuursturen

Handleiding Magento - Factuursturen Handleiding Magento - Factuursturen www.webwinkelfacturen.nl Samenvatting Dit is de handleiding voor de koppeling van Magento naar Factuursturen. De koppeling zorgt dat voor facturen in Magento automatisch

Nadere informatie

Analyse Programmeertalen

Analyse Programmeertalen Analyse Programmeertalen De keuze van een programmeertaal mag niet onderschat worden. Het is dankzij deze taal dat de gebruiker interactie heeft met het complete systeem. Het is dus vanzelfsprekend dat

Nadere informatie

Indoor Navigation System

Indoor Navigation System Project Indoor Navigation System Onderwerp: Indoor Navigation System Document: Handleiding Ontwikkeltools Groep: EII6RTa Auteurs: 1. Jordi Betting 109277 2. Jerome Bos 113180 3. Theo Miltenburg 112883

Nadere informatie

Organiseer uw verschillende SOAP services in één scenario

Organiseer uw verschillende SOAP services in één scenario 1 Organiseer uw verschillende SOAP services in één scenario Wouter Luijten wouterluijten@creetion.com 2 Introductie Tijdens de implementatie van een proces heeft u vaak te maken met een veelvoud aan services.

Nadere informatie

Ceyenne Concentrator

Ceyenne Concentrator Ceyenne Concentrator Product Information Management, Publication Management, Order Management, Price Management, Content Interface, EDI, Web2Print, Marketing Campaign, Callcenter CRM Diract IT Opgericht

Nadere informatie

Powerpoint presentatie College 5 Gilbert van Lierop & Farshad Salamat

Powerpoint presentatie College 5 Gilbert van Lierop & Farshad Salamat Powerpoint presentatie College 5 Gilbert van Lierop & Farshad Salamat Wat is een database? Een verzameling van georganiseerde data Een database bestaat uit applicaties, SQL en het DBMS Watis eendbms? EenDBMS

Nadere informatie

Zelftest Java concepten

Zelftest Java concepten Zelftest Java concepten Document: n0838test.fm 22/03/2012 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST JAVA CONCEPTEN Om de voorkennis nodig

Nadere informatie

15 July 2014. Betaalopdrachten web applicatie gebruikers handleiding

15 July 2014. Betaalopdrachten web applicatie gebruikers handleiding Betaalopdrachten web applicatie gebruikers handleiding 1 Overzicht Steeds vaker komen we de term web applicatie tegen bij software ontwikkeling. Een web applicatie is een programma dat online op een webserver

Nadere informatie

Copyright IBS 2006. Nieuwbouw. Vereenvoudigd en versnelt Java ontwikkeling. Huub Cleutjens

Copyright IBS 2006. Nieuwbouw. Vereenvoudigd en versnelt Java ontwikkeling. Huub Cleutjens Nieuwbouw Vereenvoudigd en versnelt Java ontwikkeling Huub Cleutjens Inhoud IBS en Java Keuzes: taal / architectuur Productiviteit / arbeidsdeling IBS Java Development Accelerator Persistence UI Persistence

Nadere informatie

Selenium IDE Webdriver. Introductie

Selenium IDE Webdriver. Introductie Selenium IDE Webdriver Het Wielsem 10, 5231 BW s- Hertogenbosch, telefoon 073-6409311 e- mail info@testwork.nl internet http://www.testwork.nl 1 Inhoudsopgave 1 Inhoudsopgave... 2 2 Selenium IDE... 3 3

Nadere informatie

Opdrachtformulering (pagina 3 van 7)

Opdrachtformulering (pagina 3 van 7) Afstudeerovereenkomst van Tim Wils Bijlage 1 Opdrachtformulering (pagina 3 van 7) Dit project betreft een eigen framework (soort API) waarmee relatief gemakkelijk en in korte tijd eindproducten opgezet

Nadere informatie

PayCheckout Magento module

PayCheckout Magento module PayCheckout Magento module 1 Inhoudsopgave Installatie... 3 Compatibiliteit... 3 Best practice... 3 Installeren van de module... 3 Configuratie... 4 Webshop... 4 Webshop toevoegen... 4 Webshop Identifier

Nadere informatie

Zicht - Content Management Systeem een algemene beschrijving

Zicht - Content Management Systeem een algemene beschrijving Zicht - Content Management Systeem een algemene beschrijving Versie april/2008 Zicht nieuwe media ontwerpers 2008 1 Inleiding Een Content Management Systeem (CMS) is een webapplicatie waarmee je zonder

Nadere informatie

Gebruik van cryptografie voor veilige jquery/rest webapplicaties. Frans van Buul Inter Access

Gebruik van cryptografie voor veilige jquery/rest webapplicaties. Frans van Buul Inter Access Gebruik van cryptografie voor veilige jquery/rest webapplicaties Frans van Buul Inter Access 1 Frans van Buul frans.van.buul@interaccess.nl 2 De Uitdaging Rijke en veilige webapplicaties Een onveilig en

Nadere informatie

Een website maken met databasetoegang.

Een website maken met databasetoegang. Hoofdstuk 5 Een website maken met databasetoegang. In dit hoofdstuk gaan we het weblog dat je in hoofdstuk 4 hebt gemaakt verder uitbreiden. Een belangrijk onderdeel wordt toegevoegd aan de applicatie,

Nadere informatie

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous 2006-2007 Voorwoord 1 Inhoudsopgave 2 Hoofdstuk 1 Inleiding 3 Hoofdstuk 2 icafe 2.1 Het idee 2.2 Mogelijkheden

Nadere informatie

InterSmart: A Twitter based quiz application for PowerPoint audiences

InterSmart: A Twitter based quiz application for PowerPoint audiences Scriptie ingediend tot het behalen van de graad van PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT InterSmart: A Twitter based quiz application for PowerPoint audiences David De Beuckelaer bachelor elektronica-ict

Nadere informatie

Projectdocument Airport Suite. The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan

Projectdocument Airport Suite. The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan Projectdocument Airport Suite The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan December 2013 Contents 1. Overzicht... 4 2. Planning... 5

Nadere informatie

Handleiding gebruik Citymail

Handleiding gebruik Citymail Handleiding gebruik Citymail Versie : 4.0.1 Jaar : 2014 Auteur : Citymail BV / Charly Traarbach Citymail BV Copyright 1 Citymail BV, Nederland 2014 Niets uit dit document mag worden vermenigvuldigd en/of

Nadere informatie

ODS: Open Directory service. Wat is ODS?

ODS: Open Directory service. Wat is ODS? Wat is ODS? Wat is ODS? Geïntegreerde Meta-directorie voor OpenScape Office LX/MX/HX voor het zoeken van contacten in verschillende databasen en directories. Toegang verlenen naar verschillende directories.

Nadere informatie

SMART automation. Met de A.B. Entiteiten Interface. Ger Bos

SMART automation. Met de A.B. Entiteiten Interface. Ger Bos SMART automation Met de A.B. Entiteiten Interface Ger Bos Agenda Inleiding Wat is SMART automation Tools voor SMART automation A.B. Entiteiten Interface Alternatieven De praktijk van SMART automation Wat

Nadere informatie

Kennis na het volgen van de training. Na het volgen van deze training bent u in staat:

Kennis na het volgen van de training. Na het volgen van deze training bent u in staat: Training Trainingscode Duur Gepubliceerd Taal Type Leermethode Kosten SF2015V8 4 dagen 02/02/2015 Nederlands & Engels Developer, basis Invidueel & klassikaal Op aanvraag Deze training richt zich op het

Nadere informatie

Specificaties Front End voor de ONBETWIST Database

Specificaties Front End voor de ONBETWIST Database Specificaties Front End voor de ONBETWIST Database Deliverable 2.2 Hans Cuypers en Jan Willem Knopper Inleiding Binnen ONBETWIST zal een organisatie opgezet worden die zorg draagt voor de standaardisatie

Nadere informatie

HANDLEIDING TOOLS4EVER ISUPPORT ONLINE WEBOMGEVING

HANDLEIDING TOOLS4EVER ISUPPORT ONLINE WEBOMGEVING HANDLEIDING TOOLS4EVER ISUPPORT ONLINE WEBOMGEVING Inhoudsopgave 1. Belangrijkste spelregels... 3 2. Contact met tools4ever international support... 4 isupport webomgeving... 4 Eerste maal inloggen...

Nadere informatie

Curriculum Vitae. Duco is bij Quintor momenteel met een masterclass ASP.NET / MVC bezig.

Curriculum Vitae. Duco is bij Quintor momenteel met een masterclass ASP.NET / MVC bezig. Curriculum Vitae Duco Winterwerp Nationaliteit: Nederlandse Rijbewijs: ja (BE, AM) Website: www.duco.cc E-mailadres: duco@winterwerp.it Datum: februari Duco Winterwerp heeft Informatica gestudeerd aan

Nadere informatie

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 11 maart 2009. Versie 1.1.0

Technisch ontwerp. Projectteam 6. Project Web Essentials 11 maart 2009. Versie 1.1.0 Projectteam 6 Faculteit Natuur en Techniek Hogeschool Utrecht Projectleider: Hans Allis, hans.allis@student.hu.nl Technisch ontwerp Project "Web Essentials" 11 maart 2009 Versie 1.1.0 Teamleden: Armin

Nadere informatie

CaseMaster WS E-Commerce Webshop

CaseMaster WS E-Commerce Webshop CaseMaster WS E-Commerce Webshop CaseMaster Webshop Het aantal webshops groeit nog steeds en de ontwikkelingen hierin volgen elkaar in snel tempo op. Om succesvol te blijven, is het van belang dat uw software

Nadere informatie

StoreInfo App v2.0. 29,95 per maand

StoreInfo App v2.0. 29,95 per maand StoreInfo App v2.0 29,95 per maand De Storeinfo app voor SEOshop voorziet in de synchronisatie van producten, voorraden en orders tussen SEOshop en Storeinfo. De producten en voorraad worden vanuit Storeinfo

Nadere informatie

THE BIG CHALLENGE VAN DE KLANT DIE OP UW WEBSITE ZIT

THE BIG CHALLENGE VAN DE KLANT DIE OP UW WEBSITE ZIT THE BIG CHALLENGE VAN DE KLANT DIE OP UW WEBSITE ZIT Whitepaper the next best thing in customer communication: Skype for Business. Patrick Kusseneers, Product manager Voxtron Communication Center Ons Voxtron

Nadere informatie

Uitleg algemene structuur WTell

Uitleg algemene structuur WTell Uitleg algemene structuur WTell Brondocument C:\WebServer\Handleiding\WTellAlgemeen\WTellStructuurGlobaal.odt Versiebeheer Versie Datum Uitleg 1.0v 21-09-11 1e versie met uitleg globale structuur WTell

Nadere informatie

HANDLEIDING DMS Plugin Installatie, configuratie & werking

HANDLEIDING DMS Plugin Installatie, configuratie & werking HANDLEIDING DMS Plugin Installatie, configuratie & werking Dit document is de handleiding voor de installatie, configuratie en werking van de DMS Plugin. Versie 1-12/09/2005 Inhoudstafel 1 Installatie...

Nadere informatie

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB Connect Social Business Plan van Aanpak voor mijn stage bij ConnectSB Joey Kaan September 21, 2014 Inhoudsopgave 1 Achtergronden 4 2 Probleemstelling & Doelstelling 5 2.1 Leren Professioneel Functioneren..................

Nadere informatie

Met deze module heeft u de mogelijkheid om gemakkelijk, snel en efficiënt uw documenten als naslag in Unit 4 Multivers te koppelen.

Met deze module heeft u de mogelijkheid om gemakkelijk, snel en efficiënt uw documenten als naslag in Unit 4 Multivers te koppelen. Handleiding Office+ Introductie Met de module Office+ gaat een lang gekoesterde wens voor vele gebruikers van Unit 4 Multivers in vervulling: eenvoudig koppelen van documenten in relatiebeheer of documentmanagement

Nadere informatie

Capita Selecta Design Patterns voor administratieve applicaties

Capita Selecta Design Patterns voor administratieve applicaties Capita Selecta voor administratieve applicaties Bij afstudeerproject: Generiek framework voor administratieve toepassingen in een webgeörienteerde omgeving Henk van de Ridder 26 augustus 2006 Inhoud 26

Nadere informatie

Maximo Tips and Tricks

Maximo Tips and Tricks Maximo Tips and Tricks Agenda Tips & Tricks 1. Scherm lay-out on demand 2. Koppelen Excel en Maximo 3. Foto s toevoegen aan records 4. Type ahead functie 5. Scripting voor calculaties en validaties 6.

Nadere informatie

Project Professional 2010 of Project Web App (PWA) 2010?

Project Professional 2010 of Project Web App (PWA) 2010? of? De mogelijkheden van webgebaseerd projectmanagement Project biedt keuze en flexibiliteit met projectmanagement oplossingen op maat, voor individuen, teams en enterprises. In deze tabel ziet u een vergelijking

Nadere informatie

Beveiligingsbeleid Perflectie. Architectuur & Procedures

Beveiligingsbeleid Perflectie. Architectuur & Procedures Beveiligingsbeleid Perflectie Architectuur & Procedures 30 november 2015 Versiebeheer Naam Functie Datum Versie Dimitri Tholen Software Architect 12 december 2014 0.1 Dimitri Tholen Software Architect

Nadere informatie

Client Applicaties (Browser+Desktop) http/https. Apache Webserver. http proxy. WMS WFS Adm SLD Tomcat. Tomcat. GeoServer. PostGIS

Client Applicaties (Browser+Desktop) http/https. Apache Webserver. http proxy. WMS WFS Adm SLD Tomcat. Tomcat. GeoServer. PostGIS WMS voor Kadastrale kaart Limburg GEORZ-lab Datum: 17 juli 2009 Auteur: GEORZ-lab, Just van den Broecke Versie: 2 Contact: Ebrahim Hemmatnia (Adviseur PPI GEO, Kadaster), tel. 088 183 22 16. Inleiding

Nadere informatie

Inrichting Systeem: Locaties & Toegang

Inrichting Systeem: Locaties & Toegang Inrichting Systeem: Locaties & Toegang EasySecure International B.V. +31(0)88 0000 083 Info@EasySecure.nl Support.EasySecure.nl v2.0.11 22-09-2014 In deze handleidingen worden de volgende functies binnen

Nadere informatie

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren Om eens wat ervaring op te doen met de Windows Azure Marketplace heb ik een publieke en gratis databron gekozen

Nadere informatie

Software Test Document

Software Test Document Software Test Document PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie

Nadere informatie

Software Design Document

Software Design Document Software Design Document GameTrac Versie Datum Auteur(s) Opmerking 1.0 11/11/10 Matthijssens Roeland Eerste versie 1.1 25/11/10 Matthijssens Roeland Uses cases toegevoegd 1.1 11/12/10 Matthijssens Roeland

Nadere informatie

Data quality tracking tool

Data quality tracking tool Data quality tracking tool Stageproject Over data cleansing werk Eén van de onderdelen van werk rond datakwaliteit uitgevoerd door Kapernikov is het systematisch oplossen van gedetecteerde datafouten in

Nadere informatie

RACKBOOST Hosted Exchange. Mobiel, veilig en eenvoudig. hosting support consulting

RACKBOOST Hosted Exchange. Mobiel, veilig en eenvoudig. hosting support consulting RACKBOOST Hosted Exchange Mobiel, veilig en eenvoudig hosting support consulting RACKBOOST Hosted Exchange RACKBOOST, SINDS 1999 TOONAANGEVEND RACKBOOST is sinds 1999 een toonaangevende Belgische leverancier

Nadere informatie

BOM s horen niet in spreadsheets

BOM s horen niet in spreadsheets BOM s horen niet in spreadsheets Innoveer met vertrouwen, wetende dat iedereen de juiste versie heeft van de BOM. Alles wat je nodig hebt om je product te bouwen De bill of materials (BOM) bevat de onderdelen

Nadere informatie

SURFconext Cookbook. Het koppelen van LimeSurvey aan SURFconext. Versie: 1.0. Datum: 4 december 2013. 030-2 305 305 admin@surfnet.nl www.surfnet.

SURFconext Cookbook. Het koppelen van LimeSurvey aan SURFconext. Versie: 1.0. Datum: 4 december 2013. 030-2 305 305 admin@surfnet.nl www.surfnet. SURFconext Cookbook Het koppelen van LimeSurvey aan SURFconext Auteur(s): Frank Niesten Versie: 1.0 Datum: 4 december 2013 Radboudkwartier 273 3511 CK Utrecht Postbus 19035 3501 DA Utrecht 030-2 305 305

Nadere informatie

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB

Connect Social Business. Plan van Aanpak voor mijn stage bij ConnectSB Connect Social Business Plan van Aanpak voor mijn stage bij ConnectSB Joey Kaan September 29, 2014 Inhoudsopgave 1 Achtergronden 1 2 Probleemstelling & Doelstelling 2 2.1 Leren Professioneel Functioneren..................

Nadere informatie

The OSI Reference Model

The OSI Reference Model Telematica Applicatielaag Hoofdstuk 16, 17 Applicatielaag 4Bevat alle toepassingen die van het netwerk gebruik maken n E-mail n Elektronisch nieuws n WWW n EDI (Electronic Data Interchange) n Napster,

Nadere informatie

WordPress in het Kort

WordPress in het Kort WordPress in het Kort Een website maken met Wordpress. In minder dan één uur online! Inclusief installatie van een thema en plugins Alle rechten 2013, Rudy Brinkman, BrinkhostDotCom, http://www.brinkhost.nl

Nadere informatie

Implementatiekosten en baten van SURFconext. Versie: 0.5 Datum: 06/06/2013 Door: Peter Clijsters

Implementatiekosten en baten van SURFconext. Versie: 0.5 Datum: 06/06/2013 Door: Peter Clijsters Implementatiekosten en baten van SURFconext Versie: 0.5 Datum: 06/06/2013 Door: Peter Clijsters Dit document geeft een antwoord op de vraag hoeveel een aansluiting op SURFconext kost. Introductie... 1

Nadere informatie

Acht stappen voor JSF

Acht stappen voor JSF Acht stappen voor JSF Inleiding In deze tutorial zullen we JSF (Java server faces) installeren. Wat we niet beschrijven is hoe te werken met JSF, over dit onderwerp zijn er genoeg boeken en internetsites

Nadere informatie

WT-Fotoalbum, WT-Catalogus en WT-Artikelen... 3. WT-Webwinkel... 3

WT-Fotoalbum, WT-Catalogus en WT-Artikelen... 3. WT-Webwinkel... 3 Inhoudsopgave Versie 2.0.0... 2 Algemeen... 2... 2 WT-Content... 3... 3 WT-Nieuws... 3... 3 WT-Fotoalbum, WT-Catalogus en WT-Artikelen... 3... 3 WT-Webwinkel... 3... 3 WT-Contact... 4... 4 Versie 2.0.1...

Nadere informatie

PRESTATIESITE WEBPAKKET

PRESTATIESITE WEBPAKKET PRESTATIESITE WEBPAKKET PRESTATIESITE Wij hebben al onze ervaring gebruikt om een gestandaardiseerd webpakket te ontwikkelen met een lay-out welke de focus heeft op leads en new business. Op deze wijze

Nadere informatie

Uitgebreid voorstel Masterproef Informatica. Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent

Uitgebreid voorstel Masterproef Informatica. Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent HoGent Uitgebreid voorstel Masterproef Informatica Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent Datum: Naam student: Glenn Jacob Interne promotor: Wim Van den Breen In

Nadere informatie

HANDLEIDING IMPACTXRM MOBILE. IMPACTXRM NV Zuidleiestraat 12/1b 9880 Aalter 0032 (50)960070 info@impactxrm.com. Bijgewerkt 29/07/2015 Versie 1.2.

HANDLEIDING IMPACTXRM MOBILE. IMPACTXRM NV Zuidleiestraat 12/1b 9880 Aalter 0032 (50)960070 info@impactxrm.com. Bijgewerkt 29/07/2015 Versie 1.2. HANDLEIDING IMPACTXRM MOBILE IMPACTXRM NV Zuidleiestraat 12/1b 9880 Aalter 0032 (50)960070 info@impactxrm.com Bijgewerkt 29/07/2015 Versie 1.2.1 INHOUD INHOUD... 1 ALGEMEEN Filosofie... 2 INSTALLATIE...

Nadere informatie

Is APEX a worthy substitute for Oracle Forms?

Is APEX a worthy substitute for Oracle Forms? your oracle solu+ons partner Is APEX a worthy substitute for Oracle Forms? APEX for mission critical applications: the Groupm business-case By Ronny Boeykens & Stijn Van Raes iadvise o Opgericht in 2004

Nadere informatie

Software Test Plan. PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015

Software Test Plan. PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Software Test Plan PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie 1 Versie

Nadere informatie

APEX Templates. OGH APEX dag 30 maart. Art Melssen. 31 maart 2010

APEX Templates. OGH APEX dag 30 maart. Art Melssen. 31 maart 2010 APEX Templates OGH APEX dag 30 maart Art Melssen Introductie Over de spreker 4 jaar APEX ervaring / 7 jaar Oracle 10 jaar web technologie ervaring APEX trajecten o.a. bij Centraal Boekhuis en eboekhuis

Nadere informatie

Project verslag. Erwin Hannaart Sander Tegelaar 61849 62407

Project verslag. Erwin Hannaart Sander Tegelaar 61849 62407 Project verslag Erwin Hannaart Sander Tegelaar 61849 62407 I4C2 I4C1 Inhoudsopgave Website design... 3 Website functies... 4 Website index pagina... 5 Website product pagina... 7 Website registreren pagina...

Nadere informatie

Ceyenne Concentrator

Ceyenne Concentrator Ceyenne Concentrator Product Information Management, Publication Management, Order Management, Price Management, Content Interface, EDI, Web2Print, Marketing Campaign, Callcenter CRM Diract IT Opgericht

Nadere informatie

XAMPP Web Development omgeving opzetten onder Windows.

XAMPP Web Development omgeving opzetten onder Windows. XAMPP Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 1 Xampp downloaden... 2 2 Installatie Xampp 1.7.4 op externe harddisk... 3 3 XAMPP herconfiguren...

Nadere informatie