class ProviderUser(ModelAdmin): form =ProviderForm fields = ['name', 'CIF', 'otherCIF'] list_display = ('name', 'CIF', 'otherCIF') search_fields = ['name', 'CIF', 'otherCIF'] actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),] def get_form(self, request, obj=None, **kwargs): ModelForm = super(ProviderUser, self).get_form(request, obj=None, **kwargs) def form_wrapper(*args, **kwargs): a = ModelForm(*args, **kwargs) a.request = request return a return form_wrapper def save_model(self, request, obj, form, change): if obj.CIF is None and obj.otherCIF is None: raise ValidationError(_(u"Especifica identitat")) return obj.name = obj.name.upper().replace("-","").replace(".","").replace("/","").replace("-","").replace(",","") if getattr(obj, 'user', None) is None: obj.user = request.user obj.save() def queryset(self, request): if request.user.is_superuser: return Provider.objects.all() return Provider.objects.filter(user=request.user)
class ClientAdmin(ModelAdmin): form =ClientForm fields = ['user', 'name', 'CIF', 'otherCIF'] list_display = ('user', 'name', 'CIF', 'otherCIF') search_fields = ['name', 'CIF', 'otherCIF'] actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),] def get_form(self, request, obj=None, **kwargs): ModelForm = super(ClientAdmin, self).get_form(request, obj=None, **kwargs) def form_wrapper(*args, **kwargs): a = ModelForm(*args, **kwargs) a.request = request return a return form_wrapper def save_model(self, request, obj, form, change): obj.name = obj.name.upper().replace("-", "").replace(".","").replace("/","").replace("-","").replace(",","") if getattr(obj, 'user', None) is None: obj.user = request.user obj.save() def queryset(self, request): if request.user.is_superuser: return Client.objects.all() return Client.objects.filter(user=request.user)
class EmailNotificationAdmin(ModelAdmin): class Media: js = ( 'EmailNotification.js', # app static folder ) fields = ['efrom', 'eto', 'ento', 'sent_to_user', 'subject', 'body', 'period', 'is_active', 'notification_type', 'offset_days', 'pointed_date' ] list_display = ('efrom', 'ento', 'sent_to_user_filter', 'subject', 'period', 'is_active', 'on_time','execution_date', 'notification_type', 'pointed_date_filter' ) actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),]
class PurchaseInvoiceAdmin(ModelAdmin): form = PurchaseInvoiceForm date_hierarchy = "date" list_per_page = 1000 fields = ['user', 'period', 'num', 'provider', 'date', 'value', 'percentExpencedVAT', 'percentIRPFRetention'] list_display = ('SociNum', 'SociName', 'providerName', 'providerCIF', 'date', 'num', 'value', 'percentExpencedVAT','expencedVAT', 'percentIRPFRetention', 'IRPFRetention', 'total') change_list_template = 'admin/Invoices/PurchaseInvoices/change_list.html' list_filter = ('period', ) search_fields = ['user__soci__coop_number', 'user__username', 'user__first_name'] list_export = ('SociNum', 'SociName', 'num', 'providerName', 'providerCIF', 'date', 'value', 'percentExpencedVAT', 'expencedVAT', 'percentIRPFRetention', 'IRPFRetention', 'total') def save_model(self, request, obj, form, change): if getattr(obj, 'user', None) is None: obj.user = request.user obj.save() def changelist_view(self, request, extra_context=None): #Calculate Totals response = super(PurchaseInvoiceAdmin, self).changelist_view(request, extra_context) try: qs_queryset = response.context_data["cl"].query_set except: qs_queryset = None if qs_queryset and extra_context is None: extra_context = {} purchases_total = purchases_expencedVAT = purchases_IRPFRetention = purchases_totalVAT = Decimal('0.00') for item in qs_queryset.all(): purchases_total += item.value purchases_expencedVAT += item.expencedVAT() purchases_IRPFRetention += item.IRPFRetention() purchases_totalVAT += item.total() extra_context['Purchases_total'] = Decimal ( "%.2f" % purchases_total ) extra_context['Purchases_expencedVAT'] = Decimal ( "%.2f" % purchases_expencedVAT ) extra_context['Purchases_IRPFRetention'] = Decimal ( "%.2f" % purchases_IRPFRetention ) extra_context['Purchases_totalVAT'] = Decimal ( "%.2f" % purchases_totalVAT ) return PeriodManager.filterbydefault(request, self, PurchaseInvoiceAdmin, extra_context) def SociNum (self, obj): getSoci = Soci.objects.get( user=obj.user ) return getSoci SociNum.short_description = _(u"Nº Soci") SociNum.admin_order_field = "user__soci__coop_number" def SociName (self, obj): return obj.user.first_name + ' ' + obj.user.last_name SociName.short_description = _(u"Nom Soci") SociName.admin_order_field = "user__first_name" def providerName (self, obj): return obj.provider.name providerName.short_description = _(u"Proveïdor") def providerCIF (self, obj): if obj.provider.CIF: return obj.provider.CIF else: return obj.provider.otherCIF providerCIF.short_description = _(u"Proveïdor (ID) ") actions = [export_as_csv_action("Exportar CSV", fields=list_export, header=True, force_fields=True),]
class PeriodAdmin(ModelAdmin): fields = ['label', 'first_day', 'date_open', 'date_close'] list_display = ('label', 'first_day', 'date_open', 'date_close') actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),] def save_model(self, request, obj, form, change): if getattr(obj, 'user', None) is None: obj.user = request.user obj.save() def queryset(self, request): if request.user.is_superuser: return period.objects.all() return period.objects.filter(user=request.user)
class refundEntitiesUser(ModelAdmin): fields = ['entity', 'concept', 'number'] list_display = ('entity', 'concept', 'number') actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),] def get_actions(self, request): actions = super(refundEntitiesUser, self).get_actions(request) del actions['delete_selected'] return actions def has_add_permission(self, request): return False def has_delete_permission(self, request): return False def __init__(self, *args, **kwargs): super(refundEntitiesUser, self).__init__(*args, **kwargs) self.list_display_links = (None,) # to hide change and add buttons on main page: def get_model_perms(self, request): return {'view': True}
class SociAdmin(ModelAdmin): form = SociAdminForm model = 'Soci' list_per_page = 600 fields = ['user', 'coop_number', 'IVA_assignat', 'coop', 'extra_days', 'preTAX'] list_display = ('firstname', 'lastname', 'coopnumber', 'email', 'IVA_assignat', 'coop', 'extra_days', 'preTAX', 'date_joined') search_fields = ['coop_number', 'user__username', 'user__first_name'] list_filter = ('coop', First_Period_Filter, Closing_Filter ) def date_joined(self,obj): return obj.user.date_joined date_joined.short_description = _(u"Data d'alta") date_joined.admin_order_field = 'user__date_joined' def firstname(self,obj): return obj.user.first_name firstname.admin_order_field = 'user__first_name' firstname.short_description = _(u"Nom") def lastname(self,obj): return obj.user.last_name lastname.admin_order_field = 'user__last_name' lastname.short_description = _(u"Cognom") def coopnumber(self,obj): return "%04d" % obj.coop_number coopnumber.short_description = _(u"nº COOP") coopnumber.admin_order_field = 'coop_number' def first_period(self, obj): qs = period.objects.filter(date_close__gt = (obj.user.date_joined ) , first_day__lte = obj.user.date_joined + timedelta(days=9) ) if qs.count() > 0: return qs[0].period() return None first_period.short_description = _(u"Primer període") actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),]
class PeriodCloseUser(ModelAdmin): form = PeriodCloseForm change_form_template = 'admin/Invoices/Periodclose/change_form.html' change_list_template = 'admin/Invoices/Periodclose/change_list.html' radio_fields = {"refund_entity": HORIZONTAL} filter_horizontal = ('payment_entity',) list_display = ('edit_link', 'Sales_total', 'Sales_invoicedVAT', 'Sales_assignedVAT', 'Sales_totalVAT', 'Purchases_total', 'Purchases_expencedVAT', 'Purchases_IRPFRetention', 'Purchases_totalVAT', 'VAT_1', 'VAT_2', 'VAT_type', 'Savings', 'Savings_donation', 'TotalVAT', 'TotalIRPF', 'periodTAX', 'preTAX', 'periodTAXeuro', 'periodTAXeco', 'donation_euro', 'donation_eco', 'subTotalEuro', 'subTotalEco', 'TotalEuro', 'TotalEco', 'CESnumber', 'closed', 'paymentEntities', 'refund_entity') list_export = ('period', 'Sales_total', 'Sales_invoicedVAT', 'Sales_assignedVAT', 'Sales_totalVAT', 'Purchases_total', 'Purchases_expencedVAT', 'Purchases_IRPFRetention', 'Purchases_totalVAT', 'VAT_1', 'VAT_2', 'VAT_type', 'Savings', 'Savings_donation', 'TotalVAT', 'TotalIRPF', 'periodTAX', 'preTAX', 'periodTAXeuro', 'periodTAXeco', 'donation_euro', 'donation_eco', 'subTotalEuro', 'subTotalEco', 'TotalEuro', 'TotalEco', 'CESnumber', 'paymentEntities') fieldsets = ( (_('Emeses'), { 'fields': (('Sales_total', 'Sales_invoicedVAT'), ('Sales_totalVAT', 'Sales_assignedVAT')) }), (_('Despeses'), { 'fields': (('Purchases_total', 'Purchases_expencedVAT'), ('Purchases_totalVAT', 'Purchases_IRPFRetention')) }), (_('Seleccio IVA'), { 'fields': (('VAT_1', 'VAT_2'), 'VAT_type') }), (_('Estalvi'), { 'fields': ('Savings', 'Savings_donation') }), (_('Total impostos'), { 'fields': (('TotalVAT', 'TotalIRPF', ),) }), (_('Quota Trimestral'), { 'fields': ('periodTAX', 'preTAX', 'periodTAXeuro', 'periodTAXeco') }), (_('Aportacio a la CIC'), { 'fields': ('donation_euro', 'donation_eco') }), (_('Totals'), { 'fields': (('subTotalEuro', 'subTotalEco'), ('TotalEuro', 'TotalEco'), 'CESnumber') }), (_('Pagaments'), { 'fields': ('payment_entity',) }), (_('Tancar'), { 'fields': ('closed',) }), ) def VAT_1(self, obj): if obj.VAT_type == 1: vat = obj.Sales_invoicedVAT- obj.Purchases_expencedVAT return 0 if vat < 0 else vat return 0 VAT_1.decimal = True VAT_1.short_description = _(u'IVA Facturat - Despeses (€)') def VAT_2(self, obj): if obj.VAT_type == 2: vat = obj.Sales_assignedVAT - obj.Purchases_expencedVAT return 0 if vat < 0 else vat return 0 VAT_2.decimal = True VAT_2.short_description = _(u'IVA Assignat - Despeses (€)') def paymentEntities(self, obj): return ' / '.join([str(item.entity) for item in obj.payment_entity.all()]) paymentEntities.short_description = _("Pagaments") def __init__(self, *args, **kwargs): super(PeriodCloseUser, self).__init__(*args, **kwargs) self.list_display_links = (None, ) def get_form(self, request, obj=None, **kwargs): form = super(PeriodCloseUser, self).get_form(request, obj, **kwargs) user = request.user #PERIOD qs_Period = PeriodManager.get_opened_period( user ) if qs_Period.count() == 1: period_object = qs_Period[0] period_value = qs_Period[0].id elif request.GET.has_key('period__id__exact'): id_period = request.GET['period__id__exact'] qs_period = period.objects.get(id=id_period) period_object = qs_period period_value = qs_period.id else: return form #form.base_fields['period'].initial = period_object #form.base_fields['period'].widget.attrs['disabled'] = True #SALES #TODO: Query access to total amount (Can do this with calculated fields?) #qs_Sales = SalesInvoice.objects.filter(period=period_value, user=request.user).values('period').annotate(Sales_total_aux=Sum('value')) #value = qs_Sales.values('Sales_total_aux')[0].get('Sales_total_aux') if qs_Sales.values('Sales_total_aux').count() > 0 else 0 qs_Sales = SalesInvoice.objects.filter(period=period_value, user=request.user) sales_total = sales_invoicedVAT = sales_assignedVAT = sales_totalVAT = Decimal('0.00') for item in qs_Sales.all(): sales_total += item.value sales_invoicedVAT += item.invoicedVAT() sales_assignedVAT += item.assignedVAT() sales_totalVAT += item.total() form.base_fields['Sales_total'].initial = Decimal ( "%.2f" % sales_total ) form.base_fields['Sales_invoicedVAT'].initial = Decimal ( "%.2f" % sales_invoicedVAT ) form.base_fields['Sales_assignedVAT'].initial = Decimal ( "%.2f" % sales_assignedVAT ) form.base_fields['Sales_totalVAT'].initial = Decimal ( "%.2f" % sales_totalVAT ) form.base_fields['Sales_total'].widget.attrs['readonly'] = True form.base_fields['Sales_invoicedVAT'].widget.attrs['readonly'] = True form.base_fields['Sales_assignedVAT'].widget.attrs['readonly'] = True form.base_fields['Sales_totalVAT'].widget.attrs['readonly'] = True qs_Soci = Soci.objects.get(user=request.user) if period_object: enabledClosedCheckbox = period_object.date_open <= datetime.date(datetime.now()) <= (period_object.date_close + timedelta(days=qs_Soci.extra_days)) if not enabledClosedCheckbox: form.base_fields['closed'].widget.attrs['disabled'] = True #PURCHASES #qs_Purchase = PurchaseInvoice.objects.filter(period=period_value, user=request.user).values('period').annotate(Purchase_total_aux=Sum('value')) #value = Purchase.values('Purchase_total_aux')[0].get('Purchase_total_aux') if Purchase.values('Purchase_total_aux').count() > 0 else 0 qs_Purchase = PurchaseInvoice.objects.filter(period=period_value, user=request.user) purchases_total = purchases_expencedVAT = purchases_IRPFRetention = purchases_totalVAT = Decimal('0.00') for item in qs_Purchase.all(): purchases_total += item.value purchases_expencedVAT += item.expencedVAT() purchases_IRPFRetention += item.IRPFRetention() purchases_totalVAT += item.total() form.base_fields['Purchases_total'].initial = Decimal ( "%.2f" % purchases_total ) form.base_fields['Purchases_expencedVAT'].initial = Decimal ( "%.2f" % purchases_expencedVAT ) form.base_fields['Purchases_IRPFRetention'].initial = Decimal ( "%.2f" % purchases_IRPFRetention ) form.base_fields['Purchases_totalVAT'].initial = Decimal ( "%.2f" % purchases_totalVAT ) form.base_fields['Purchases_total'].widget.attrs['readonly'] = True form.base_fields['Purchases_expencedVAT'].widget.attrs['readonly'] = True form.base_fields['Purchases_IRPFRetention'].widget.attrs['readonly'] = True form.base_fields['Purchases_totalVAT'].widget.attrs['readonly'] = True #VATS totalVAT1 = Decimal ( "%.2f" % (sales_invoicedVAT - purchases_expencedVAT) ) if totalVAT1 < 0: totalVAT1 = 0 totalVAT2 = Decimal ( "%.2f" % (sales_assignedVAT - purchases_expencedVAT) ) if totalVAT2 < 0: totalVAT2 = 0 form.base_fields['VAT_1'].initial = totalVAT1 form.base_fields['VAT_2'].initial = totalVAT2 form.base_fields['VAT_1'].widget.attrs['readonly'] = True form.base_fields['VAT_2'].widget.attrs['readonly'] = True #QUOTA qs_Tax = periodTaxes.objects.filter(min_base__lte=sales_total, max_base__gte=sales_total) value = Decimal('0.00') if qs_Tax.count() == 1: value = Decimal ( "%.2f" % qs_Tax[0].taxId ) else: value = 'Consultar' form.base_fields['periodTAX'].initial = value form.base_fields['periodTAX'].widget.attrs['readonly'] = True qs_Soci = Soci.objects.get(user=user) form.base_fields['preTAX'].initial = qs_Soci.preTAX form.base_fields['preTAX'].widget.attrs['readonly'] = True #TOTALS form.base_fields['subTotalEuro'].widget.attrs['readonly'] = True form.base_fields['subTotalEco'].widget.attrs['readonly'] = True form.base_fields['TotalEuro'].widget.attrs['readonly'] = True form.base_fields['TotalEco'].widget.attrs['readonly'] = True return form def queryset(self, request): if request.user.is_superuser: return PeriodClose.objects.all() return PeriodClose.objects.filter(user=request.user) def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "period": kwargs["queryset"] = PeriodManager.get_opened_period( request.user ) return super(PeriodCloseUser, self).formfield_for_foreignkey(db_field, request, **kwargs) def save_model(self, request, obj, form, change): if getattr(obj, 'user', None) is None: obj.user = request.user qs_Period = PeriodManager.get_opened_period( request.user ) if qs_Period.count() > 0: obj.period = qs_Period[0] obj.save() #Reset preTAX qs_PeriodClose = PeriodClose.objects.filter(user=obj.user) needResetPreTax = obj.closed and obj.preTAX > 0 if needResetPreTax: qs_Soci = Soci.objects.get(user=request.user) qs_Soci.preTAX = 0 qs_Soci.save() def edit_link(self, obj): canEdit = False qs_Period = PeriodManager.get_opened_period( obj.user ) if qs_Period.count() == 1: canEdit = qs_Period[0] == obj.period and obj.closed == False if canEdit: return u'<a href="/cooper/%s/%s/%s">%s</a>' % ( obj._meta.app_label, obj._meta.module_name, obj.id, obj.period) else: return obj.period edit_link.allow_tags = True edit_link.short_description = _(u"Període") def exists_opened_period(self, user): qs_Period = PeriodManager.get_opened_period( user ) if qs_Period: if qs_Period.count() > 1: print "Error, there are more than one opened period. Please correct dates" return qs_Period.count() == 1 return False def exists_closed_period(self, user): #Check for existing period qs_Period = PeriodManager.get_opened_period( user ) if qs_Period.count() == 1: qs_PeriodClose = PeriodClose.objects.filter(user=user, period = qs_Period[0]) return qs_PeriodClose.count() == 1 return False def exists_closed_period_done(self, user): #Check for existing period qs_Period = PeriodManager.get_opened_period( user ) if qs_Period.count() == 1: qs_PeriodClose = PeriodClose.objects.filter(user=user, period = qs_Period[0]) exists = qs_PeriodClose.count() == 1 if exists: return qs_PeriodClose[0].closed == True return False def has_add_permission(self, request): return self.exists_opened_period( request.user ) and not self.exists_closed_period( request.user ) def has_change_permission(self, request, obj=None): if obj: return self.exists_opened_period( obj.user ) and self.exists_closed_period( obj.user ) and not self.exists_closed_period_done ( obj.user ) else: return True def get_actions(self, request): actions = super(PeriodCloseUser, self).get_actions(request) del actions['delete_selected'] return actions # to hide change and add buttons on main page: def get_model_perms(self, request): return {'historial':True, 'canAdd': self.exists_opened_period( request.user ) and not self.exists_closed_period( request.user ), 'canEdit': self.exists_opened_period( request.user ) and self.exists_closed_period( request.user ) and not self.exists_closed_period_done ( request.user )} class Media: js = ( 'PeriodClose.js', # app static folder ) actions = [export_as_csv_action("Exportar CSV", fields=list_export, header=True, force_fields=True),]
class PeriodCloseAdmin(ModelAdmin): form = PeriodCloseForm change_list_template = "admin/Invoices/Periodclose/change_listAdmin.html" list_filter = ('period', 'closed') list_per_page = 1000 search_fields = ['CESnumber', 'user__username', 'user__first_name'] list_display = ('SociNum', 'SociName', 'period', 'BaseSalesF', 'BaseSalesC', 'Sales_invoicedVAT', 'Sales_assignedVAT','Sales_totalVAT', 'BasePurchasesF', 'BasePurchasesC', 'Purchases_expencedVAT', 'Purchases_IRPFRetention', 'Purchases_totalVAT', 'VAT_1', 'VAT_2', 'Savings', 'VAT_type', 'Savings_donation', 'periodTAX', 'preTAX', 'periodTAXeuro', 'periodTAXeco', 'TotalVAT', 'TotalIRPF', 'donation_euro', 'donation_eco', 'subTotalEuro', 'subTotalEco', 'TotalEuro', 'TotalEco', 'closed', 'paymentEntities' ) radio_fields = {"refund_entity": HORIZONTAL} list_export = ('period', 'SociNum', 'SociName', 'Sales_total', 'Sales_invoicedVAT', 'Sales_assignedVAT', 'Sales_totalVAT', 'Purchases_total', 'Purchases_expencedVAT', 'Purchases_IRPFRetention', 'Purchases_totalVAT', 'VAT_1', 'VAT_2', 'VAT_type', 'Savings', 'Savings_donation', 'TotalVAT', 'TotalIRPF', 'periodTAX', 'periodTAXeuro', 'periodTAXeco', 'donation_euro', 'donation_eco', 'subTotalEuro', 'subTotalEco', 'TotalEuro', 'TotalEco', 'CESnumber', 'paymentEntities') fieldsets = ( (_(u"Nº COOP"), { 'fields': ('user',) }), (_(u'Període'), { 'fields': ('period',) }), (_('Emeses'), { 'fields': (('Sales_total', 'Sales_invoicedVAT'), ('Sales_totalVAT', 'Sales_assignedVAT')) }), (_('Despeses'), { 'fields': (('Purchases_total', 'Purchases_expencedVAT'), ('Purchases_totalVAT', 'Purchases_IRPFRetention')) }), (_('Seleccio IVA'), { 'fields': (('VAT_1', 'VAT_2'), 'VAT_type') }), (_('Estalvi'), { 'fields': ('Savings', 'Savings_donation') }), (_('Total impostos'), { 'fields': (('TotalVAT', 'TotalIRPF', ),) }), (_('Quota Trimestral'), { 'fields': ('periodTAX', 'preTAX', 'periodTAXeuro', 'periodTAXeco') }), (_('Aportacio a la CIC'), { 'fields': ('donation_euro', 'donation_eco') }), (_('Totals'), { 'fields': (('subTotalEuro', 'subTotalEco'), ('TotalEuro', 'TotalEco'), 'CESnumber') }), (_('Pagaments'), { 'fields': ('payment_entity',) }), (_('Tancar'), { 'fields': ('closed',) }), ) def VAT_1(self, obj): return obj.Sales_invoicedVAT- obj.Purchases_expencedVAT VAT_1.decimal = True VAT_1.short_description = _(u'IVA Facturat - Despeses (€)') def VAT_2(self, obj): return obj.Sales_assignedVAT - obj.Purchases_expencedVAT VAT_2.decimal = True VAT_2.short_description = _(u'IVA Assignat - Despeses (€)') def SociNum (self, obj): getSoci = Soci.objects.get(user=obj.user) return getSoci SociNum.short_description = _(u"Nº Soci") def SociName (self, obj): return obj.user.first_name + ' ' + obj.user.last_name SociName.short_description = _(u"Nom Soci") def BaseSalesF (self, obj): return obj.Sales_total BaseSalesF.short_description = _(u"Base Imposable segons Factures Emeses") def BaseSalesC (self, obj): return obj.Sales_total BaseSalesC.short_description = _(u"Base Imposable segons Càlcul Trimestral") def BasePurchasesF (self, obj): return obj.Purchases_total BasePurchasesF.short_description = _(u"Base Imposable segons Factures Despeses") def BasePurchasesC (self, obj): return obj.Purchases_totalVAT BasePurchasesC.short_description = _(u"Base Imposable segons Càlcul Trimestral") def paymentEntities(self, obj): return ' / '.join([str(item.entity) for item in obj.payment_entity.all()]) paymentEntities.short_description = _("Pagaments") def get_form(self, request, obj=None, **kwargs): form = super(PeriodCloseAdmin, self).get_form(request, obj, **kwargs) if obj: user = obj.user if request.user.is_superuser: period_object = obj.period period_value = obj.period.id else: qs_Period = PeriodManager.get_opened_period(obj.user) period_object = qs_Period[0] if qs_Period.count() == 1 else 0 period_value = qs_Period[0].id if qs_Period.count() == 1 else 0 #form.base_fields['period'].initial = period_object #form.base_fields['period'].widget.attrs['disabled'] = True #SALES #TODO: Query access to total amount (Can do this with calculated fields?) #qs_Sales = SalesInvoice.objects.filter(period=period_value, user=request.user).values('period').annotate(Sales_total_aux=Sum('value')) #value = qs_Sales.values('Sales_total_aux')[0].get('Sales_total_aux') if qs_Sales.values('Sales_total_aux').count() > 0 else 0 qs_Sales = SalesInvoice.objects.filter(period=period_value, user=request.user) sales_total = sales_invoicedVAT = sales_assignedVAT = sales_totalVAT = Decimal('0.00') for item in qs_Sales.all(): sales_total += item.value sales_invoicedVAT += item.invoicedVAT() sales_assignedVAT += item.assignedVAT() sales_totalVAT += item.total() form.base_fields['Sales_total'].initial = Decimal ( "%.2f" % sales_total ) form.base_fields['Sales_invoicedVAT'].initial = Decimal ( "%.2f" % sales_invoicedVAT ) form.base_fields['Sales_assignedVAT'].initial = Decimal ( "%.2f" % sales_assignedVAT ) form.base_fields['Sales_totalVAT'].initial = Decimal ( "%.2f" % sales_totalVAT ) form.base_fields['Sales_total'].widget.attrs['readonly'] = True form.base_fields['Sales_invoicedVAT'].widget.attrs['readonly'] = True form.base_fields['Sales_assignedVAT'].widget.attrs['readonly'] = True form.base_fields['Sales_totalVAT'].widget.attrs['readonly'] = True enabledClosedCheckbox = period_object.date_open <= datetime.date(datetime.now()) <= period_object.date_close if not enabledClosedCheckbox: form.base_fields['closed'].widget.attrs['disabled'] = True #PURCHASES #qs_Purchase = PurchaseInvoice.objects.filter(period=period_value, user=request.user).values('period').annotate(Purchase_total_aux=Sum('value')) #value = Purchase.values('Purchase_total_aux')[0].get('Purchase_total_aux') if Purchase.values('Purchase_total_aux').count() > 0 else 0 qs_Purchase = PurchaseInvoice.objects.filter(period=period_value, user=request.user) purchases_total = purchases_expencedVAT = purchases_IRPFRetention = purchases_totalVAT = Decimal('0.00') for item in qs_Purchase.all(): purchases_total += item.value purchases_expencedVAT += item.expencedVAT() purchases_IRPFRetention += item.IRPFRetention() purchases_totalVAT += item.total() form.base_fields['Purchases_total'].initial = Decimal ( "%.2f" % purchases_total ) form.base_fields['Purchases_expencedVAT'].initial = Decimal ( "%.2f" % purchases_expencedVAT ) form.base_fields['Purchases_IRPFRetention'].initial = Decimal ( "%.2f" % purchases_IRPFRetention ) form.base_fields['Purchases_totalVAT'].initial = Decimal ( "%.2f" % purchases_totalVAT ) form.base_fields['Purchases_total'].widget.attrs['readonly'] = True form.base_fields['Purchases_expencedVAT'].widget.attrs['readonly'] = True form.base_fields['Purchases_IRPFRetention'].widget.attrs['readonly'] = True form.base_fields['Purchases_totalVAT'].widget.attrs['readonly'] = True #VATS totalVAT1 = Decimal ( "%.2f" % (sales_invoicedVAT - purchases_expencedVAT) ) if totalVAT1 < 0: totalVAT1 = 0 totalVAT2 = Decimal ( "%.2f" % (sales_assignedVAT - purchases_expencedVAT) ) if totalVAT2 < 0: totalVAT2 = 0 form.base_fields['VAT_1'].initial = totalVAT1 form.base_fields['VAT_2'].initial = totalVAT2 form.base_fields['VAT_1'].widget.attrs['readonly'] = True form.base_fields['VAT_2'].widget.attrs['readonly'] = True #QUOTA qs_Tax = periodTaxes.objects.filter(min_base__lte=sales_total, max_base__gte=sales_total) value = Decimal('0.00') if qs_Tax.count() == 1: value = Decimal ( "%.2f" % qs_Tax[0].taxId ) else: value = 'Consultar' form.base_fields['periodTAX'].initial = value form.base_fields['periodTAX'].widget.attrs['readonly'] = True qs_Soci = Soci.objects.get(user=user) form.base_fields['preTAX'].initial = qs_Soci.preTAX form.base_fields['preTAX'].widget.attrs['readonly'] = True #TOTALS form.base_fields['subTotalEuro'].widget.attrs['readonly'] = True form.base_fields['subTotalEco'].widget.attrs['readonly'] = True form.base_fields['TotalEuro'].widget.attrs['readonly'] = True form.base_fields['TotalEco'].widget.attrs['readonly'] = True return form def changelist_view(self, request, extra_context=None): #Get totals response = super(PeriodCloseAdmin, self).changelist_view(request, extra_context) try: qs_queryset = response.context_data["cl"].query_set except: qs_queryset = None if qs_queryset and extra_context is None and request.GET.has_key('period__id__exact'): extra_context = {} id_period = request.GET['period__id__exact'] qs_period = period.objects.get(id=id_period) qs_all_coopers = Soci.objects.filter ( user__date_joined__lte = qs_period.date_close ) extra_context['Total_coopers'] = qs_all_coopers.count() extra_context['Total_coopers_url'] = "/admin/Invoices/soci/?first_period=" + id_period extra_context['Coopers_periodclose_closed'] = qs_all_coopers.filter(user__periodclose__period_id=id_period, user__periodclose__closed = True).count() extra_context['Coopers_periodclose_closed_url'] = "/admin/Invoices/soci/?closing=1&first_period=" + id_period extra_context['Coopers_periodclose'] = qs_all_coopers.filter(user__periodclose__period_id=id_period, user__periodclose__closed = False).count() extra_context['Coopers_periodclose_url'] = "/admin/Invoices/soci/?closing=2&first_period=" + id_period extra_context['Coopers_not_periodclose'] = qs_all_coopers.exclude(user__periodclose__period_id=id_period, user__periodclose__isnull=False).count() extra_context['Coopers_not_periodclose_url'] = "/admin/Invoices/soci/?closing=3&first_period=" + id_period return PeriodManager.filterbydefault(request, self, PeriodCloseAdmin, extra_context) class Media: js = ( 'PeriodClose.js', # app static folder ) actions = [export_as_csv_action("Exportar CSV", fields=list_export, header=True, force_fields=True),]
class PurchaseInvoiceUser(ModelAdmin): form = PurchaseInvoiceForm date_hierarchy = "date" fields = ['period', 'num', 'provider', 'date', 'value', 'percentExpencedVAT', 'percentIRPFRetention'] list_editable = ( 'period', 'num', 'provider', 'date', 'value', 'percentExpencedVAT', 'percentIRPFRetention') list_display = ('number', 'period', 'num', 'provider', 'date', 'value', 'percentExpencedVAT', 'expencedVAT', 'percentIRPFRetention', 'IRPFRetention', 'total') list_display_links = ( 'number', ) list_export = ('num', 'providerName', 'providerCif', 'date', 'value', 'percentExpencedVAT', 'expencedVAT', 'percentIRPFRetention', 'IRPFRetention', 'total') list_filter = ('period',) search_fields = ['num', 'provider__name', 'provider__CIF', 'provider__otherCIF'] actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),] change_list_template = 'admin/Invoices/PurchaseInvoices/change_list.html' def providerName(self, obj): return obj.provider.name providerName.short_description = _(u"Proveïdor") def providerCif(self, obj): if obj.provider.CIF: return obj.provider.CIF else: return obj.provider.otherCIF providerCif.short_description = _(u"Proveïdor (ID) ") def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "provider": kwargs["queryset"] = Provider.objects.filter(user=request.user) return super(PurchaseInvoiceUser, self).formfield_for_foreignkey(db_field, request, **kwargs) def get_form(self, request, obj=None, **kwargs): ModelForm = super(PurchaseInvoiceUser, self).get_form(request, obj=None, **kwargs) def form_wrapper(*args, **kwargs): a = ModelForm(*args, **kwargs) a.request = request return a return form_wrapper def get_changelist_form(self, request, **kwargs): kwargs['form'] = PurchaseInvoiceForm PurchaseInvoiceForm.request = request return super(PurchaseInvoiceUser, self).get_changelist_form(request, **kwargs) def save_model(self, request, obj, form, change): if getattr(obj, 'user', None) is None: obj.user = request.user obj.save() #New or Edit if obj: pk = obj.pk else: pk=0 if PurchaseInvoice.objects.filter( user=obj.user, period=obj.period, num=obj.num).exclude(pk=pk).count() > 0: messages.warning(request, _(u"Ja existeix una factura amb aquest número. S'ha gravat perquè l'IVA es diferent")) def queryset(self, request): if request.user.is_superuser: return PurchaseInvoice.objects.all() return PurchaseInvoice.objects.filter(user=request.user) def changelist_view(self, request, extra_context=None): #Calculate Totals response = super(PurchaseInvoiceUser, self).changelist_view(request, extra_context) try: qs_queryset = response.context_data["cl"].query_set except: qs_queryset = None if qs_queryset and extra_context is None: extra_context = {} purchases_total = purchases_expencedVAT = purchases_IRPFRetention = purchases_totalVAT = Decimal('0.00') for item in qs_queryset.all(): purchases_total += item.value purchases_expencedVAT += item.expencedVAT() purchases_IRPFRetention += item.IRPFRetention() purchases_totalVAT += item.total() extra_context['Purchases_total'] = Decimal ( "%.2f" % purchases_total ) extra_context['Purchases_expencedVAT'] = Decimal ( "%.2f" % purchases_expencedVAT ) extra_context['Purchases_IRPFRetention'] = Decimal ( "%.2f" % purchases_IRPFRetention ) extra_context['Purchases_totalVAT'] = Decimal ( "%.2f" % purchases_totalVAT ) return PeriodManager.filterbydefault(request, self, PurchaseInvoiceUser, extra_context)
class SalesInvoiceUser(ModelAdmin): form = SalesInvoiceForm model = SalesInvoice date_hierarchy = "date" change_list_template = 'admin/Invoices/SalesInvoices/change_list.html' readonly_fields = ('percentAssignedVAT', ) fields = ['period', 'num', 'client', 'date', 'value', 'percentInvoicedVAT'] list_display = ('period', 'number', 'num', 'client', 'date', 'value', 'percentInvoicedVAT', 'invoicedVAT', 'percentAssignedVAT', 'assignedVAT', 'total') list_display_links = ( 'number', ) list_editable = ('period', 'num', 'client', 'date', 'value', 'percentInvoicedVAT') list_export = ('period', 'number', 'clientName', 'clientCif', 'date', 'value', 'percentInvoicedVAT', 'invoicedVAT', 'percentAssignedVAT', 'assignedVAT', 'total') list_filter = ('period',) search_fields = ['num', 'client__name', 'client__CIF', 'client__otherCIF'] actions = [export_as_csv_action("Exportar CSV", fields=list_export, header=True, force_fields=True),] def clientName(self, obj): return obj.client.name clientName.short_description = _(u"Client") def clientCif(self, obj): if obj.client.CIF: return obj.client.CIF else: return obj.client.otherCIF clientCif.short_description = _(u"Client (ID) ") def save_model(self, request, obj, form, change): if getattr(obj, 'user', None) is None: obj.user = request.user obj.save() #New or Edit if obj: pk = obj.pk else: pk=0 if SalesInvoice.objects.filter( user=obj.user, period=obj.period, num=obj.num).exclude(pk=pk).count() > 0: messages.warning(request, _(u"Ja existeix una factura amb aquest número. S'ha gravat perquè l'IVA es diferent")) def queryset(self, request): if request.user.is_superuser: return SalesInvoice.objects.all() return SalesInvoice.objects.filter(user=request.user) def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "client": kwargs["queryset"] = Client.objects.filter(user=request.user) return super(SalesInvoiceUser, self).formfield_for_foreignkey(db_field, request, **kwargs) def get_form(self, request, obj=None, **kwargs): ModelForm = super(SalesInvoiceUser, self).get_form(request, obj=None, **kwargs) def form_wrapper(*args, **kwargs): a = ModelForm(*args, **kwargs) a.request = request return a return form_wrapper def get_changelist_form(self, request, **kwargs): kwargs['form'] = SalesInvoiceForm SalesInvoiceForm.request = request return super(SalesInvoiceUser, self).get_changelist_form(request, **kwargs) def changelist_view(self, request, extra_context=None): #Get totals response = super(SalesInvoiceUser, self).changelist_view(request, extra_context) try: qs_queryset = response.context_data["cl"].query_set except: qs_queryset = None if qs_queryset and extra_context is None: extra_context = {} sales_total = sales_invoicedVAT = sales_assignedVAT = sales_totalVAT = Decimal('0.00') for item in qs_queryset.all(): sales_total += item.value sales_invoicedVAT += item.invoicedVAT() sales_assignedVAT += item.assignedVAT() sales_totalVAT += item.total() extra_context['Sales_total'] = Decimal ( "%.2f" % sales_total ) extra_context['Sales_invoicedVAT'] = Decimal ( "%.2f" % sales_invoicedVAT ) extra_context['Sales_assignedVAT'] = Decimal ( "%.2f" % sales_assignedVAT ) extra_context['Sales_totalVAT'] = Decimal ( "%.2f" % sales_totalVAT ) #Filter by period return PeriodManager.filterbydefault(request, self, SalesInvoiceUser, extra_context)
class SalesInvoiceAdmin(ModelAdmin): form = SalesInvoiceForm date_hierarchy = "date" list_per_page = 1000 readonly_fields = ('percentAssignedVAT', ) fields = ['user', 'period', 'num', 'client', 'date', 'value', 'percentInvoicedVAT', 'percentAssignedVAT'] list_display = ('SociNum', 'SociName', 'clientName', 'ClientCIF', 'date', 'number', 'value', 'percentInvoicedVAT', 'percentAssignedVAT', 'invoicedVAT', 'assignedVAT', 'total') list_filter = ('period', ) search_fields = ['user__soci__coop_number', 'user__username', 'user__first_name'] list_export = ('SociNum', 'SociName', 'period', 'number', 'clientName', 'ClientCIF', 'date', 'value', 'percentInvoicedVAT', 'invoicedVAT', 'percentAssignedVAT', 'assignedVAT', 'total') change_list_template = 'admin/Invoices/SalesInvoices/change_list.html' def save_model(self, request, obj, form, change): if getattr(obj, 'user', None) is None: obj.user = request.user obj.save() def changelist_view(self, request, extra_context=None): #Get Totals response = super(SalesInvoiceAdmin, self).changelist_view(request, extra_context) try: qs_queryset = response.context_data["cl"].query_set except: qs_queryset = None if qs_queryset and extra_context is None: extra_context = {} sales_total = sales_invoicedVAT = sales_assignedVAT = sales_totalVAT = Decimal('0.00') for item in qs_queryset.all(): sales_total += item.value sales_invoicedVAT += item.invoicedVAT() sales_assignedVAT += item.assignedVAT() sales_totalVAT += item.total() extra_context['Sales_total'] = Decimal ( "%.2f" % sales_total ) extra_context['Sales_invoicedVAT'] = Decimal ( "%.2f" % sales_invoicedVAT ) extra_context['Sales_assignedVAT'] = Decimal ( "%.2f" % sales_assignedVAT ) extra_context['Sales_totalVAT'] = Decimal ( "%.2f" % sales_totalVAT ) #Filter by default return PeriodManager.filterbydefault(request, self, SalesInvoiceAdmin, extra_context) def SociNum (self, obj): getSoci = Soci.objects.get( user=obj.user ) return getSoci SociNum.short_description = _(u"Nº Soci") SociNum.admin_order_field = "user__soci__coop_number" def SociName (self, obj): return obj.user.first_name + ' ' + obj.user.last_name SociName.short_description = _(u"Nom Soci") SociName.admin_order_field = "user__first_name" def clientName (self, obj): return obj.client.name clientName.short_description = _(u"Client") def ClientCIF (self, obj): if obj.client.CIF: return obj.client.CIF else: return obj.client.otherCIF ClientCIF.short_description = _(u"Client (ID) ") actions = [export_as_csv_action("Exportar CSV", fields=list_export, header=True, force_fields=True),]
class paymentEntitiesAdmin(ModelAdmin): fields = ['entity', 'concept', 'number'] list_display = ('entity', 'concept', 'number') actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),]
class CoopAdmin(ModelAdmin): fields = ['name', ] list_display = ('name', ) actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),]
class periodTaxesAdmin(ModelAdmin): fields = ['taxId', 'min_base', 'max_base'] list_display = ('taxId', 'min_base', 'max_base') actions = [export_as_csv_action("Exportar CSV", fields=list_display, header=True, force_fields=True),]