Point de vente

Ekylibre utilise Pastèque comment logiciel de point de vente. Il implémente l'API serveur pour qu'il puisse être utilisé directement depuis une appli Pastèque cliente.

Ekylibre doit pouvoir échanger avec les POS Pastèque. Pour cela il doit être compatible avec l'API v5 de Pastèque et les concepts généraux.

Méthodes

Principe général

Un middleware (rack) redirigera les requêtes Pastèque vers les bons contrôleurs. Exemple de mise en place du middleware :

namespace :pasteque do
  namespace :v5 do
    pasteque_v5
  end
end

Le middleware permettra de convertir les « requêtes Pastèque » en « requêtes Rails ». Voir rack-proxy ou rack-rewrite.

Authentification

Pour s'authentifier sur le serveur, il faut transmettre le nom d'utilisateur et mot de passe à chaque requête via les paramètres user et password.

Correspondances API et ressources

Chaque API de pastèque correspond à un contrôleur REST d'Ekylibre se trouvant dans /pasteque/v5/. Le nom du contrôleur sous Ekylibre est correspond au nom de l'API Pastèque en remplaçant le “API” final par “Controller”. Exemple : VersionAPIVersionController, CurrenciesAPICurrenciesController, CashMvtsAPICashMvtsController.

Ressource Pastèque Définition Modèle Ekylibre
VersionAPI Version de l'API -
CashRegistersAPI Caisse enregistreuse Cash
UsersAPI Utilisateurs User
RolesAPI Rôles (avec droits) Role
PlacesAPI Places et tables dans un restaurant Product (filtrés)
CurrenciesAPI Monnaies des types de vente disponibles Nomenclature::Currency définies par les types de ventes utilisables
TaxesAPI TVA et taux TaxCategory ~ Nomenclature::TaxNature, Taxes ~ Taxes
TariffAreasAPI Zones tarifaires TariffArea ~ Catalog, Price ~ CatalogPrice
ResourcesAPI Image, texte…
CategoriesAPI Catégories d'articles ProductNatureCategory
ProductsAPI Article à la vente ProductNatureVariant
ImagesAPI Images Attaque différents modèles
CompositionsAPI Packs de produits
CashesAPI Session CashSession
DiscountProfilesAPI Profils de remise
CustomersAPI Clients Entity.clients
LocationsAPI Lieux de stockage Product (filtrés)
StocksAPI Niveaux de stock Product
AttributesAPI Attributs d'options
TicketsAPI Affair
CashMvtsAPI CashTransfer

CashRegisters

Les Cash de nature “cash_box” sous Ekylibre doivent disposer de 2 informations de plus :

  • container_id (facultatif) référençant un produit (comme une BuildingDivision par exemple) qui précise l'endroit où se trouve la caisse.
  • last_number contenant le dernier numéro de ticket utilisé pour la caisse. (Même principe que dans Sequence)

Users

La notion de card sous Pastèque n'est pas encore défini et ne sera pas implémenté dans l'immédiat.

Pour la mise à jour du mot de passe, il suffit d'utiliser la méthode update :

user = User.find_for_authentication(email: email)
if user and user.valid_password?(old_password)
  user.password = new_password
  user.password_confirmation = new_password
  user.save!
end

Rôles

Il existe la correspondance des tables/modèles entre Pastèque et Ekylibre via un transcodage des droits.

Les permissions sont attendues sous forme de liste de noms séparés par des espaces :

fr.pasteque.pos.panels.JPanelCloseMoney fr.pasteque.pos.panels.JPanelPrinter
Liste des droits
ID Nom Droit Ekylibre
button.opendrawer Ouvrir le tiroir caisse
button.openmoney Ouvrir la caisse open-cash_sessions
button.print Imprimer un aperçu de ticket
fr.pasteque.pos.config.JPanelConfiguration Accéder à l'écran de configuration
fr.pasteque.pos.customers.CustomersPayment Accéder à l'écran de règlement client
fr.pasteque.pos.panels.JPanelCloseMoney Clôturer la caisse close-cash_sessions
fr.pasteque.pos.panels.JPanelPayments Effectuer des mouvements de caisse
fr.pasteque.pos.panels.JPanelPrinter Accéder à l'écran d'afficheur client et d'imprimante
fr.pasteque.pos.panels.ReprintZTicket Rechercher et imprimer d'anciens tickets Z
fr.pasteque.pos.sales.JPanelTicketEdits Accéder à l'écran d'édition des ventes write-sales
fr.pasteque.pos.sales.JPanelTicketSales Accéder à l'écran des ventes read-sales
Menu.BackOffice Ouvrir l'interface de gestion
Menu.ChangePassword Changer le mot de passe de l'utilisateur
payment.cash Autoriser le paiement en espèces
payment.cheque Autoriser le paiement par chèque
payment.debt Autoriser le paiement par dette
payment.free Autoriser le paiement gratuit
payment.magcard Autoriser le paiement par carte bleue
payment.paper Autoriser le paiement par coupon
payment.prepaid Autoriser le paiement par pré-paiement
refund.cash Autoriser le remboursement en espèces
refund.cheque Autoriser le remboursement par chèque
refund.magcard Autoriser le remboursement par carte bleue
refund.paper Autoriser le remboursement par coupon
refund.prepaid Autoriser le remboursement par pré-paiement
sales.ChangeTaxOptions Changer de taxe
sales.EditLines Modifier les lignes d'un ticket
sales.EditTicket Modifier un ticket
sales.PrintTicket Imprimer un ticket
sales.RefundTicket Rembourser un ticket
sales.Total Enregistrer le paiement d'un ticket

Places

Sous Ekylibre, nous avons l'équivalence avec les BuildingDivision qui représente des salles (floors). Pour le mode “Restaurant” de Pastèque, le niveau en-dessous est le niveau “table”.

Pour cela, il est nécessaire de rajouter une variété “table”. (À ajouter dans la nomenclature pour l'instant).

Pour la détermination de x et y au sens Pastèque, il n'est pas possible de les définir et stocker sous Ekylibre dans l'immédiat. Dans une vision cours-terme, nous allons simuler qu'il y 4 colonnes de tables, triées par id. Exemple :

    1      2      5      12
    15     17     23

TariffAreas

L′id sous Ekylibre sera utilisé pour fournir le dispOrder des TariffAreas.

Resources

Retourner du 404/NOT_FOUND pour l'instant.

Categories

Il n'y a pas d'arborescence de catégories à implémenter car aucune sous Ekylibre.

Compositions

Les compositions sont des produits vendus par ensemble. Exemple : “3 brosses à dent”.

Il n'y a pas d'équivalence dans Ekylibre. Non nécessaire pour le client Pastèque.

Le serveur doit répondre comme si la table existait mais vide.

Cashes

Les ouvertures de caisse sont définies par un modèle spécifique : CashSession. Ce modèle contient entre autres :

  • cash_id : Référence à la caisse (Cash sous ERP / cashRegisterId sous Pasteque)
  • started_at : Début de l'ouverture
  • stopped_at : Fin de l'ouverture
  • currency : Monnaie (cf Nomenclature)
  • noticed_start_amount : Montant réel en caisse au début
  • noticed_stop_amount : Montant réel en caisse à la fin
  • expected_stop_amount : Montant attendu en caisse à la fin
  • sequence_id : Référence à la séquence utilisée par cette caisse. Séquence non périodique obligatoirement.

De plus, il faut un lien facultatif entre Affair et CashSession pour la production de Z-tickets 1).

DiscountProfiles

Les profils de réduction sont un modèle spécifique.

Le serveur doit répondre comme si la table existait mais vide.

Customers

“Prepaid Amount” : Le fonctionnement reste à déterminer avec l'équipe Pastèque.

Locations

Les Locations sont des emplacements générique au niveau Building pour l'instant.

Stocks

La population des produits est utilisée sous Ekylibre pour fournir la quantité des stocks.

max, attrSetInstId et security ne sont pas implémentés pour l'instant.

Attributes

Les attributs permettent de spécifier les options pour un produit. Exemple : Pour des t-Shirt, la taille (S, M, L, XL, XXL…) et la couleur (rouge, vert, noir…).

Le serveur doit répondre comme si la table existait mais vide.

Tickets

Un ticket correspond approximativement à une Affair à 1 vente (Sale) et n règlements (IncomingPayment) chez Ekylibre. Cela définit une vente et les règlements associés.

Pour identifier clairement les tickets au sein des affaires, une colonne booléenne doit être ajoutée à la table affairs.

add_column :affairs, :ticket, :boolean, null: false, default: false

Un scope “tickets” doit être défini au niveau du modèle Affair pour les retrouver en se basant sur ce booléen.

Pas de gestion des attributs au niveau des lignes de ticket.

Partage de ticket

Pas d'équivalence pour l'instant. Tous les tickets peuvent être considéré comme partagés.

Paiements

Les types de paiement sous Pastèque sont : cash, cheque, debt, free, magcard, paper, prepaid (cf. la liste des droits sur types de paiement).

Pour réaliser la correspondance avec les types d'encaissement (IncomingPaymentMode) sous Ekylibre, il faut…

CashMvts

Les mouvements d'espèces sont les entrées/sorties d'argent au cours de l'ouverture de la caisse. Ils permettent de rajouter ou sortir des sous de la caisse.

Seuls les types cashin et cashout sont disponibles comme type de paiement.

Pour l'instant, aucun moyen de faire la correspondance avec Ekylibre de manière juste.. Donc l'opération d'ajout échouera à chaque fois via un retour rej.

Correspondances des actions

Actions génériques

Mode Pastèque Ekylibre
GET get show
GET getAll index
POST update update
POST delete destroy

Actions spécifiques

Mode Pastèque Ekylibre
POST UsersAPI#updPwd users#update_password
GET CurrenciesAPI#getMain currencies#main
GET CategoriesAPI#getChildren categories#children
GET ProductsAPI#getCategory product_nature_variants#category
GET CashesAPI#search sessions#search
GET CustomersAPI#getTop customers#index?mode=top
POST CustomersAPI#addPrepaid customers#update_prepaid
1) Un Z-ticket est un ticket récapitulatif de l'ensemble des tickets pour une session donnée.