Example #1
0
        return self.descripcion != "No ICE"

    def __unicode__(self):
        return u"{:.0f}% - {}".format(self.porcentaje, self.descripcion)


SRIStatus = Enum(
    "SRIStatus",
    (  # Invalido o no enviado
        ('NotSent', 'No enviado al SRI'),

        # Tiene fecha y punto de emision
        # Al enviar se genera XML, clave de acceso
        #     y se incrementan secuenciales
        ('ReadyToSend', 'Enviando al SRI'),
        # Enviada al SRI, esperando aceptacion o rechazo
        ('Sent', 'Enviada al SRI'),
        # Aceptada por el SRI
        ('Accepted', 'Aceptada por el SRI'),
        # Rechazada por el SRI, puede volver a ser modificada y enviada
        ('Rejected', 'Rechazada por el SRI'),

        # Estaba aceptado por el SRI y fue anulado
        ('Annulled', 'Anulado'),
    ))

AmbienteSRI = Enum("AmbienteSRI",
                   (('pruebas', 'Pruebas'), ('produccion', 'Producción')))


class ComprobanteSRIMixin(models.Model):
Example #2
0
# * encoding: utf-8 *
from decimal import Decimal

from django.db import models
from django.core.urlresolvers import reverse

import company_accounts.models
from sri.models import Tax, Iva, Ice

from util.enum import Enum
import purchases.models

ItemTipo = Enum("ItemTipo", (
    ('producto', 'Producto (ej. papas, muebles, televisores)'),
    ('servicio', 'Servicio (ej. reparación, transporte, instalación)'),
))

ItemDecimales = Enum("ItemDecimales", (
    (0, 'El artículo se vende por unidades enteras'),
    (2, 'El artículo se vende por décimas partes'),
    (2, 'El artículo se vende por centésimas partes (centímetros)'),
    (3, 'El artículo se vende por milésimas partes (gramos, milímetros)'),
))


class Item(models.Model):
    """
    Represents an item that can be sold or bought
    """
    name = models.CharField(max_length=100)
    code = models.CharField(max_length=50)
class CanFrameParser(object):
    '''
    classdocs
    '''

    verbose = False

    Fields = Enum([
        'Mnemonic', 'Time', 'CanId', 'Byte0', 'Byte1', 'Byte2', 'Byte3',
        'Byte4', 'Byte5', 'Byte6', 'Byte7'
    ])

    frame_0C2_extractor = CanFrame0C2Extractor()
    frame_14A_extractor = CanFrame14AExtractor()
    frame_242_extractor = CanFrame242Extractor()
    frame_245_extractor = CanFrame245Extractor()
    frame_246_extractor = CanFrame246Extractor()
    frame_24A_extractor = CanFrame24AExtractor()
    frame_308_extractor = CanFrame308Extractor()
    frame_441_extractor = CanFrame441Extractor()
    frame_442_extractor = CanFrame442Extractor()
    frame_44B_extractor = CanFrame44BExtractor()

    @staticmethod
    def can_time(field_data):
        return float(field_data[CanFrameParser.Fields.Time])

    @staticmethod
    def can_id(field_data):
        return int(field_data[CanFrameParser.Fields.CanId], 16)

    @staticmethod
    def extractor_factory(can_id):
        if can_id == 0x0C2:
            return CanFrameParser.frame_0C2_extractor
        elif can_id == 0x14A:
            return CanFrameParser.frame_14A_extractor
        elif can_id == 0x242:
            return CanFrameParser.frame_242_extractor
        elif can_id == 0x245:
            return CanFrameParser.frame_245_extractor
        elif can_id == 0x246:
            return CanFrameParser.frame_246_extractor
        elif can_id == 0x24A:
            return CanFrameParser.frame_24A_extractor
        elif can_id == 0x308:
            return CanFrameParser.frame_308_extractor
        elif can_id == 0x441:
            return CanFrameParser.frame_441_extractor
        elif can_id == 0x442:
            return CanFrameParser.frame_442_extractor
        elif can_id == 0x44B:
            return CanFrameParser.frame_44B_extractor
        else:
            raise ValueError(
                "No known extractor for CAN ID 0x{0:X}".format(can_id))

    @staticmethod
    def frame_byte(field_data, byte_idx):
        if byte_idx == 0:
            return int(field_data[CanFrameParser.Fields.Byte0], 16)
        elif byte_idx == 1:
            return int(field_data[CanFrameParser.Fields.Byte1], 16)
        elif byte_idx == 2:
            return int(field_data[CanFrameParser.Fields.Byte2], 16)
        elif byte_idx == 3:
            return int(field_data[CanFrameParser.Fields.Byte3], 16)
        elif byte_idx == 4:
            return int(field_data[CanFrameParser.Fields.Byte4], 16)
        elif byte_idx == 5:
            return int(field_data[CanFrameParser.Fields.Byte5], 16)
        elif byte_idx == 6:
            return int(field_data[CanFrameParser.Fields.Byte6], 16)
        elif byte_idx == 7:
            return int(field_data[CanFrameParser.Fields.Byte7], 16)
        else:
            raise ValueError(
                "The byte index of a CAN frame must be between 0 and 7")

    @staticmethod
    def frame_word(field_data, word_idx):
        if word_idx == 0:
            return int(
                field_data[CanFrameParser.Fields.Byte1] +
                field_data[CanFrameParser.Fields.Byte0], 16)
        elif word_idx == 2:
            return int(
                field_data[CanFrameParser.Fields.Byte3] +
                field_data[CanFrameParser.Fields.Byte2], 16)
        elif word_idx == 4:
            return int(
                field_data[CanFrameParser.Fields.Byte5] +
                field_data[CanFrameParser.Fields.Byte4], 16)
        elif word_idx == 6:
            return int(
                field_data[CanFrameParser.Fields.Byte7] +
                field_data[CanFrameParser.Fields.Byte7], 16)
        else:
            raise ValueError(
                "The word index of a CAN frame must be 0, 2, 4, or 6")

    @staticmethod
    def frame_int16(field_data, word_idx):
        value = CanFrameParser.frame_word(field_data, word_idx)
        if (value > 32767):
            value -= 65535
        return value

    def __init__(self, state):
        '''
        Constructor
        '''
        self.state = state

    def parse(self, sentence):
        field_data = sentence.split(',')
        try:
            extractor = CanFrameParser.extractor_factory(
                CanFrameParser.can_id(field_data))
            extractor.extractData(field_data, self.state)
            self.state.set_data_item(DataState.names[DataState.names.Time],
                                     CanFrameParser.can_time(field_data))
        except (ValueError, IndexError) as err:
            print("Failed to parse CAN message: {0}".format(err))