Пример #1
0
class PurchaseResource(resources.ModelResource):
    id = fields.Field(attribute='id', widget=IdWidget(), readonly=True)
    short_name = fields.Field(attribute='permanence__short_name', readonly=True)
    date = fields.Field(attribute='permanence__permanence_date', widget=DateWidgetExcel(), readonly=True)
    product_id = fields.Field(attribute='offer_item__product__id', readonly=True)
    product = fields.Field(attribute='offer_item__get_long_name', readonly=True)
    producer_id = fields.Field(attribute='producer__id', readonly=True)
    producer_name = fields.Field(attribute='producer__short_profile_name', readonly=True)
    customer_id = fields.Field(attribute='customer__id', readonly=True)
    customer_name = fields.Field(attribute='customer__short_basket_name', readonly=True)
    unit_deposit = fields.Field(attribute='offer_item__unit_deposit', widget=TwoMoneysWidget(), readonly=True)
    producer_unit_price_wo_tax = fields.Field(attribute='offer_item__producer_unit_price_wo_tax',
                                              widget=TwoMoneysWidget(), readonly=True)
    producer_vat = fields.Field(attribute='offer_item__producer_vat', widget=TwoMoneysWidget(), readonly=True)
    customer_unit_price = fields.Field(attribute='offer_item__customer_unit_price', widget=TwoMoneysWidget(),
                                       readonly=True)
    customer_vat = fields.Field(attribute='offer_item__customer_vat', widget=TwoMoneysWidget(), readonly=True)
    quantity_invoiced = fields.Field(attribute='quantity_invoiced', widget=FourDecimalsWidget(), readonly=True)
    producer_row_price = fields.Field(attribute='purchase_price', widget=TwoMoneysWidget(), readonly=True)
    customer_row_price = fields.Field(attribute='selling_price', widget=TwoMoneysWidget(), readonly=True)
    vat_level = fields.Field(attribute='offer_item__vat_level',
                             widget=ChoiceWidget(LUT_ALL_VAT, LUT_ALL_VAT_REVERSE), readonly=True)

    class Meta:
        model = Purchase
        fields = (
            'id', 'date', 'short_name',
            'producer_id',
            'producer_name',
            'product_id',
            'product',
            'customer_id',
            'customer_name',
            'quantity_invoiced', 'unit_deposit',
            'producer_unit_price_wo_tax',
            'producer_vat',
            'customer_unit_price',
            'customer_vat',
            'producer_row_price',
            'customer_row_price',
            'vat_level',
            'comment'
        )
        export_order = fields
        import_id_fields = ('id',)
        skip_unchanged = True
        report_skipped = False
        use_transactions = False
Пример #2
0
class PurchaseResource(resources.ModelResource):
    id = fields.Field(attribute="id", widget=IdWidget(), readonly=True)
    short_name = fields.Field(attribute="permanence__short_name", readonly=True)
    date = fields.Field(
        attribute="permanence__permanence_date", widget=DateWidgetExcel(), readonly=True
    )
    product_id = fields.Field(attribute="offer_item__product__id", readonly=True)
    product = fields.Field(attribute="offer_item__get_long_name", readonly=True)
    producer_id = fields.Field(attribute="producer__id", readonly=True)
    producer_name = fields.Field(
        attribute="producer__short_profile_name", readonly=True
    )
    customer_id = fields.Field(attribute="customer__id", readonly=True)
    customer_name = fields.Field(attribute="customer__short_basket_name", readonly=True)
    unit_deposit = fields.Field(
        attribute="offer_item__unit_deposit", widget=TwoMoneysWidget(), readonly=True
    )
    producer_unit_price_wo_tax = fields.Field(
        attribute="offer_item__producer_unit_price_wo_tax",
        widget=TwoMoneysWidget(),
        readonly=True,
    )
    producer_vat = fields.Field(
        attribute="offer_item__producer_vat", widget=TwoMoneysWidget(), readonly=True
    )
    customer_unit_price = fields.Field(
        attribute="offer_item__customer_unit_price",
        widget=TwoMoneysWidget(),
        readonly=True,
    )
    customer_vat = fields.Field(
        attribute="offer_item__customer_vat", widget=TwoMoneysWidget(), readonly=True
    )
    quantity_invoiced = fields.Field(
        attribute="quantity_invoiced", widget=FourDecimalsWidget(), readonly=True
    )
    producer_row_price = fields.Field(
        attribute="purchase_price", widget=TwoMoneysWidget(), readonly=True
    )
    customer_row_price = fields.Field(
        attribute="selling_price", widget=TwoMoneysWidget(), readonly=True
    )
    vat_level = fields.Field(
        attribute="offer_item__vat_level",
        widget=ChoiceWidget(LUT_ALL_VAT, LUT_ALL_VAT_REVERSE),
        readonly=True,
    )

    class Meta:
        model = Purchase
        fields = (
            "id",
            "date",
            "short_name",
            "producer_id",
            "producer_name",
            "product_id",
            "product",
            "customer_id",
            "customer_name",
            "quantity_invoiced",
            "unit_deposit",
            "producer_unit_price_wo_tax",
            "producer_vat",
            "customer_unit_price",
            "customer_vat",
            "producer_row_price",
            "customer_row_price",
            "vat_level",
            "comment",
        )
        export_order = fields
        import_id_fields = ("id",)
        skip_unchanged = True
        report_skipped = False
        use_transactions = False
Пример #3
0
class ProductResource(resources.ModelResource):
    id = fields.Field(attribute='id', widget=IdWidget(), readonly=True)
    producer_name = fields.Field(attribute='producer',
                                 widget=ForeignKeyWidget(
                                     Producer, field='short_profile_name'))
    long_name = fields.Field(attribute='long_name')
    department_for_customer = fields.Field(attribute='department_for_customer',
                                           widget=TranslatedForeignKeyWidget(
                                               LUT_DepartmentForCustomer,
                                               field='short_name'))
    order_unit = fields.Field(attribute='order_unit',
                              widget=ChoiceWidget(
                                  LUT_PRODUCT_ORDER_UNIT,
                                  LUT_PRODUCT_ORDER_UNIT_REVERSE))
    order_average_weight = fields.Field(attribute='order_average_weight',
                                        widget=ThreeDecimalsWidget())
    producer_unit_price = fields.Field(attribute='producer_unit_price',
                                       widget=TwoMoneysWidget())
    customer_unit_price = fields.Field(attribute='customer_unit_price',
                                       widget=TwoMoneysWidget())
    unit_deposit = fields.Field(attribute='unit_deposit',
                                widget=TwoMoneysWidget())
    vat_level = fields.Field(attribute='vat_level',
                             widget=ChoiceWidget(LUT_ALL_VAT,
                                                 LUT_ALL_VAT_REVERSE))
    customer_minimum_order_quantity = fields.Field(
        attribute='customer_minimum_order_quantity',
        widget=ThreeDecimalsWidget())
    customer_increment_order_quantity = fields.Field(
        attribute='customer_increment_order_quantity',
        widget=ThreeDecimalsWidget())
    customer_alert_order_quantity = fields.Field(
        attribute='customer_alert_order_quantity',
        widget=ThreeDecimalsWidget())
    wrapped = fields.Field(attribute='wrapped', widget=DecimalBooleanWidget())
    stock = fields.Field(attribute='stock', widget=ThreeDecimalsWidget())
    limit_order_quantity_to_stock = fields.Field(
        attribute='limit_order_quantity_to_stock',
        widget=DecimalBooleanWidget(),
        readonly=False)
    producer_order_by_quantity = fields.Field(
        attribute='producer_order_by_quantity', widget=ThreeDecimalsWidget())
    label = fields.Field(attribute='production_mode',
                         widget=TranslatedManyToManyWidget(LUT_ProductionMode,
                                                           separator="; ",
                                                           field='short_name'))
    picture = fields.Field(attribute='picture2', readonly=True)
    is_into_offer = fields.Field(attribute='is_into_offer',
                                 widget=DecimalBooleanWidget(),
                                 readonly=True)
    is_active = fields.Field(attribute='is_active',
                             widget=DecimalBooleanWidget(),
                             readonly=True)

    def before_save_instance(self, instance, using_transactions, dry_run):
        """
        Override to add additional logic.
        """
        if instance.wrapped is None:
            instance.wrapped = False
        if instance.producer_unit_price is None:
            instance.producer_unit_price = REPANIER_MONEY_ZERO
        if instance.customer_unit_price is None:
            instance.customer_unit_price = REPANIER_MONEY_ZERO
        if instance.unit_deposit is None:
            instance.unit_deposit = REPANIER_MONEY_ZERO
        if instance.customer_minimum_order_quantity is None:
            instance.customer_minimum_order_quantity = DECIMAL_ZERO
        if instance.customer_increment_order_quantity is None:
            instance.customer_increment_order_quantity = DECIMAL_ZERO
        if instance.customer_alert_order_quantity is None:
            instance.customer_alert_order_quantity = DECIMAL_ZERO
        if instance.stock is None:
            instance.stock = DECIMAL_ZERO
        if instance.producer_order_by_quantity is None:
            instance.producer_order_by_quantity = DECIMAL_ZERO
        if instance.order_unit is None:
            raise ValueError(_('The order unit must be set.'))
        if instance.order_unit != PRODUCT_ORDER_UNIT_DEPOSIT:
            if instance.producer_unit_price < DECIMAL_ZERO:
                raise ValueError(
                    _('The price must be greater than or equal to zero.'))
            if instance.customer_unit_price < DECIMAL_ZERO:
                raise ValueError(
                    _('The price must be greater than or equal to zero.'))
            if instance.order_unit in [
                    PRODUCT_ORDER_UNIT_PC, PRODUCT_ORDER_UNIT_PC_PRICE_KG,
                    PRODUCT_ORDER_UNIT_PC_PRICE_LT,
                    PRODUCT_ORDER_UNIT_PC_PRICE_PC, PRODUCT_ORDER_UNIT_PC_KG
            ]:
                # Do not allow decimal value when the qty represents pieces.
                if instance.customer_minimum_order_quantity != instance.customer_minimum_order_quantity // 1:
                    raise ValueError(
                        _('The minimum order quantity must be an integer.'))
                if instance.customer_increment_order_quantity != instance.customer_increment_order_quantity // 1:
                    raise ValueError(_('The increment must be an integer.'))
                if instance.stock != instance.stock // 1:
                    raise ValueError(_('The stock must be an integer.'))
                if instance.customer_alert_order_quantity != instance.customer_alert_order_quantity // 1:
                    raise ValueError(
                        _('The alert quantity must be an integer.'))

        if instance.order_unit < PRODUCT_ORDER_UNIT_DEPOSIT:
            if instance.customer_minimum_order_quantity <= DECIMAL_ZERO:
                raise ValueError(
                    _('The minimum order quantity must be greater than zero.'))

            if instance.customer_minimum_order_quantity != instance.customer_alert_order_quantity \
                    and instance.customer_increment_order_quantity <= DECIMAL_ZERO:
                raise ValueError(_('The increment must be greater than zero.'))

        qs = Product.objects.filter(reference=instance.reference,
                                    producer=instance.producer).order_by('?')
        if instance.id is not None:
            qs = qs.exclude(id=instance.id)
        if qs.exists():
            raise ValueError(
                _("The reference %(reference)s is already used by %(product)s")
                % {
                    'reference': instance.reference,
                    'product': qs.first()
                })

    class Meta:
        model = Product
        fields = ('id', 'producer_name', 'reference',
                  'department_for_customer', 'long_name', 'order_unit',
                  'wrapped', 'order_average_weight', 'producer_unit_price',
                  'customer_unit_price', 'unit_deposit', 'vat_level',
                  'customer_minimum_order_quantity',
                  'customer_increment_order_quantity',
                  'customer_alert_order_quantity', 'stock',
                  'limit_order_quantity_to_stock',
                  'producer_order_by_quantity', 'label', 'picture',
                  'is_into_offer', 'is_active')
        export_order = fields
        import_id_fields = ('id', )
        skip_unchanged = True
        report_skipped = False
        use_transactions = False