Пример #1
0
        public string PrintDocPack(DocPack doc, int MoneyType = -1,
                                   bool returnSale            = false, decimal?MoneySumm = null, string sendingAddress = "")
        {
            currentDrvPassword = doc.CashierPass;
            currentDocPack     = doc.AgrNumber;

            if (cancelOpenReceipt)
            {
                cancelOpenReceipt = false;

                if (!atolDriver.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_CLOSED))
                {
                    atolDriver.cancelReceipt();
                    Log.AddWithCode("поздняя отмена документа");
                }
            }

            if (MoneyType != -1)
            {
                doc.MoneyType = MoneyType;
            }

            PrepareDriver();

            double SELL_OR_RETURN = (returnSale ? Constants.LIBFPTR_RT_SELL_RETURN : Constants.LIBFPTR_RT_SELL);

            atolDriver.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, SELL_OR_RETURN);

            atolDriver.openReceipt();

            Log.AddWithCode("открытие чека");

            string sendingCheck = String.Empty;

            if (!String.IsNullOrEmpty(sendingAddress))
            {
                sendingCheck = sendingAddress;
            }
            else if (!String.IsNullOrEmpty(doc.Mobile))
            {
                sendingCheck = doc.Mobile;
            }
            else if (!String.IsNullOrEmpty(doc.Email))
            {
                sendingCheck = doc.Email;
            }

            if (!String.IsNullOrEmpty(sendingCheck))
            {
                Log.Add("отправка СМС/email на адрес: " + sendingCheck);
                atolDriver.setParam(1008, sendingCheck);
            }

            PrintLine("Кассир: " + CRM.cashier, line: true);

            if (doc.Region)
            {
                PrintLine("Договор:" + doc.AgrNumber);
                PrintLine("BankID:" + doc.BankID, line: true);
            }

            foreach (Service service in doc.Services)
            {
                PrepareDriver();

                double VAT = (service.VAT == 1 ? Constants.LIBFPTR_TAX_VAT20 : Constants.LIBFPTR_TAX_NO);
                atolDriver.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, VAT);

                atolDriver.setParam(Constants.LIBFPTR_PARAM_DEPARTMENT, service.Department);
                atolDriver.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, service.Name);
                atolDriver.setParam(Constants.LIBFPTR_PARAM_PRICE, (double)service.Price);
                atolDriver.setParam(Constants.LIBFPTR_PARAM_QUANTITY, service.Quantity);
                atolDriver.setParam(Constants.LIBFPTR_PARAM_COMMODITY_PIECE, 1);
                atolDriver.registration();

                PrintLine(line: true);
            }

            PrepareDriver();

            atolDriver.setParam(Constants.LIBFPTR_PARAM_PAYMENT_SUM, (double)(MoneySumm ?? doc.Money));

            if (doc.MoneyType == 1)
            {
                Log.Add("тип оплаты: наличными");

                atolDriver.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_CASH);
            }
            else
            {
                Log.Add("тип оплаты: безнал");

                atolDriver.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_ELECTRONICALLY);
            }
            atolDriver.payment();

            atolDriver.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_RECEIPT_STATE);
            atolDriver.queryData();

            double change = atolDriver.getParamDouble(Constants.LIBFPTR_PARAM_CHANGE);

            atolDriver.closeReceipt();

            Log.AddWithCode("распечатка чека");

            while (atolDriver.checkDocumentClosed() < 0)
            {
                Log.AddWithCode("проверка статуса чека");
                return("ERR2:Не удалось проверить - " + atolDriver.errorDescription());
            }

            if (!atolDriver.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_CLOSED))
            {
                Log.Add("документ не закрылся");
                atolDriver.cancelReceipt();
                Log.AddWithCode("отмена чека");

                if (atolDriver.errorCode() != 0)
                {
                    cancelOpenReceipt = true;
                }

                return("ERR2:Документ не закрылся - " + atolDriver.errorDescription());
            }

            string fdForRegion = String.Empty;

            if (doc.Region)
            {
                atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_RECEIPT);
                atolDriver.fnQueryData();
                fdForRegion = ":" + atolDriver.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER).ToString();
            }

            if (!atolDriver.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_PRINTED))
            {
                while (atolDriver.continuePrint() < 0)
                {
                    Log.AddWithCode("чек не удалось допечатать");

                    int errCode = (doc.Region ? 5 : 2);

                    return("ERR" + errCode.ToString() + ":Не удалось допечатать - " + atolDriver.errorDescription() + fdForRegion);
                }
            }

            if (!MainWindow.TEST_VERSION && !doc.Region)
            {
                RepeatPrint(null, null);
            }

            return("OK:" + change.ToString() + fdForRegion);
        }
Пример #2
0
 private void ConnectButton_Click(object sender, EventArgs e)
 {
     if (fptr.open() != 0)
     {
         MessageBox.Show(string.Format("Невозможно установить соединение с кассой.\nОшибка {0}: {1}", fptr.errorCode(), fptr.errorDescription()),
                         "Ошибка соединения",
                         MessageBoxButtons.OK,
                         MessageBoxIcon.Error);
         return;
     }
     Hide();
     p = new Printer(this);
     p.Show();
 }