Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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'
            })
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
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)
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
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
    })
Exemplo n.º 16
0
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')
Exemplo n.º 17
0
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})
Exemplo n.º 18
0
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')
Exemplo n.º 19
0
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')
Exemplo n.º 20
0
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')
Exemplo n.º 21
0
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')
Exemplo n.º 22
0
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')
Exemplo n.º 23
0
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')
Exemplo n.º 24
0
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())
Exemplo n.º 25
0
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')
Exemplo n.º 26
0
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')
Exemplo n.º 27
0
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')
Exemplo n.º 28
0
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')
Exemplo n.º 29
0
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')
Exemplo n.º 30
0
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)