class CobranzaDeleteView(PermissionRequiredMixin, DeleteView): """Vista para eliminar una cobranza.""" model = Cobranza permission_required = 'accounting.delete_cobranza' raise_exception = True success_message = _MESSAGE_SUCCESS_DELETE.format('cobranza') success_url = reverse_lazy('accounting:cobranza-list') def delete(self, request, *args, **kwargs): """Sobreescribe método para modificar facturas asociadas.""" self.object = self.get_object() # Las facturas asociadas pasan estar no cobradas cobranza_facturas = self.object.cobranza_facturas.all() for c_factura in cobranza_facturas: Factura.objects.filter(pk=c_factura.factura.id).update( cobrado=False) Fondo.objects.filter(factura=c_factura.factura).update( disponible=False) success_url = self.get_success_url() self.object.delete() messages.success(request, self.success_message) return HttpResponseRedirect(success_url) def handle_no_permission(self): """Redirige a la página de error 403 si no tiene los permisos y está autenticado.""" if self.raise_exception and self.request.user.is_authenticated: return error_403(self.request, MESSAGE_403) return redirect('login')
class FacturaProveedorCategoriaDeleteView(PermissionRequiredMixin, DeleteView): """Vista que elimina un categoría de factura.""" model = FacturaProveedorCategoria permission_required = 'core.delete_facturaproveedorcategoria' raise_exception = True success_message = _MESSAGE_SUCCESS_DELETE.format('categoría de factura') success_url = reverse_lazy('core:facturaproveedorcategoria-list') def delete(self, request, *args, **kwargs): """Muestra un mensaje sobre el resultado de la acción.""" messages.success(request, self.success_message) return super().delete(request, *args, **kwargs) def handle_no_permission(self): """Redirige a la página de error 403 si no tiene los permisos y está autenticado.""" if self.raise_exception and self.request.user.is_authenticated: return error_403(self.request, MESSAGE_403) return redirect('login')
class FacturaImputadaDeleteView(PermissionRequiredMixin, DeleteView): """Vista que elimina un costo.""" model = FacturaImputada permission_required = 'core.delete_facturaimputada' raise_exception = True success_message = _MESSAGE_SUCCESS_DELETE.format('factura imputada') success_url = reverse_lazy('core:facturaimputada-list') template_name = 'core/facturaimputada_confirm_delete.html' def delete(self, request, *args, **kwargs): """ Al eliminar la imputación la factura suma su total y queda como no cobrada. """ self.object = self.get_object() # Restablece nota de credito nota_de_credito = self.object.nota_de_credito nota_de_credito.cobrado = False nota_de_credito.total += nota_de_credito.monto_imputado nota_de_credito.monto_imputado = 0 nota_de_credito.save() # Restablece facturas facturas = self.object.facturas.all() for factura in facturas: factura.total += factura.monto_imputado factura.monto_imputado = 0 factura.cobrado = False factura.save() self.object.delete() success_url = self.get_success_url() messages.success(request, self.success_message) return HttpResponseRedirect(success_url) def handle_no_permission(self): """Redirige a la página de error 403 si no tiene los permisos y está autenticado.""" if self.raise_exception and self.request.user.is_authenticated: return error_403(self.request, MESSAGE_403) return redirect('login')
class FacturaProveedorDeleteView(PermissionRequiredMixin, DeleteView): """Vista que elimina una factura a proveedor.""" model = FacturaProveedor permission_required = 'core.delete_facturaproveedor' raise_exception = True success_message = _MESSAGE_SUCCESS_DELETE.format('factura a proveedor') success_url = reverse_lazy('core:facturaproveedor-list') def delete(self, request, *args, **kwargs): """Método que elimina los archivos relacionados.""" self.object = self.get_object() self.object.archivos.all().delete() self.object.delete() messages.success(request, self.success_message) return HttpResponseRedirect(self.success_url) def handle_no_permission(self): """Redirige a la página de error 403 si no tiene los permisos y está autenticado.""" if self.raise_exception and self.request.user.is_authenticated: return error_403(self.request, MESSAGE_403) return redirect('login')
class FacturaDeleteView(PermissionRequiredMixin, DeleteView): """Vista que elimina una factura.""" model = Factura permission_required = 'core.delete_factura' raise_exception = True success_message = _MESSAGE_SUCCESS_DELETE.format('factura del cliente') success_url = reverse_lazy('core:factura-list') template_name = 'core/facturacliente_confirm_delete.html' def delete(self, request, *args, **kwargs): """Sobreescribe método para eliminar una factura. Si elimino una factura y está asociada a una cobranza que la tiene por única factura, elimino la cobranza. """ self.object = self.get_object() cobranza_factura = CobranzaFactura.objects.filter( factura=self.object).first() if cobranza_factura: count = cobranza_factura.cobranza.cobranza_facturas.count() if count == 1: Cobranza.objects.get(pk=cobranza_factura.cobranza.pk).delete() # Elimino los archivos asociados self.object.archivos.all().delete() self.object.delete() messages.success(request, self.success_message) return HttpResponseRedirect(self.success_url) def handle_no_permission(self): """Redirige a la página de error 403 si no tiene los permisos y está autenticado.""" if self.raise_exception and self.request.user.is_authenticated: return error_403(self.request, MESSAGE_403) return redirect('login')