Esempio n. 1
0
        /// <summary>
        /// Generate All Invoices to a contract
        /// </summary>
        /// <param name="contract"></param>
        /// <returns></returns>
        //private void GenerateLoanFromContract(Contract contract, int qtdParcels)
        //{
        //    AccountManager accountManager = new AccountManager(this);


        //    //contract.FinancierOperation = accountManager.GetFinancierOperation(contract.CompanyId, Convert.ToInt32(contract.FinancierOperationId));

        //    contract.FinancierCondition = accountManager.GetFinancierConditionByParcelCount(contract.CompanyId, Convert.ToInt32(contract.FinancierOperationId), qtdParcels) ?? new FinancierCondition();


        //    if (contract.FinancierOperation.Brokerage.HasValue && contract.FinancierOperation.Brokerage.Value)
        //    {
        //        GenerateBrokerCommission(contract);
        //        GenerateRepresententBrokerComission(contract);
        //    }
        //    else
        //    {
        //        GenerateMonthlyInvoicesFromLoan(contract);
        //        GenerateBillToCustomerFromLoan(contract);
        //    }
        //}

        #region Calculate Commission

        //private void GenerateBrokerCommission(Contract contract)
        //{
        //    InvoicesManager manager = new InvoicesManager(this);


        //    Invoice invoice = new Invoice();
        //    invoice.CompanyId = contract.CompanyId;
        //    invoice.CustomerId = contract.CustomerId;
        //    invoice.EntryDate = contract.FirstParcelDueDate.Value.AddDays(contract.FinancierOperation.ReceiveDay).NextUtilDay();
        //    //invoice.Creditor = !String.IsNullOrEmpty(contract.ContractNumber) ? contract.ContractNumber : contract.ContractId.ToString();
        //    invoice.Description = "Comissão Contrato N. " + contract.ContractNumber;
        //    //invoice.InvoiceValue = Decimal.Zero;

        //    if (contract.InvoiceId.HasValue)
        //    {
        //        Invoice original_invoice = manager.GetInvoice(contract.CompanyId, contract.InvoiceId.Value);
        //        new ParcelsManager(this).DeleteAllNextInvoiceParcels(invoice, DateTime.Now);
        //        manager.Update(original_invoice, invoice);
        //    }
        //    else
        //    {
        //        //manager.Insert(invoice, null);
        //        manager.InsertRetrievingId(invoice);
        //        contract.InvoiceId = invoice.InvoiceId;
        //    }
        //    GenerateBrokerCommissionParcel(contract, invoice);


        //    DbContext.SubmitChanges();
        //}

        //private Parcel GenerateBrokerCommissionParcel(Contract contract, Invoice invoice)
        //{
        //    if (contract.FinancierOperation == null)
        //        return null;

        //    Parcel parcel = new Parcel();
        //    parcel.FinancierOperationId = contract.FinancierOperationId;
        //    parcel.CompanyId = contract.CompanyId;
        //    parcel.Description = "1/1";
        //    parcel.DueDate = contract.FirstParcelDueDate.Value.AddDays(contract.FinancierOperation.ReceiveDay).NextUtilDay(); ;

        //    parcel.Amount = CalculateNetWorth(contract) * contract.FinancierCondition.PercentCompany / 100m;

        //    if (contract.Insurance.HasValue) //seguro
        //        parcel.Amount += contract.Insurance.Value * Convert.ToDecimal(contract.FinancierOperation.InsurancePercent) / 100m;

        //    if (contract.MoneyReserves.HasValue) //pecúlio
        //        parcel.Amount += contract.MoneyReserves.Value * Convert.ToDecimal(contract.FinancierOperation.PeculiumPercent) / 100m;

        //    if (contract.MonthlyFee.HasValue)// mensalidade
        //        parcel.Amount += (contract.MonthlyFee.Value * contract.FinancierCondition.ParcelCount) * Convert.ToDecimal(contract.FinancierOperation.MonthlyFeePercent) / 100m;

        //    //invoice.InvoiceValue += parcel.Amount;
        //    parcel.InvoiceId = invoice.InvoiceId;
        //    new InvoicesManager(this).Insert(parcel, contract.FinancierCondition);

        //    return parcel;
        //}

        //private void GenerateRepresententBrokerComission(Contract contract)
        //{
        //    if (contract.RepresentantId.HasValue)
        //    {
        //        BillManager billManager = new BillManager(this);

        //        Bill bill = new Bill();
        //        bill.CompanyId = contract.CompanyId;
        //        bill.DocumentType = (Int32)DocumentType.others;
        //        bill.EntryDate = contract.FirstParcelDueDate.Value.AddDays(contract.FinancierOperation.ReceiveDay).NextUtilDay();

        //        //if (contract.RepresentantId.HasValue)
        //        //{
        //        //   // bill.Creditor = (contract.Representant.Profile != null ? contract.Representant.Profile.AbreviatedName : contract.Representant.LegalEntityProfile.CompanyName);
        //        //    bill.Description = "Comissão »" + bill.Creditor;
        //        //}


        //        billManager.Insert(bill, null);

        //        GenerateRepresententBrokerComissionParcel(contract, bill);

        //        DbContext.SubmitChanges();
        //    }
        //}

        //private Parcel GenerateRepresententBrokerComissionParcel(Contract contract, Bill bill)
        //{
        //    if (contract.FinancierOperation == null)
        //        return null;

        //    Parcel parcel = new Parcel();
        //    parcel.FinancierOperationId = contract.FinancierOperationId;
        //    parcel.CompanyId = contract.CompanyId;
        //    parcel.Description = "1/1";
        //    parcel.DueDate = contract.FirstParcelDueDate.Value.AddDays(contract.FinancierOperation.ReceiveDay).NextUtilDay(); ;

        //    parcel.Amount = CalculateNetWorth(contract) * contract.FinancierCondition.PercentRepresentant / 100m;

        //    if (contract.Insurance.HasValue) //seguro
        //        parcel.Amount += contract.Insurance.Value * Convert.ToDecimal(contract.FinancierOperation.InsurancePercentPerRepresentant) / 100m;

        //    if (contract.MoneyReserves.HasValue) //pecúlio
        //        parcel.Amount += contract.MoneyReserves.Value * Convert.ToDecimal(contract.FinancierOperation.PeculiumPercentPerRepresentant) / 100m;

        //    if (contract.MonthlyFee.HasValue)// mensalidade
        //        parcel.Amount += (contract.MonthlyFee.Value * contract.FinancierCondition.ParcelCount) * Convert.ToDecimal(contract.FinancierOperation.MonthlyFeePercentPerRepresentant) / 100m;

        //    //bill.BillValue += parcel.Amount;
        //    parcel.BillId = bill.BillId;
        //    new BillManager(this).Insert(parcel, contract.FinancierCondition);
        //    return parcel;
        //}

        #endregion

        private void GenerateBillToCustomerFromLoan(Contract contract)
        {
            var billManager     = new FinancialManager(this);
            var parcelsManager  = new ParcelsManager(this);
            var customerManager = new CustomerManager(this);

            var bill = new Bill();

            bill.CompanyId    = contract.CompanyId;
            bill.DocumentType = (Int32)DocumentType.others;

            Customer customer = customerManager.GetCustomer(contract.CustomerId, contract.CompanyId);

            //bill.Creditor = customer.Profile != null ? customer.Profile.Name : customer.LegalEntityProfile.CompanyName;
            //bill.Description = "Empréstimo p/ " + bill.Creditor;

            //bill.BillValue = contract.ContractValue.Value - CalculateOtherDebits(contract);
            billManager.Insert(bill, null);

            //
            var parcel = new Parcel();

            parcel.FinancierOperationId = contract.FinancierOperationId;
            parcel.CompanyId            = contract.CompanyId;
            parcel.BillId = bill.BillId;

            parcel.Description = "1/1";
            parcel.DueDate     = contract.BeginDate.NextUtilDay();
            //parcel.Amount = bill.BillValue.Value;
            parcelsManager.Insert(parcel, null);
        }
Esempio n. 2
0
        /// <summary>
        /// this method save the receipt and its items
        /// </summary>
        /// <param name="original_entity">this parameter is used in update operation</param>
        /// <param name="entity">this parameter always is used</param>
        /// <param name="lstReceiptItem">this parameter contai the list of ReceiptItems</param>
        public void SaveReceipt(Receipt original_entity, Receipt entity, List <ReceiptItem> lstReceiptItem,
                                List <Int32> lstServiceOrder, List <Int32> lstSale)
        {
            //Managers
            var accountManager   = new AccountManager(this);
            var parcelsManager   = new ParcelsManager(this);
            var financialManager = new FinancialManager(this);
            var invoice          = new Invoice();
            var bill             = new Bill();

            entity.ModifiedDate = DateTime.Now;
            if (original_entity.ReceiptId == 0)
            {
                //insert the Receipt
                //if (ExistReceiptNumber(entity.CompanyId, Convert.ToInt32(entity.ReceiptNumber)))
                //    throw new InvalidOperationException();

                DbContext.Receipts.InsertOnSubmit(entity);
            }
            else
            {
                //update
                original_entity.CopyPropertiesFrom(entity);

                //delete all receiptItens
                DeleteReceiptItemsByReceipt(entity.ReceiptId, entity.CompanyId);
            }

            DbContext.SubmitChanges();

            foreach (ReceiptItem item in lstReceiptItem)
            {
                item.ReceiptId = entity.ReceiptId;
                item.CompanyId = entity.CompanyId;
                InsertReceiptItem(item);
            }
            ////insert the ReceiptItems
            //for (int i = 0; i < lstReceiptItem.Count; i++)
            //{
            //    lstReceiptItem[i].ReceiptId = entity.ReceiptId;
            //    InsertReceiptItem(lstReceiptItem[i]);
            //}

            if (entity.SupplierId.HasValue)
            {
                bill.CompanyId      = entity.CompanyId;
                bill.EntryDate      = DateTime.Now;
                bill.SupplierId     = entity.SupplierId;
                bill.DocumentNumber = Convert.ToString(entity.ReceiptNumber);
                //if (entity.ReceiptValue.HasValue)
                //    bill.BillValue = entity.ReceiptValue.Value;
                financialManager.Insert(bill, null);
            }
            else
            {
                SetReceiptIdInSale(entity.CompanyId, lstSale, entity.ReceiptId);
                SetReceiptIdInServiceOrder(entity.CompanyId, lstServiceOrder, entity.ReceiptId);
            }

            DbContext.SubmitChanges();

            if (bill.BillId != 0)
            {
                //insert the parcel
                var parcel = new Parcel();
                parcel.PaymentMethodId = PaymentMethod.Cash;
                parcel.CompanyId       = entity.CompanyId;
                parcel.DueDate         = DateTime.Now;
                //parcel.Amount = bill.BillValue.Value;
                parcel.BillId = bill.BillId;

                parcelsManager.Insert(parcel,
                                      accountManager.GetFinancierConditionByParcelCount(entity.CompanyId,
                                                                                        PaymentMethod.Cash, 1));
            }

            DbContext.SubmitChanges();
        }