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
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
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