Een kassalade openen met de OPOS-bibliotheek

0000002641     -      23-08-2023

Sinds versie 11 van Mercator is het voldoende om

  • Optie "Modus afdrukking ticket" (id=POS_MODE_T) op waarde Printer Name zetten.
  • In optie "Port geldlade" (id=PORT_TIR) de naam van de printer waarop de lade is aangesloten vermelden. Deze naam moet letter voor letter overeenkomen met de naam van de printer in de Windows-configuratie.
  • In optie "String geldlade" (id=STRING_TIR) de open-string van de lade ingeven. Bijvoorbeeld 
    • chr(27)+'='+chr(1)+chr(27)+'p'+chr(0)+chr(20)+chr(80) voor een Epson geldlade
    • chr(7) voor een Star geldlade

Dit werkt in zowel met klassieke Mercator als Mercator Core.


De hieronder beschreven programmering is achterhaald. OPOS werkt niet in .net core.

Het voorbeeld van de geleverde code toont hoe we een kassa openen die gebruikt maakt van OPOS-tools. Het gebruikt het event BeforeOpenCashDrawer beschikbaar in het object Payment van de BillingForm. Dit event maakt het mogelijk om tussen te komen voor de kassa-lade opent.

In deze programmatie gebruiken we de Windows OPOS standaardversie, meegeleverd door Microsoft.
Men moet dus de meegeleverde dll's uit het onderstaande zip-bestand overnemen en kopiëren in de hoofddirectory van Mercator.

Zoom
// <ReferenceInclude>"POS.Devices.Opos_Constants.dll"</ReferenceInclude>
// <ReferenceInclude>"POS.Devices.OPOSCashDrawer.dll"</ReferenceInclude>
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Reflection;
using System.Windows.Forms;
using POS.Devices;
using POS;

namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {
        public void Main(MercatorUi.ICustomizers.ExecAction Action)
        {
            if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
            {
                MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawer += new MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawerEventHandler(MercatorUiFormsBillingBillingObjectsPayments_BeforeOpenCashDrawer);
            }
            if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
            {
                MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawer -= new MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawerEventHandler(MercatorUiFormsBillingBillingObjectsPayments_BeforeOpenCashDrawer);
            }
        }
        void MercatorUiFormsBillingBillingObjectsPayments_BeforeOpenCashDrawer(MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawerEventArgs e)
        {
            POS.Devices.OPOSCashDrawer tiroir = new POS.Devices.OPOSCashDrawer();
            int rc = 0;
            rc = tiroir.Open(Globals.ParamPos["PORT_TIR"]);
            if (rc != (int)OPOS_Constants.OPOS_SUCCESS)
            {
                Dialogs.Stop(((OPOS_Constants)Enum.ToObject(typeof(OPOS_Constants), rc)).ToString());
                e.Result = MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawerResultEnum.Failed;
                return;
            }
            rc = tiroir.ClaimDevice(200);
            tiroir.DeviceEnabled = true;
            if (rc != (int)OPOS_Constants.OPOS_SUCCESS)
            {
                Dialogs.Stop(((OPOS_Constants)Enum.ToObject(typeof(OPOS_Constants), rc)).ToString());
                e.Result = MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawerResultEnum.Failed;
                return;
            }
            rc = tiroir.OpenDrawer();
            if (rc != (int)OPOS_Constants.OPOS_SUCCESS)
            {
                Dialogs.Stop(((OPOS_Constants)Enum.ToObject(typeof(OPOS_Constants), rc)).ToString());
                e.Result = MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawerResultEnum.Failed;
                return;
            }
            e.Result = MercatorUi.Forms.Billing.BillingObjects.Payments.BeforeOpenCashDrawerResultEnum.Done;
            tiroir.DeviceEnabled = false;
            tiroir.ReleaseDevice();
            tiroir.Close();
        }
    }
}


Te laden : 0000002641.zip (43 Kb - 28-04-2016)