def employee_save(request, id=None): instance = get_object_or_404(Employee, pk=get_decoded_id(id)) if id else None form = EmployeeCreationForm(request.POST or None, instance=instance) next = request.GET.get('next', reverse('Employees:employee_index')) if request.method == 'POST': if form.is_valid(): instance = form.save(commit=False) if id: instance.updated_by = request.user else: instance.created_by = request.user instance.save() messages.success( request, "Employee has been successfully " + ("updated" if id else "added") + "!") return redirect('Employees:employee_detail', instance.get_encoded_id()) contex = { "form": form, 'title': 'Update Employee' if id else 'Add Employee', 'next': next } return render(request, "employee/save.html", contex)
def expenditure_save(request, id=None): expenditure = get_object_or_404(Expenditure, pk=get_decoded_id(id)) if id else None queryset = expenditure.expenditure_details.all( ) if id else ExpenditureDetail.objects.none() form = ExpenditureForm(request.POST or None, instance=expenditure) formset = ExpenditureDetailFormset(request.POST or None, queryset=queryset) if request.method == 'POST': if form.is_valid() and formset.is_valid(): expenditure = form.save(commit=False) if id: expenditure.updated_by = request.user else: expenditure.created_by = request.user expenditure.save() instances = formset.save(commit=False) for instance in instances: instance.expenditure = expenditure formset.save() messages.success( request, "Expenditure has been successfully " + ("updated" if id else "created")) return redirect('Accounts:expenditure_index') else: messages.error( request, "Expenditure has not been successfully " + ("updated" if id else "created")) contex = {'form': form, 'formset': formset, 'title': 'Expenditure'} return render(request, 'expenditure/save.html', contex)
def client_save(request, id=None): client = get_object_or_404(Client, pk=get_decoded_id(id)) if id else None client_form = ClientForm(request.POST or None, instance=client) concern_person_formset = ConcernPersonFormSet(instance=client) if request.method == 'POST': if client_form.is_valid(): client = client_form.save(commit=False) if id: client.updated_by = request.user else: client.created_by = request.user concern_person_formset = ConcernPersonFormSet(request.POST, instance=client) if concern_person_formset.is_valid(): client.save() concern_person_formset.save() messages.success( request, "Client has been successfully " + ("created" if id == None else "updated")) return redirect('Clients:client_index') messages.error( request, "Client Information has not been successfully " + ("created" if id == None else "updated")) contex = { "client_form": client_form, 'concern_person_formset': concern_person_formset, 'title': 'Update Client' if id else 'Add Client Information' } return render(request, "client/save.html", contex)
def user_save(request, id = None): if id: instance = User.objects.get(pk = get_decoded_id(id)) instance.password = "" form = UserUpdateForm(request.POST or None, instance = instance) else: form = UserRegisterForm(request.POST or None) if request.method == 'POST': if form.is_valid(): user = form.save() if id: user.updated_by = request.user else: user.created_by = request.user user.save() messages.success(request, "User has been successfully "+ ("updated" if id else "added") +"!") return redirect('Auth:user_index') else: messages.error(request, "User has not been successfully "+ ("updated" if id else "added") +"!") contex = { 'form': form, 'title': 'Update User' if id else 'Add User' } return render(request, 'user/save.html', contex)
def contract_agreement_detail(request, id): contract_agreement = get_object_or_404(ContractAgreement, pk=get_decoded_id(id)) contex = { 'title': 'Contract Agreement Detail', 'contract_agreement': contract_agreement, } return render(request, 'contract_agreement/detail.html', contex)
def collection_delete(request, id): collection = get_object_or_404(Collection, pk=get_decoded_id(id)) invoice = collection.invoice collection.delete() invoice.status = 1 invoice.save() messages.success(request, "Collection has been successfully deleted!") return redirect('Accounts:collection_index') pass
def contract_agreement_save(request, id=None): contract_agreement = get_object_or_404( ContractAgreement, pk=get_decoded_id(id)) if id else None contract_agreement_form = ContractAgreementForm( request.POST or None, instance=contract_agreement) if request.method == 'POST': contract_agreement_form.fields[ 'product'].queryset = Product.objects.filter( portfolio=Portfolio.objects.get(pk=request.POST['portfolio'])) if contract_agreement_form.is_valid(): contract_agreement = contract_agreement_form.save(commit=False) contract_agreement.bank_account = contract_agreement.bank_account if contract_agreement_form.cleaned_data[ 'mode_of_payment'] == 'Bank' else None contract_agreement.vat = contract_agreement.vat if contract_agreement_form.cleaned_data[ 'is_vat_included'] else None if id: contract_agreement.updated_by = request.user else: contract_agreement.created_by = request.user contract_agreement_purpose_formset = ContractAgreementPurposeFormSet( request.POST, instance=contract_agreement, prefix='purpose') contract_agreement_concern_person_formset = ContractAgreementConcernPersonFormSet( request.POST, instance=contract_agreement, prefix='concern_person') if contract_agreement_purpose_formset.is_valid( ) and contract_agreement_concern_person_formset.is_valid(): contract_agreement_form.save() contract_agreement_purpose_formset.save() contract_agreement_concern_person_formset.save() return redirect('Invoicing:bill_schedule_save', contract_agreement.get_encoded_id()) messages.error( request, "Contract agreement has not been successfully " + ("created" if id == None else "updated")) else: contract_agreement_purpose_formset = ContractAgreementPurposeFormSet( instance=contract_agreement, prefix='purpose') contract_agreement_concern_person_formset = ContractAgreementConcernPersonFormSet( instance=contract_agreement, prefix='concern_person') contex = { 'contract_agreement_form': contract_agreement_form, 'contract_agreement_purpose_formset': contract_agreement_purpose_formset, 'contract_agreement_concern_person_formset': contract_agreement_concern_person_formset, 'title': 'Edit Contract Agreement' if id else 'Add Contract Agreement' } return render(request, 'contract_agreement/save.html', contex)
def invoice_view(request, id): invoice = get_object_or_404(Invoice, pk=get_decoded_id(id)) contract_agreement, bill_schedules = invoice.contract_agreement, invoice.bill_schedules.all( ) invoice_body = generate_invoice(contract_agreement, bill_schedules, str(invoice.date), invoice.subject, invoice.invoice_no) contex = { 'invoice': invoice, 'invoice_body': str(invoice_body), 'title': 'Invoice' } return render(request, 'invoice/view.html', contex)
def product_save(request, id=None): product = None if id == None else Product.objects.get( pk=get_decoded_id(id)) form = ProductCreationForm(request.POST or None, instance=product) if request.method == 'POST': if form.is_valid(): product = form.save(commit=False) if id: product.updated_by = request.user else: product.created_by = request.user if product.status: product.end_date = None else: product.end_date = datetime.now() product.save() concern_persons = form.cleaned_data.get('concern_persons') for concern_person in concern_persons: product_concern_person, created = ProductConcernPerson.objects.get_or_create( product=product, employee=concern_person) product_concern_person.save() ProductConcernPerson.objects.filter(product=product).exclude( employee__in=concern_persons).delete() purposes = form.cleaned_data.get('purposes') for purpose in purposes: amount = request.POST.get('purpose_' + str(purpose.id)) product_purpose, created = ProductPurpose.objects.get_or_create( product=product, purpose=purpose) product_purpose.amount = amount product_purpose.save() ProductPurpose.objects.filter(product=product).exclude( purpose__in=purposes).delete() messages.success( request, "Product has been successfully " + ("created" if id == None else "updated")) return redirect('Portfolio:product_index') else: messages.error( request, "Product has not been successfully " + ("created" if id == None else "updated")) contex = { 'form': form, 'title': 'Add Product' if id == None else 'Update Product' } return render(request, 'product/save.html', contex)
def invoice_save(request, id=None): invoice = get_object_or_404(Invoice, pk=get_decoded_id(id)) if id else None if request.method == 'POST': invoice = invoice if id else Invoice() invoice.subject = request.POST['subject'] invoice.date = request.POST['invoice_date'] bill_schedules = BillSchedule.objects.filter( pk__in=request.POST.getlist('bill_schedule')) total_amount = bill_schedules.aggregate(Sum('amount')) if id: invoice.bill_schedules.all().update(invoice=None) invoice.updated_by = request.user else: invoice.contract_agreement = ContractAgreement.objects.get( pk=int(request.POST['contract_agreement'])) invoice.invoice_sequence = request.POST['invoice_sequence'] invoice.created_by = request.user invoice.invoice_no = create_invoice_no(invoice.contract_agreement, invoice.date, invoice.invoice_sequence) invoice.amount = total_amount['amount__sum'] invoice.save() bill_schedules.update(invoice=invoice) return redirect('Invoicing:invoice_view', invoice.get_encoded_id()) if id: contract_agreement_purposes = invoice.contract_agreement.purposes.all() bill_schedules = BillSchedule.objects.filter( invoice=None, contract_agreement_purpose__in=contract_agreement_purposes, schedule_date__lte=datetime.now().date() + relativedelta(days=7)).order_by('schedule_date') bill_schedules = invoice.bill_schedules.all() | bill_schedules return render( request, 'invoice/edit.html', { 'invoice': invoice, 'bill_schedules': bill_schedules, 'title': 'Edit Invoice' }) else: latest_invoice = Invoice.objects.all().last() invoice_sequence = latest_invoice.invoice_sequence + 1 if latest_invoice else 1 contract_agreements = ContractAgreement.objects.active() return render( request, 'invoice/save.html', { 'contract_agreements': contract_agreements, 'invoice_sequence': invoice_sequence, 'title': 'Generate Invoice' })
def invoice_template_save(request, id = None): invoice_template = None if id == None else Invoicetemplate.objects.get(pk = get_decoded_id(id)) form = InvoiceTemplateForm(request.POST or None, instance = invoice_template) if request.method == 'POST': if form.is_valid(): invoice_template = form.save(commit = False) if id: invoice_template.updated_by = request.user else: invoice_template.created_by = request.user invoice_template.save() messages.success(request, "Invoice template has been successfully "+ ("created" if id==None else "updated")) return redirect('Settings:invoice_template_index') else: messages.error(request, "Invoice template has not been successfully "+ ("created" if id==None else "updated")) context = { 'form': form, 'title': 'Create Template' if id==None else 'Update Template' } return render(request, 'invoice_template/save.html', context)
def tax_save(request, id=None): instance = get_object_or_404(Tax, pk=get_decoded_id(id)) if id else None form = TaxForm(request.POST or None, instance=instance) #next = request.GET.get('next') if request.method == 'POST': if form.is_valid(): instance = form.save(commit=False) if id: instance.updated_by = request.user.id else: instance.created_by = request.user.id instance.save() messages.success( request, "Employee has been successfully " + ("updated" if id else "added") + "!") return redirect('Taxes:tax_detail', instance.get_encoded_id()) contex = { "form": form, 'title': 'Update Employee' if id else 'Add Employee', #'next': next } return render(request, "tax/save.html", contex)
def account_save(request, id = None): account = None if id == None else Bankaccount.objects.get(pk = get_decoded_id(id)) form = BankAccountForm(request.POST or None, instance = account) if request.method == 'POST': if form.is_valid(): account = form.save(commit = False) if id: account.updated_by = request.user else: account.created_by = request.user account.save() messages.success(request, "Account Details has been successfully "+ ("saved" if id==None else "updated")) return redirect('Settings:account_index') else: messages.error(request, "Account Details has not been successfully "+ ("saved" if id==None else "updated")) context = { 'form': form, 'title': 'Add Bank Account Details' if id==None else 'Update Bank Account Details' } return render(request, 'account/save.html', context)
def holiday_save(request, id = None): holiday = None if id == None else Holiday.objects.get(pk = get_decoded_id(id)) form = HolidayForm(request.POST or None, instance = holiday) if request.method == 'POST': if form.is_valid(): holiday = form.save(commit = False) if id: holiday.updated_by = request.user else: holiday.created_by = request.user holiday.save() messages.success(request, "Holiday Details has been successfully "+ ("saved" if id==None else "updated")) return redirect('Settings:holiday_index') else: messages.error(request, "Holiday Details has not been successfully "+ ("saved" if id==None else "updated")) context = { 'form': form, 'title': 'Add Holiday Details' if id==None else 'Update Holiday Details' } return render(request, 'holiday/save.html', context)
def employee_detail(request, id): employee = get_object_or_404(Employee, pk=get_decoded_id(id)) if request.method == 'POST': old_image = employee.profile_image profile_image_form = ProfileImageForm(request.POST or None, request.FILES or None, instance=employee) if profile_image_form.is_valid(): employee = profile_image_form.save() if old_image: import os os.remove(old_image.path) messages.success(request, "Profile image has been successfully updated") return redirect('Employees:employee_detail', employee.get_encoded_id()) else: messages.success(request, "Problem in uploading image.Try again") profile_image_form = ProfileImageForm() return render(request, 'employee/detail.html', { 'employee': employee, 'profile_image_form': profile_image_form })
def invoice_template_delete(request, id): invoice_template = Invoicetemplate.objects.get(pk = get_decoded_id(id)) invoice_template.delete() messages.success(request, "Template has been successfully deleted") return redirect('Settings:invoice_template_index')
def invoice_template_detail(request, id): invoice_template = get_object_or_404(Invoicetemplate, pk = get_decoded_id(id)) return render(request, 'invoice_template/detail.html', {'invoice_template': invoice_template})
def holiday_delete(request, id): holiday = Holiday.objects.get(pk = get_decoded_id(id)) holiday.delete() messages.success(request, "Holiday Details has been successfully deleted") return redirect('Settings:holiday_index')
def contract_agreement_delete(request, id): get_object_or_404(ContractAgreement, pk=get_decoded_id(id)).delete() messages.success(request, "ContractAgreement has been successfully deleted") return redirect('Invoicing:contract_agreement_index')
def portfolio_delete(request, id): portfolio = Portfolio.objects.get(pk=get_decoded_id(id)) portfolio.delete() messages.success(request, "Portfolio has been successfully deleted") return redirect('Portfolio:portfolio_index')
def product_delete(request, id): product = Product.objects.get(pk=get_decoded_id(id)) product.delete() messages.success(request, "Product has been successfully deleted") return redirect('Portfolio:product_index')
def employee_delete(request, id): employee = get_object_or_404(Employee, pk=get_decoded_id(id)) employee.delete() messages.success(request, "Employee has been successfully deleted!") return redirect('Employees:employee_index')
def invoice_delete(request, id): invoice = get_object_or_404(Invoice, pk=get_decoded_id(id)) bill_schedules = invoice.bill_schedules.all().update(invoice=None) invoice.delete() messages.success(request, "Invoice has been successfully deleted") return redirect('Invoicing:invoice_index')
def invoice_submit(request, id): invoice = get_object_or_404(Invoice, pk=get_decoded_id(id)) invoice.status = 1 invoice.save() messages.success(request, "Invoice has been successfully submitted") return redirect('Invoicing:invoice_view', invoice.get_encoded_id())
def account_delete(request, id): account = Bankaccount.objects.get(pk = get_decoded_id(id)) account.delete() messages.success(request, "Account Details has been successfully deleted") return redirect('Settings:account_index')
def expense_purpose_delete(request, id): get_object_or_404(ExpensePurpose, pk=get_decoded_id(id)).delete() messages.success(request, "Expense Purpose has been successfully deleted") return redirect('Accounts:expense_purpose_index')
def purpose_delete(request, id): purpose = Purpose.objects.get(pk=get_decoded_id(id)) purpose.delete() messages.success(request, "Purpose has been successfully deleted") return redirect('Portfolio:purpose_index')
def client_delete(request, id): client = get_object_or_404(Client, pk=get_decoded_id(id)) client.delete() messages.success(request, "Client has been successfully deleted!") return redirect('Clients:client_index')
def designation_delete(request, id): designation = get_object_or_404(Designation, pk=get_decoded_id(id)) designation.delete() messages.success(request, "Designation has been successfully deleted") return redirect('Employees:designation_index')
def bill_schedule_save(request, contract_agreement_id): contract_agreement = get_object_or_404( ContractAgreement, pk=get_decoded_id(contract_agreement_id)) contract_agreement_purposes = contract_agreement.purposes.filter( amount_per_installment__isnull=True) contract_agreement_purposes_with_per_installment = contract_agreement.purposes.filter( amount_per_installment__isnull=False) deleted_bill_schedule_list = [] formset_list = [] for contract_agreement_purpose in contract_agreement_purposes: existing_bill_schedules = contract_agreement_purpose.bill_schedules.all( ) len_existing_bill_schedules = existing_bill_schedules.count() num_extra_form = contract_agreement_purpose.num_installment - contract_agreement_purpose.bill_schedules.count( ) if num_extra_form < 0: deleted_bill_schedule_list += existing_bill_schedules[ contract_agreement_purpose.num_installment:] initial = [{ 'particular': contract_agreement_purpose.purpose.name }] * num_extra_form formset = BillScheduleFormSet( request.POST or None, instance=contract_agreement_purpose, initial=initial, prefix=contract_agreement_purpose.purpose, contract_amount=contract_agreement_purpose.amount) formset.extra = num_extra_form formset_list.append({ 'contract_agreement_purpose': contract_agreement_purpose, 'formset': formset }) bill_installment_config_form_list = [] for contract_agreement_purpose in contract_agreement_purposes_with_per_installment: if BillInstallmentConfig.objects.filter( contract_agreement_purpose=contract_agreement_purpose).exists( ): bill_installment_config = contract_agreement_purpose.bill_installment_config form = BillInstallmentConfigForm( request.POST or None, prefix=contract_agreement_purpose.purpose, instance=bill_installment_config) else: form = BillInstallmentConfigForm( request.POST or None, prefix=contract_agreement_purpose.purpose, initial={ 'contract_agreement_purpose': contract_agreement_purpose.id, 'particular': contract_agreement_purpose }) bill_installment_config_form_list.append({ 'contract_agreement_purpose': contract_agreement_purpose, 'form': form }) if request.method == 'POST': if form_list_valid(bill_installment_config_form_list ) and formset_list_valid(formset_list): bill_schedules = [] for index, formset_dic in enumerate(formset_list): for form in formset_dic['formset']: bill_schedule = form.save(commit=False) bill_schedule.schedule_date = get_work_day( bill_schedule.schedule_date) bill_schedule.installment_num = index + 1 bill_schedules.append(bill_schedule) for form_dic in bill_installment_config_form_list: num_installment = form_dic[ 'contract_agreement_purpose'].num_installment bill_installment_config = form_dic['form'].save(commit=False) bill_installment_config.contract_agreement_purpose = form_dic[ 'contract_agreement_purpose'] bill_installment_config.save() bill_schedule_list = bill_installment_config.bill_schedules.all( ) length = len(bill_schedule_list) if length > num_installment: bill_schedule_list, deleted_bill_schedule_list = bill_schedule_list[ 0: num_installment], deleted_bill_schedule_list + bill_schedule_list[ num_installment:] elif length < num_installment: new_bill_schedule_list = [ BillSchedule( contract_agreement_purpose=bill_installment_config. contract_agreement_purpose) for _ in range(num_installment - length) ] bill_schedule_list = list( bill_schedule_list) + new_bill_schedule_list for i, bill_schedule in enumerate(bill_schedule_list): bill_schedule.installment_num = i + 1 bill_schedule.particular = bill_installment_config.particular bill_schedule.schedule_date = get_work_day( bill_installment_config.schedule_start_date + relativedelta(months=i)) bill_schedule.amount = form_dic[ 'contract_agreement_purpose'].amount_per_installment bill_schedule.bill_installment_config = bill_installment_config bill_schedules.append(bill_schedule) try: with transaction.atomic(): for bill_schedule in deleted_bill_schedule_list: bill_schedule.delete() for bill_schedule in bill_schedules: bill_schedule.save() return redirect('Invoicing:contract_agreement_index') except IntegrityError: messages.error( request, "Bill schedules have not been successfully created") contex = { 'contract_agreement': contract_agreement, 'title': 'Bill Schedule', 'formsets': formset_list, 'bill_installment_config_forms': bill_installment_config_form_list } return render(request, 'bill_schedule/save.html', contex)