def handle_error(self, error_value, raw): error = int(error_value[2:]) # Page 61-62 if error == 39: raise DriverError('Bad parameters: %r' % raw, error) elif error == 10: raise CouponOpenError(_("Document is already open"), error) elif error == 11: raise CouponNotOpenError(_("Coupon is not open"), error) elif error == 12: raise CouponNotOpenError(_("There's no open document to cancel"), error) elif error == 15: raise CancelItemError(_("There is no such item in " "the coupon"), error) elif error == 16: raise DriverError("Bad discount/markup parameter", error) elif error == 21: log.warning(_('Printer error %s: No paper'), error) elif error == 22: raise DriverError( "Reduce Z was already sent today, try again tomorrow", error) elif error == 23: raise PendingReduceZ elif error == 24: raise DriverError("Bad unit specified: %r" % raw, error) elif error == 42: raise DriverError("Read X has not been sent yet", error) elif error == 45: raise DriverError(_("Required field is blank"), error) else: raise DriverError("Unhandled error: %d" % error, error)
def coupon_open(self): status = self._get_status() if status & FLAG_DOCUMENTO_ABERTO: raise CouponOpenError(_("Coupon already opened.")) customer = self._customer_name document = self._customer_document address = self._customer_address self._send_command('AbreCupomFiscal', EnderecoConsumidor=address[:80], IdConsumidor=document[:29], NomeConsumidor=customer[:30])
def coupon_open(self): # # Dataregis 375-EP doesn't need a function to open a coupon - the # coupon is opened when the first item is added, so simple checks # is done at this part. # status = self._get_status() if status.needs_reduce_Z(): raise PendingReduceZ(_("Pending Reduce Z")) if status.needs_read_X(): raise PendingReadX(_("Pending Read X")) if status.has_been_totalized() or self._is_coupon_open: raise CouponOpenError("There is a coupon opened") self._is_coupon_open = True
class MP25Status(object): PENDING_REDUCE_Z = 66 st1_codes = { 128: (OutofPaperError(_("Printer is out of paper"))), # 64: (AlmostOutofPaper(_("Printer almost out of paper"))), 32: (PrinterError(_("Printer clock error"))), 16: (PrinterError(_("Printer in error state"))), 8: (CommandError(_("First data value in CMD is not ESC (1BH)"))), 4: (CommandError(_("Nonexistent command"))), # 2: (CouponOpenError(_("Printer has a coupon currently open"))), 1: (CommandError(_("Invalid number of parameters")))} st2_codes = { 128: (CommandError(_("Invalid CMD parameter"))), 64: (HardwareFailure(_("Fiscal memory is full"))), 32: (HardwareFailure(_("Error in CMOS memory"))), 16: (PrinterError(_("Given tax is not programmed on the printer"))), 8: (DriverError(_("No available tax slot"))), 4: (CancelItemError(_("The item wasn't added in the coupon or can't " "be cancelled"))), # 2: (PrinterError(_("Owner data (CGC/IE) not programmed on the printer"))), # FIXME: This shouldn't be commented. But it will break the tests. # Need to update the tests for all bematech printers #1: (CommandError(_("Command not executed"))) } st3_codes = { # 7: (CouponOpenError(_("Coupon already Open"))), # 8: (CouponNotOpenError(_("Coupon is closed"))), 13: (PrinterOfflineError(_("Printer is offline"))), 16: (DriverError(_("Surcharge or discount greater than coupon total" "value"))), 17: (DriverError(_("Coupon with no items"))), 20: (PaymentAdditionError(_("Payment method not recognized"))), 22: (PaymentAdditionError(_("Isn't possible add more payments since" "the coupon total value already was " "reached"))), 23: (DriverError(_("Coupon isn't totalized yet"))), 43: (CouponNotOpenError(_("Printer not initialized"))), 45: (PrinterError(_("Printer without serial number"))), 52: (DriverError(_("Invalid start date"))), 53: (DriverError(_("Invalid final date"))), 85: (DriverError(_("Sale with null value"))), 91: (ItemAdditionError(_("Surcharge or discount greater than item" "value"))), 100: (DriverError(_("Invalid date"))), 115: (CancelItemError(_("Item doesn't exists or already was cancelled"))), 118: (DriverError(_("Surcharge greater than item value"))), 119: (DriverError(_("Discount greater than item value"))), 129: (CouponOpenError(_("Invalid month"))), 169: (CouponTotalizeError(_("Coupon already totalized"))), 170: (PaymentAdditionError(_("Coupon not totalized yet"))), 171: (DriverError(_("Surcharge on subtotal already effected"))), 172: (DriverError(_("Discount on subtotal already effected"))), 176: (DriverError(_("Invalid date")))} def __init__(self, reply): self.st1, self.st2, self.st3 = reply[-3:] @property def open(self): return self.st1 & 2 def _check_error_in_dict(self, error_codes, value): for key in error_codes: if key & value: raise error_codes[key] def check_error(self): log.debug("status: st1=%s st2=%s st3=%s" % (self.st1, self.st2, self.st3)) if self.st1 != 0: self._check_error_in_dict(self.st1_codes, self.st1) if self.st2 != 0: self._check_error_in_dict(self.st2_codes, self.st2) # first bit means not executed, look in st3 for more if self.st2 & 1 and self.st3: if self.st3 in self.st3_codes: raise self.st3_codes[self.st3]
def _check_coupon_is_closed(self): if self.is_coupon_opened: raise CouponOpenError(_("There is a coupon already open"))
def _check_coupon_is_opened(self): if not self.is_coupon_opened: raise CouponOpenError(_("There is no coupon opened!"))
def coupon_open(self): coupon_status = self._get_coupon_status() if coupon_status == OPENED_FISCAL_COUPON: raise CouponOpenError(_("Coupon already open")) self._send_command('0A01', '0000', '', '')
def coupon_open(self): status = self._check_status() if self._is_open(status): raise CouponOpenError(_("Coupon already open")) self.send_command(CMD_OPEN_COUPON)