/// <summary> /// Оплата /// </summary> public void Payment(PaymentDocument document) { switch (document.PaymentReason) { case PaymentReason.Parking: case PaymentReason.Fine: case PaymentReason.ECash: case PaymentReason.Any: memory.MoneyInKKM += document.Amount; memory.Save(); break; case PaymentReason.Refund: if (document.Amount > memory.MoneyInKKM) { throw new FiscalDeviceException("Недостаточно денег для возврата"); } memory.MoneyInKKM -= document.Amount; memory.Save(); break; } }
/// <summary> /// Оплата /// </summary> public void Payment(PaymentDocument doc) { int nErr; // Открыть сеанс OpenSessionInternal(); // проверим смену if (!_GetOpened()) { throw new FiscalDeviceException("Для проведения оплаты необходимо предварительно открыть смену!"); } //Формирование чека SetCurrentMoney((double)doc.Amount); _SetCurrentDocType((int)doc.Type); _SetCurrentPayType((int)doc.PaymentType); // Тип = Наличные //Settings.Default.CashNumber.ToString() _SetCashierName(_cashName); _SetCashierID(0); _ClearRequisites(); String sCardNum = Convert.ToString(doc.CardId, 16); switch (doc.PaymentReason) { case PaymentReason.Parking: _AddRequisite(1, 1, 1, "Оплата услуг парковки"); _AddRequisite(2, 1, 1, "Парковочная карта: " + sCardNum.ToUpper()); _AddRequisite(3, 1, 1, "Время въезда: " + String.Format("{0:G}", doc.TimeEntry)); _AddRequisite(4, 1, 1, "Выезд до : " + String.Format("{0:G}", doc.TimeExit)); _AddRequisite(5, 1, 1, "Оплачено: " + Utils.TimeToString(doc.TimeExit - doc.TimeEntry)); if (doc.Payment <= 0) { _AddRequisite(6, 1, 1, " "); } else { _AddRequisite(6, 1, 1, "Оплачено ранее: " + String.Format("{0:C}", doc.Payment)); } break; case PaymentReason.Fine: _AddRequisite(1, 1, 1, "Оплата услуг парковки - ШТРАФ"); _AddRequisite(2, 1, 1, "Парковочная карта: " + sCardNum.ToUpper()); _AddRequisite(3, 1, 1, "Время въезда: " + String.Format("{0:G}", doc.TimeEntry)); _AddRequisite(4, 1, 1, "Выезд до : " + String.Format("{0:G}", doc.TimeExit)); _AddRequisite(5, 1, 1, "Оплачено: " + Utils.TimeToString(doc.TimeExit - doc.TimeEntry)); if (doc.Payment / 100 <= 0) { _AddRequisite(6, 1, 1, " "); } else { _AddRequisite(6, 1, 1, "Оплачено ранее: " + String.Format("{0:C}", doc.Payment)); } break; case PaymentReason.ECash: _AddRequisite(1, 1, 1, "Пополнение эл. кошелька"); _AddRequisite(2, 1, 1, "Парковочная карта: " + sCardNum.ToUpper()); break; case PaymentReason.Any: break; case PaymentReason.Refund: _AddRequisite(1, 1, 1, "Возврат"); break; default: break; } _WholeCheck(); WaitForOperation(); nErr = _GetErrorNumber(); if (nErr != 0) { throw new FiscalDeviceException(nErr, "Ошибка печати чека. Проверьте ККМ и повторите операцию."); } }
/// <summary> /// Оплата /// </summary> public void Payment(PaymentDocument doc) { int nError; int row = 0; // проверим смену if (!IsSessionOpened) { throw new FiscalDeviceException("Для проведения оплаты необходимо предварительно открыть смену!"); } //Формирование чека nError = OpenFiscalDoc((byte)doc.Type, (byte)doc.PaymentType, 0, 1, 1, 2, 32, 3, 24, (int)doc.Amount * 100); if (nError != 0) { throw new FiscalDeviceException(nError, "Ошибка формирования чека."); } ChangeOpName(cashierName); String sCardNum = Convert.ToString(doc.CardId, 16); switch (doc.PaymentReason) { case PaymentReason.Parking: AddFreeField(4, 1, 1, 1, 0, "Оплата услуг парковки"); AddFreeField(5, 1, 1, 1, 0, "Парковочная карта: " + sCardNum.ToUpper()); AddFreeField(6, 1, 1, 1, 0, "Время въезда: " + String.Format("{0:G}", doc.TimeEntry)); AddFreeField(7, 1, 1, 1, 0, "Выезд до : " + String.Format("{0:G}", doc.TimeExit)); AddFreeField(8, 1, 1, 1, 0, "Оплачено: " + Utils.TimeToString(doc.TimeExit - doc.TimeEntry)); if (doc.Payment <= 0) { AddFreeField(9, 1, 1, 1, 0, " "); } else { AddFreeField(9, 1, 1, 1, 0, "Оплачено ранее: " + String.Format("{0:C}", doc.Payment)); } row = 6; break; case PaymentReason.Fine: AddFreeField(4, 1, 1, 1, 0, "Оплата услуг парковки - ШТРАФ"); AddFreeField(5, 1, 1, 1, 0, "Парковочная карта: " + sCardNum.ToUpper()); AddFreeField(6, 1, 1, 1, 0, "Время въезда: " + String.Format("{0:G}", doc.TimeEntry)); AddFreeField(7, 1, 1, 1, 0, "Выезд до : " + String.Format("{0:G}", doc.TimeExit)); AddFreeField(8, 1, 1, 1, 0, "Оплачено: " + Utils.TimeToString(doc.TimeExit - doc.TimeEntry)); if (doc.Payment / 100 <= 0) { AddFreeField(9, 1, 1, 1, 0, " "); } else { AddFreeField(9, 1, 1, 1, 0, "Оплачено ранее: " + String.Format("{0:C}", doc.Payment)); } row = 6; break; case PaymentReason.ECash: AddFreeField(4, 1, 1, 1, 0, "Пополнение эл. кошелька"); AddFreeField(5, 1, 1, 1, 0, "Парковочная карта: " + sCardNum.ToUpper()); row = 2; break; case PaymentReason.Any: break; case PaymentReason.Refund: AddFreeField(4, 1, 1, 1, 0, "Возврат"); row = 1; break; } AddPosField(1, 12, 1, 1, 34, 1, 2, 2, 1, 2, 34, 1, 5 + row, 26, 1, 3, 9, 1, 4 + row, 9, 1); AddFreeField(1, 1, 1, 1, 0, "Серийный № "); AddFreeField(1, 24, 1, 1, 0, "Док № "); AddFreeField(3, 1, 1, 1, 0, "Касса № "); AddFreeField(5 + row, 16, 1, 1, 0, "ИНН: "); AddFreeField(4 + row, 1, 1, 1, 0, "ИТОГО: "); nError = PrintFiscalReceipt(); if (nError != 0) { throw new FiscalDeviceException(nError, "Ошибка печати чека. Проверьте ККМ и повторите операцию."); } }