Probleem verholpen waardoor de voorraadwijzigingen veroorzaakt door wijzigingen aan orders niet goed door kwamen.
Sinds Q-line v8.0.0 kunnen snelknopgroepen per filiaal beheerd werden. Deze lokaal beheerde snelknoppen worden nu ook via de API teruggegeven.
Optimalisatie waardoor overhead van API calls sterk gereduceerd is.
Na het voltooien van een aanvraag is de API nu sneller gereed om de volgende aanvraag af te handelen.
De service heeft nu de mogelijkheid om meerdere verzoeken tegelijk af te handelen.
Het tegelijk afhandelen van verzoeken moet via de configuratie eerst geactiveerd worden.
De volgende instellingen kunnen nu vanuit het config bestand ingesteld worden dat via de --config optie wordt meegegeven. Eventuele commandline opties gaan voor wat er in het config bestand staat. Hieronder alle mogelijke instellingen met hun standaard waardes.
[Settings]
output= ; --output <filenaam>
ssl=1 ; omgekeerde van --nossl
cgi=1 ; omgekeerde van --standalone
port=18083 ; --port
sync_marker_limit=1000 ; --sync_marker_limit
fast_load=1 ; omgekeerde van --nofastload
profiler=0 ; --profile
debug= ; --debug <filenaam>
min_workers=1
max_workers=1
Als max_workers op 1 staat zal de API effectief helemaal geen workers gebruiken en daarmee ook de overhead van het doorgeven van aanvragen naar de workers elimineren.
Om een crash te voorkomen is er een aanpassing gedaan in de functie die tafels claimt voor een bepaalde werkplek.
ERROR: duplicate key value violates unique constraint "kassastatus_filiaal_nr_tafel_nr_key"
Optimalisatie waardoor overhead van API calls sterk gereduceerd is.
De functie getShifts() retourneert nu ook de evt. inhoud van de "Betreft"-regel, via het veld reference.
Nieuwe functie deliverOrderV2 die het mogelijk maakt om deelleveringen te maken. Zo is het mogelijk om meerdere pakbonnen van een order te maken.
Nieuwe functie getPackingSlipsByOrder die de pakbon(nen) van de opgegeven order retourneert.
Nieuwe functie deliverOrderV2 die het mogelijk maakt om deelleveringen te maken. Zo is het mogelijk om meerdere pakbonnen van een order te maken.
Nieuwe functie getPackingSlipsByOrder die de pakbon(nen) van de opgegeven order retourneert.
Het is nu ook mogelijk om bij een pinbetaling de gerelateerde transactiedetails op te vragen. Er moet wel autorisatie gegeven worden voor toegang tot deze gegevens. U kunt bekijken welke autorisatie u hebt op uw Partnerpagina.
De API-functie getProducts retourneert nu maximaal syncMarkerLimit aantal articles ipv. products. Echter, als het eerste product meer dan deze limiet aan articles bevat, dan zal dit product in zijn geheel geretourneerd worden. Anders kun je in de situatie terechtkomen waarin getProducts niets meer retourneert.
De API-functie getProducts retourneert nu maximaal syncMarkerLimit aantal articles ipv. products. Echter, als het eerste product meer dan deze limiet aan articles bevat, dan zal dit product in zijn geheel geretourneerd worden. Anders kun je in de situatie terechtkomen waarin getProducts niets meer retourneert.
De API-functie getProducts icm. een filter zoals onlyActive en een syncMarker gaven niet altijd alle gewijzigde artikelen terug sinds de opgegeven syncMarker. Er konden artikelen overgeslagen worden in het resultaat.
De API-functie getProducts icm. een filter zoals onlyActive en een syncMarker gaven niet altijd alle gewijzigde artikelen terug sinds de opgegeven syncMarker. Er konden artikelen overgeslagen worden in het resultaat.
De API-functie getButtonLayout retourneert nu een lay-out gebaseerd op de aanname dat hoofdgroepen altijd boven de subgroepen en artikelknoppen getoond worden. Zoals ook het geval is bij de Android app.
De API-functie getButtonLayout retourneert nu een lay-out gebaseerd op de aanname dat hoofdgroepen altijd boven de subgroepen en artikelknoppen getoond worden. Zoals ook het geval is bij de Android app.
Bij elke API-functie die terminal als parameter heeft, wordt het Laatste ping tijdstip nu ook bijgewerkt.
Bij elke API-functie die terminal als parameter heeft, wordt het Laatste ping tijdstip nu ook bijgewerkt.
Nieuwe functies voor het beheren van offertes:
getProposals - haal lijst van offertes opgetProposal - haal enkele offerte opsaveProposal - sla nieuwe offerte op of werk bestaande offerte bijcancelProposal - annuleer offerte, indien mogelijkcreateOrderFromProposal - maak order van offerte, indien mogelijkcreateInvoiceFromProposal - maak factuur van offerte, indien mogelijkNieuwe functie getArticleGroupChanges() die elke gewijzigde artikelgroep teruggeeft sinds de vorige syncMarker. Het is ook mogeijk om te filteren op bepaalde groupNumbers. Het verschil met getArticleGroups is dat de laatstgenoemde de artikelgroepen in de hiërarchische structuur retourneert, terwijl deze nieuwe functie de artikelgroepen "plat" retourneert. Gebruik de parentGroupNumber om te bepalen waar de artikelgroep moet zitten.
Nieuwe functie getArticleGroupChanges() die elke gewijzigde artikelgroep teruggeeft sinds de vorige syncMarker. Het is ook mogeijk om te filteren op bepaalde groupNumbers. Het verschil met getArticleGroups is dat de laatstgenoemde de artikelgroepen in de hiërarchische structuur retourneert, terwijl deze nieuwe functie de artikelgroepen "plat" retourneert. Gebruik de parentGroupNumber om te bepalen waar de artikelgroep moet zitten.
Het was mogelijk dat de BTW-percentages van artikelen in de componentArticleList onjuist waren, ook konden artikelen onterecht meerdere keren voorkomen. Dit is opgelost.
Het was mogelijk dat de BTW-percentages van artikelen in de componentArticleList onjuist waren, ook konden artikelen onterecht meerdere keren voorkomen. Dit is opgelost.
Het was mogelijk dat de BTW-percentages van artikelen in de componentArticleList onjuist waren, ook konden artikelen onterecht meerdere keren voorkomen. Dit is opgelost.
De regels van kassabonnen, orders en facturen bevatten nu ook evt. metadata behorende bij Webhooks. Dit gaat om de volgende optionele eigenschappen:
line.webhookData.webhookLineId - De UUID van de regel zoals via de Webhooks gecommuniceerd.line.webhookData.webhookConsumerId - (optioneel) De UUID van de Webhook Consumer (externe applicatie) indien deze regel door deze externe applicatie is toegevoegd.line.webhookData.webhookExternalDiscount.discountId - (optioneel) De UUID van de korting als die via een Webhook Consumer is toegevoegd.line.webhookData.webhookExternalDiscount.discountDescription - (optioneel) Omschrijving van de externe korting indien die bij het toevoegen is opgegeven.line.webhookData.webhookExternalDiscount.webhookConsumerId - (optioneel) De UUID van de Webhook Consumer (externe applicatie) die deze korting heeft toegevoegd.line.webhookData.webhookExternalDiscount.discountPercentage - (optioneel) Het extern toegepaste kortingspercentage.line.webhookData.webhookExternalDiscount.discountAmount - (optioneel) Het extern toegepaste kortingsbedrag.De regels van kassabonnen, orders en facturen bevatten nu ook evt. metadata behorende bij Webhooks. Dit gaat om de volgende optionele eigenschappen:
line.webhookData.webhookLineId - De UUID van de regel zoals via de Webhooks gecommuniceerd.line.webhookData.webhookConsumerId - (optioneel) De UUID van de Webhook Consumer (externe applicatie) indien deze regel door deze externe applicatie is toegevoegd.line.webhookData.webhookExternalDiscount.discountId - (optioneel) De UUID van de korting als die via een Webhook Consumer is toegevoegd.line.webhookData.webhookExternalDiscount.discountDescription - (optioneel) Omschrijving van de externe korting indien die bij het toevoegen is opgegeven.line.webhookData.webhookExternalDiscount.webhookConsumerId - (optioneel) De UUID van de Webhook Consumer (externe applicatie) die deze korting heeft toegevoegd.line.webhookData.webhookExternalDiscount.discountPercentage - (optioneel) Het extern toegepaste kortingspercentage.line.webhookData.webhookExternalDiscount.discountAmount - (optioneel) Het extern toegepaste kortingsbedrag.Nieuwe artikeleigenschappen:
article.course - Toont aan bij welke gang het artikel hoort, inclusief de naam, afkorting en volgnummer van de gang.article.specialPrice - Geeft aan of er een speciale prijsafhandeling bij het artikel hoort, zoals "Gratis", "Vraagprijs (positief)" of "Vraagprijs (negatief)".article.showPreparationMethodsDirectly - Geeft aan of de bereidingswijzen direct geopend moeten worden bij het selecteren van het artikel.article.showPreparationMethodsPerGroup - Geeft aan of de bereidingswijzen per groep getoond moeten worden of allemaal in één keer.Nieuwe artikeleigenschappen:
article.course - Toont aan bij welke gang het artikel hoort, inclusief de naam, afkorting en volgnummer van de gang.article.specialPrice - Geeft aan of er een speciale prijsafhandeling bij het artikel hoort, zoals "Gratis", "Vraagprijs (positief)" of "Vraagprijs (negatief)".article.showPreparationMethodsDirectly - Geeft aan of de bereidingswijzen direct geopend moeten worden bij het selecteren van het artikel.article.showPreparationMethodsPerGroup - Geeft aan of de bereidingswijzen per groep getoond moeten worden of allemaal in één keer.Een verkooporder (order) bevat nu de eigenschappen onDeliveryUrl en onInvoiceUrl. De URL's die je hieraan meegeeft zullen in MplusKASSA geopend worden in de standaardbrowser op het moment dat je resp. een pakbon van de verkooporder maakt of een factuur.
Een omzetgroepnummer (turnoverGroup) buiten het ondersteunde bereik (0-999) wordt nu geweigerd.
Een omzetgroepnummer (turnoverGroup) buiten het ondersteunde bereik (0-999) wordt nu geweigerd.
Een omzetgroepnummer (turnoverGroup) buiten het ondersteunde bereik (0-999) wordt nu geweigerd.
getCashCountList retourneert nu ook de extra details van elke extra werkplek die geteld is, via cashCountExtraWorkplaceList.
getCashCountList retourneert nu ook de extra details van elke extra werkplek die geteld is, via cashCountExtraWorkplaceList.
Bestellingen met gewichtsartikelen die via de API werden bijgewerkt, werden altijd tegengeboekt en weer opgeboekt, ook al waren ze inhoudelijk niet gewijzigd.
Bestellingen met gewichtsartikelen die via de API werden bijgewerkt, werden altijd tegengeboekt en weer opgeboekt, ook al waren ze inhoudelijk niet gewijzigd.
De imageList van een artikel is nu gelijk voor alle artikelen van een product.
De imageList van een artikel is nu gelijk voor alle artikelen van een product.
De eigenschappen priceIncl, priceExcl, originalPriceIncl en originalPriceExcl worden nu waar ontbrekend ook ingevuld.
De imageList van een artikel is nu gelijk voor alle artikelen van een product.
De eigenschappen priceIncl, priceExcl, originalPriceIncl en originalPriceExcl worden nu waar ontbrekend ook ingevuld.
De eigenschappen priceIncl, priceExcl, originalPriceIncl en originalPriceExcl worden nu waar ontbrekend ook ingevuld.
De functie getReceipts retourneert nu per receipt ook evt. ingevuld antwoorden op vragen die tijdens het afrekenen gesteld zijn. Deze antwoorden (en de gestelde vraag) zijn terug te vinden in de lijst receipt.answerList.
De functie getReceipts retourneert nu per receipt ook evt. ingevuld antwoorden op vragen die tijdens het afrekenen gesteld zijn. Deze antwoorden (en de gestelde vraag) zijn terug te vinden in de lijst receipt.answerList.
De functie getReceipts retourneert nu per receipt ook evt. ingevuld antwoorden op vragen die tijdens het afrekenen gesteld zijn. Deze antwoorden (en de gestelde vraag) zijn terug te vinden in de lijst receipt.answerList.
Functie setSubTableCount toegevoegd.
Deze functie stelt het maximum aantal subtafels van een tafel in.
creditInvoice is nu geïmplementeerd. Het annuleren van een factuur zorgt ervoor dat er een creditfactuur van de geannuleerde factuur aangemaakt wordt.
cancelInvoice is nu geïmplementeerd. Het annuleren van een factuur zorgt ervoor dat er een creditfactuur van de geannuleerde factuur aangemaakt wordt.
getArticleGroups retourneert nu ook, waar van toepassing, de afbeelding van een artikelgroep (via image).
Nieuwe functies: getRetailSpaceRental() en getRetailSpaceRentals().
Nieuwe functies: getRetailSpaceRental() en getRetailSpaceRentals().
Nieuwe functies: getRetailSpaceRental() en getRetailSpaceRentals().
Nieuwe eigenschappen: order.orderBarcode, receipt.receiptNumber, receipt.receiptBarcode, invoice.invoiceBarcode, saveInvoice.info.invoiceNumber, saveInvoice.info.invoiceBarcode, articleStockHistory.invoiceBarcode, articleStockHistory.receiptBarcode.
Nieuwe eigenschappen: order.orderBarcode, receipt.receiptNumber, receipt.receiptBarcode, invoice.invoiceBarcode, saveInvoice.info.invoiceNumber, saveInvoice.info.invoiceBarcode, articleStockHistory.invoiceBarcode, articleStockHistory.receiptBarcode.
Nieuwe functie getTicketCounterSales().
Nieuwe eigenschap: line.data.turnoverGroupAccountNumber. Deze bevat het rekeningnummer voor de desbetreffende omzetgroep en voor het desbetreffende filiaal.
Nieuwe eigenschap: line.data.turnoverGroupAccountNumber. Deze bevat het rekeningnummer voor de desbetreffende omzetgroep en voor het desbetreffende filiaal.
Nieuwe functies getPurchaseOrders, getPurchaseDeliveries, savePurchaseOrder en savePurchaseDelivery, om respectievelijke inkoopopdrachten en inkoopleveringen op te vragen en inkoopopdrachten en inkoopleveringen aan te maken.
getInvoices en getReceipts retourneren nu ook orderIds indien de facturen of kassabonnen afkomstig zijn van verkooporder(s) of bestelling(en). Ook worden extOrderIds geretourneerd indien de orders die ook hadden.
getInvoices en getReceipts retourneren nu ook orderIds indien de facturen of kassabonnen afkomstig zijn van verkooporder(s) of bestelling(en). Ook worden extOrderIds geretourneerd indien de orders die ook hadden.
Nieuwe functie getLicenceInformation waarmee informatie over de licentie opgevraagd kan worden, waaronder welke modules geactiveerd zijn.
Het is nu ook mogelijk om priceGroupList en salesPriceList te importeren via createProduct en updateProduct.
Wanneer de ophalen-en-bezorgen module aan staat, dan zal er bij een nieuwe order een bestelbon worden afgedrukt in plaats van een order-bon.
Artikelkoppelingen zijn nu uit te lezen via de API via de eigenschap article.linkedArticleList.
De functie getLicenseInformation retourneert nu ook de waarde isGKS bij elk filiaal, welke aangeeft of het gelicenseerde filiaal wel of niet een GKS-licentie heeft.
Bij het initieel verbinding maken met de database wordt nu ook de geïnstalleerde versie van PostgreSQL en van het Q-line schema getoond in het API-log.
Bij het opvragen van het ?docs of ?wsdl bestand via de API wordt daarvoor nu ook een duidelijke regel in het API-log geschreven.
Serving wsdl-documentation.htmlServing MplusQapi.wsdl.Na het voltooien van een aanvraag is de API nu sneller gereed om de volgende aanvraag af te handelen.
De service heeft nu de mogelijkheid om meerdere verzoeken tegelijk af te handelen.
Het tegelijk afhandelen van verzoeken moet via de configuratie eerst geactiveerd worden.
De volgende instellingen kunnen nu vanuit het config bestand ingesteld worden dat via de --config optie wordt meegegeven. Eventuele commandline opties gaan voor wat er in het config bestand staat. Hieronder alle mogelijke instellingen met hun standaard waardes.
[Settings]
output= ; --output <filenaam>
ssl=1 ; omgekeerde van --nossl
cgi=1 ; omgekeerde van --standalone
port=18083 ; --port
sync_marker_limit=1000 ; --sync_marker_limit
fast_load=1 ; omgekeerde van --nofastload
profiler=0 ; --profile
debug= ; --debug <filenaam>
min_workers=1
max_workers=1
Als max_workers op 1 staat zal de API effectief helemaal geen workers gebruiken en daarmee ook de overhead van het doorgeven van aanvragen naar de workers elimineren.
Nieuwe functies tbv. subtafels (bijv. tafel 1A, 1B, etc):
getTableListV2getTableOrderCourseListV2requestNextTableOrderCourseV2cancelTableOrderV2printTableReceiptV2Nieuwe velden tbv. subtafels:
order.tableSubNumberMoveTableOrderRequest.tableSubNumberGetTableOrderRequest.tableSubNumberReleaseTableRequest.tableSubNumberGetTableOrderCourseListResponse.tableSubNumberAls deze nieuwe velden niet worden opgegeven bij het aanroep van een functie, dan wordt automatisch subtafel 1 (A) gebruikt.
De eigenschap product.description wordt nooit meer gebaseerd op de description van een niet-actief artikel, als er ook actieve artikelen aanwezig zijn.
De eigenschap product.description wordt nooit meer gebaseerd op de description van een niet-actief artikel, als er ook actieve artikelen aanwezig zijn.
De eigenschap vatGroupList is nu altijd aanwezig, ook als de inhoud verder leeg is.
Onder speciale combinatie was het mogelijk dat createProduct en updateProduct vastliepen.
Onder speciale combinatie was het mogelijk dat createProduct en updateProduct vastliepen.
Optimalisatie waardoor overhead van API calls sterk gereduceerd is.
Probleem opgelost met getRelations.
Probleem opgelost met getPurchaseOrders en getPurchaseDeliveries.
Probleem opgelost met getPurchaseOrders en getPurchaseDeliveries.
getReceiptsByCashCount kon meer kassabonnen teruggeven dan de bedoeling was. Ook kassabonnen van andere filialen die toevallig overlap hadden met de gekozen kastelling op het gewenste filiaal werden geretourneerd.
getReceiptsByCashCount kon meer kassabonnen teruggeven dan de bedoeling was. Ook kassabonnen van andere filialen die toevallig overlap hadden met de gekozen kastelling op het gewenste filiaal werden geretourneerd.
De eigenschappen order.lineList.line.pluNumber, .supplierRelationNumber en .supplierArticleNumber worden nu ook ingevuld.
De recente toevoeging van turnoverGroupAccountNumber veroorzaakte een foutmelding als hij niet ingevuld was.
De recente toevoeging van turnoverGroupAccountNumber veroorzaakte een foutmelding als hij niet ingevuld was.
Probleem opgelost dat kon optreden bij het bepalen van een vrij articleNumber bij het toevoegen van nieuwe artikelen.
Probleem opgelost dat kon optreden bij het bepalen van een vrij articleNumber bij het toevoegen van nieuwe artikelen.
Probleem opgelost dat kon optreden bij het bepalen van een vrij articleNumber bij het toevoegen van nieuwe artikelen.
Als bij het aanbetalen van een order het totaal van de betaalwijzen lager is dan het bedrag dat aanbetaald gaat worden retourneert de API nu een fout.
Als je saveInvoice aanriep zonder financialDate, werd niet automatisch de huidige boekdag gepakt, maar kreeg je een foutmelding: Voorwaarde niet voldaan: BoekDag != TDate()
Als je saveInvoice aanriep zonder financialDate, werd niet automatisch de huidige boekdag gepakt, maar kreeg je een foutmelding: Voorwaarde niet voldaan: BoekDag != TDate()
Probleem opgelost waardoor er een fout optrad als er een tafel verplaatst werd. De fout trad alleen op als het afdrukken van verplaatsbonnen aanstond en er gebruik werd gemaakt van de recent geintroduceerde "Voeg toe aan" functie in de bestelbon-afdrukconfiguratie.
Probleem verholpen waardoor de API kon crashen met een stackoverflow.