Files
Tools_CPP/devices/Printers/Mebius/PrinterOPOS.~h
2024-11-01 12:23:13 +05:00

189 lines
6.3 KiB
Plaintext

//---------------------------------------------------------------------------
#ifndef PrinterOPOSH
#define PrinterOPOSH
//---------------------------------------------------------------------------
#include "OposFiscalPrinter_1_7_Lib_OCX.h"
#include "FP300KZ.h"
//---------------------------------------------------------------------------
const LONG FPTR_RT_CASH_IN = 1;
const LONG FPTR_RT_CASH_OUT = 2;
const LONG FPTR_RT_GENERIC = 3;
const LONG FPTR_RT_SALES = 4;
const LONG FPTR_RT_SERVICE = 5;
const LONG FPTR_RT_SIMPLE_INVOICE = 6;
//---------------------------------------------------------------------------
//Ïðîäàâàåìûé òîâàð
class Goods
{
private:
public:
WideString name1; //Íàçâàíèå òîâàðà 1 ñòðîêà
WideString name2; //Íàçâàíèå òîâàðà 2 ñòðîêà
double price; //Öåíà çà åäåíèöó
long count; //Êîëè÷åñòâî
long VatInfo; //Íîìåð íàëîãîâîé ñòàâêè èç ñïðàâî÷íèêà
Goods(WideString name1, WideString name2, double price, long count,long VatInfo){if(name1==NULL) this->name1=L""; else this->name1=name1; if(name2==NULL) this->name2=L""; else this->name2=name2; this->price=price; this->count=count; this->VatInfo=VatInfo; };
};
//---------------------------------------------------------------------------
class FiscalPrinter
{
protected:
bool Crashed;
long FState;
TList* FListGoods;
long CheckId; //Ñêîëüêî ðàñïå÷àòàëè ÷åêîâ íà äàííîì òåðìèíàëå
public:
AnsiString HeadLine; //Ïåðâàÿ ñòðîêà â ÷åêå "Îïëàòà çà óñëóãè âîäîñíàáæåíèÿ"
WideString GoodsName; //Íàçâàíèå òîâàðà
WideString CasireName; //Èìÿ êàññèðà
bool TestMode;
bool AutoOpenShift; //Àâòî îòêðûòèå ñìåíû
FiscalPrinter(){ FListGoods= new TList(); CheckId=0; LoadSetup(); };
virtual AnsiString getPrinterName()=0;
virtual bool Start()=0;
virtual bool isOk()=0;
virtual long getCheckId(){ return CheckId; }; //Íîìåð ïîñëåäíåãî îòïå÷àòîíîãî äîêóìåíòà
void ClearGoods()
{
try
{
while(FListGoods->Count>0)
{
Goods* g=(Goods*)FListGoods->Items[0];
delete g;
FListGoods->Delete(0);
}
FListGoods->Clear();
}catch(...)
{
Crashed=true;
}
};
int getGoodsPrice();
virtual bool PrintLine(WideString line)=0;
void addGoods(Goods* goods)
{
FListGoods->Add(goods);
};
virtual bool getNextCheckId(int &id);
bool SaveCheck(int CheckId);
virtual bool PrintCheck(bool sales, int check, WideString headLine ) { return false; };
bool deleteCheck(int CheckId);
virtual AnsiString getLastError(){ return ""; };
virtual bool DayOpened(){ return false; };
virtual void setHeader(TStrings* Text){};
virtual void getHeader(TStrings* Text){};
virtual void setTrailer(TStrings* Text){};
virtual void getTrailer(TStrings* Text){};
virtual bool OpenShift(){ return true; }; //Îòêðûòèå ñìåíû
int getCOMPort();
int getBaudRate();
void setBaudRate(int val);
void setCOMPort(int n);
virtual bool PrintZReport()=0;
virtual void PrintXReport()=0;
void LoadSetup();
void SaveSetup();
virtual bool setTrainingMode(bool val){ return false; };
virtual bool Cut(){ return false; }; //Îòðåçàòü áóìàãó
virtual bool setNalog(long n,float stavka){ return false; }; //Çàïîëíåíèå ìàññèâà ñ ñóììàìè ïî íàëîãîâûì ñòàâêàì
virtual int getAllSum(){ return 0; };
};
//---------------------------------------------------------------------------
//Îáâ¸ðòêà äëÿ OPOS ôèñêàëüíîãî ïðèíòåðà
class PrinterOPOS : public FiscalPrinter
{
private:
TOPOSFiscalPrinter *fp;
public:
bool setTrainingMode(bool val);
bool getTrainingMode();
PrinterOPOS(TComponent* AOwner);
virtual ~PrinterOPOS();
AnsiString getPrinterName(){ return "Moebius";};
bool Start(); //Ñîåäåíèòüñÿ ïî COM ïîðòó è ïðîèíèöèàëèçèðîâàòü ïðèíòåð
bool PrintCheck(bool sales, int check, WideString headLine ); //Ïå÷àòü ÷åêà
bool SaveCheck(int CheckId); //Ñîõðàíåíèå ÷åêà äëÿ ïîñëåäóþùåé ðàñïå÷àòêè
bool deleteCheck(int CheckId); //Óäàëåíèå ÷åêà èç áàçû
bool Cut(); //Îòðåçàòü áóìàãó
//int GetState(); //0 - Íåò îøèáîê ãîòîâ ê ïå÷àòè ÷åêà
bool isOk(); //Ïðîâåðêà ðàáîòîñïîñîáíîñòè ïðèíòåðà
AnsiString GetStatusDescription(long StatusCode); //Îïèñàíèå ñòàòóñà
AnsiString getLastError(long* err); //Ïîëó÷èòü êîä ïîñëåäíåé îøèáêè
AnsiString getLastError(); //Ïîëó÷èòü êîä ïîñëåäíåé îøèáêè
TDateTime getDateOpenShift(); //Ïîëó÷èòü äàòó îòêðûòèÿ ñìåíû
void setHeader(TStrings* Text);
void getHeader(TStrings* Text);
void setTrailer(TStrings* Text);
void getTrailer(TStrings* Text);
int getCOMPort();
void setCOMPort(int n);
int getDaySum(); //Ñóììà â êàññà ñ ïðîøëîãî Z îò÷¸òà
int getAllSum(); //Îáùèé èòîã ïðîäàæ
bool PrintLine(WideString line);
bool PrintZReport(); //Ïå÷àòü îò÷¸òà è çàêðûòèå ñìåíû
void PrintXReport(); //Ïå÷àòü ñóòî÷íîãî îò÷¸òà áåç çàêðûòèÿ ñìåíû
bool OpenShift(); //Îòêðûòèå ñìåíû
bool DayOpened(); //Îòðûòà ëè ñìåíà
bool setNalog(long n,float stavka); //Çàïîëíåíèå ìàññèâà ñ ñóììàìè ïî íàëîãîâûì ñòàâêàì
void Push(){}; //Â OPOS äðàéâåðå íåò òàêîé ôóíêöèè
};
//---------------------------------------------------------------------------
class FiscalPrinterPort : public FiscalPrinter
{
private:
FP300KZ* fp;
public:
FiscalPrinterPort():FiscalPrinter()
{ fp = new FP300KZ();
};
virtual ~FiscalPrinterPort(){ delete fp; };
AnsiString getPrinterName(){ return "Port";};
bool getNextCheckId(int &res)
{
int num;
bool b=fp->GetLastPrintedDocNumber(num);
res=num+1;
if(!b)throw Exception(getLastError());
return b;
};
bool Start()
{
fp->OpenCOMPort(getCOMPort(),getBaudRate());
return fp->PrinterInit();
};
long getCheckId(){ int num; fp->GetLastPrintedDocNumber(num); return num; }; //Íîìåð ïîñëåäíåãî îòïå÷àòîíîãî äîêóìåíòà
bool PrintCheck(bool sales, int check, WideString headLine ); //Ïå÷àòü ÷åêà
bool isOk();
bool PrintLine(WideString line){ if(line!=NULL) return fp->PrintLine(line.c_bstr()); else return fp->PrintLine(L""); };
AnsiString getLastError()
{
return fp->getLastErrorDest().c_str();
};
bool DayOpened(){ return true; };
bool PrintZReport();
void PrintXReport() { fp->PrintXReport(); };
bool Cut(){ return fp->CutPaper(); };
};
//---------------------------------------------------------------------------
extern FiscalPrinter* g_printer;
//---------------------------------------------------------------------------
#endif