def ballotNumber(self, seq=1): """Cierra una boleta fiscal""" #formato del paquete de datos (son 13 "bits") format = '9B' #tamanio del paquete de datos datalen= 02 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_GETNBOL,0) paquetehexa= struct.pack('2B',self.CMD_GETNBOL,0) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1] ) return command
def subtotal(self, seq=3): """agrega el sub total a la boleta""" #formato del paquete de datos (son 13 "bits") format = '10B' #tamanio del paquete de datos datalen= 03 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_SUBTOTAL_BF,1,1) paquetehexa= struct.pack('3B',self.CMD_SUBTOTAL_BF,1,1) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1], package[2]) return command
def cerrar(self,seq=6): """Cierra una boleta fiscal""" #formato del paquete de datos (son 13 "bits") format = '11B' #tamanio del paquete de datos datalen= 04 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_CERRAR_BF, 2,0,1) paquetehexa= struct.pack('4B',self.CMD_CERRAR_BF, 2,0,1) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1], package[2], package[3]) return command
def xreport(self, seq=1): """ Imprime el reporte X """ #formato del paquete de datos (son 8 "bits") format = 'BBBBBBBBBB' #tamanio del paquete de datos datalen= 03 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_INFX, 1,0) paquetehexa= struct.pack('BBB',self.CMD_INFX, 1,0) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1], package[2]) return command
def zreport(self, seq=1): """ Imprime el reporte Z nota: no lo imprime si la impresora no tiene boletas abiertas en la jornada fiscal """ #formato del paquete de datos (son 8 "bits") format = 'BBBBBBBBBB' #tamanio del paquete de datos datalen= 03 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_CIERRE_Z, 1,0) paquetehexa= struct.pack('BBB',self.CMD_CIERRE_Z, 1,0) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1], package[2]) return command
def bell(self, seq=1): """ Suena la campana """ #formato del paquete de datos (son 8 "bits") format = '8B' #tamanio del paquete de datos datalen= 01 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_CMD_BELL,0) paquetehexa= struct.pack('B',self.CMD_CMD_BELL) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0]) return command
def addItem(self, seq=2, descripcion="Hub USB", valor=1, cantidad=10): """ Agrega un item a la boleta fiscal """ cant1= cantidad / 1000 cant2= cantidad % 1000 valorenBits= ( (0xFF000000 & valor)>>24,(0xFF0000 & valor)>>16,(0xFF00 & valor)>>8,(0xFF & valor)) strings = "" descripcionlen= len(descripcion) packageValues = (self.CMD_ITEM_BF, 9 + descripcionlen , (0xFF00 & cant2)>>8 , (0xFF & cant2), (0xFF00 & cant1)>>8 , (0xFF & cant1), valorenBits[0] ,valorenBits[1], valorenBits[2], valorenBits[3] , descripcionlen ) for letter in descripcion: packageValues += (letter,) strings += 's ' s = struct.Struct('11B '+ strings) paquetehexa= s.pack(*packageValues) datalen= s.size crc= tools.crc32(paquetehexa) command= struct.Struct('18B' + strings) datacommand= (self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10],16), packageValues[0], packageValues[1], packageValues[2], packageValues[3], packageValues[4], packageValues[5], packageValues[6], packageValues[7], packageValues[8], packageValues[9], packageValues[10]) for letter in descripcion : datacommand += (letter,) print datacommand return command.pack(*datacommand)
def openbox(self, seq=1): """Cierra una boleta fiscal""" #formato del paquete de datos (son 9 "bits") format = '9B' #tamanio del paquete de datos datalen= 02 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_ABRIR_CAJON,0) paquetehexa= struct.pack('2B',self.CMD_GETNBOL,0) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1] ) ''' long COcxsam350Ctrl::abrircajon() { unsigned char msg[]={0x74, 0}; unsigned char buff[4]; CrcBytes(msg,2,buff); PortWrite(0xA0); PortWrite(seq); seq++; PortWrite(2); PortWrite(buff[0]); PortWrite(buff[1]); PortWrite(buff[2]); PortWrite(buff[3]); for (int k=0; k<2; k++) PortWrite(msg[k]); return esperarespuesta(); // TODO: Add your dispatch handler code here return 0; } ''' return command
def openballot(self, seq=1): """ Abre una boleta, imprimiendo los datos del contribuyente, un logo y las lineas de encabezado si corresponde. Se debe ejecutar en estado secundario 'jornada fiscal inicializada' o 'jornada fiscal no inicializada' . En caso de ni inicializada, la abre automaticamente. """ # Herramientas de convercion de datos a hexadecimal y calculo de CRC32 # Paquete de datos especifico para abrir una boleta fiscal package = (self.CMD_ABRIR_BOLETA_FISCAL,04,00,00,01,00) # formato del paquete de datos s = struct.Struct('6B') # paquete de datos en hexa paquetehexa = s.pack(*package) # crc calculado crc= tools.crc32(paquetehexa) # tamanio del paquete de datos datalen= s.size #formato de envio del paquete de datos command= struct.Struct('13B') print (self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1], package[2], package[3], package[4], package[5]) return command.pack( self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1], package[2], package[3], package[4], package[5])
def pagos(self, seq=5,tipo=0, valor=10000 ): """agrega un pago a la boleta""" #formato del paquete de datos (son 13 "bits") format = '14B' #tamanio del paquete de datos datalen= 07 #paquete de datos especificos para abrir la boleta fiscal package = (self.CMD_PAGOS_BF, 05, tipo, (0xFF000000 & valor)>>24, (0xFF0000 & valor)>>16, (0xFF00 & valor)>>8, (0xFF & valor)) paquetehexa= struct.pack('7B',self.CMD_PAGOS_BF, 05, tipo, (0xFF000000 & valor)>>24, (0xFF0000 & valor)>>16, (0xFF00 & valor)>>8, (0xFF & valor)) crc= tools.crc32(paquetehexa) command = struct.pack(format, self.CMD_OPEN_COMMAND, seq, datalen, int(crc[2:4], 16), int(crc[4:6], 16), int(crc[6:8], 16), int(crc[8:10], 16), package[0], package[1], package[2], package[3], package[4], package[5], package[6]) return command