示例#1
0
        public virtual async Task <HttpResponseMessage> ChangeChequeStatus([FromBody] ChequesAndStatsVM chequesAndStatsVM)
        {
            var organId = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId);

            ChequeVM chequeVM = new ChequeVM();

            switch (chequesAndStatsVM.change)
            {
            // وصول چک پرداختی
            case "PaidChequeReceipt":
            {
                chequesAndStatsVM.description = " وصول چک پرداختی";
                var doucument = await CreateDocumentPaidChequeReceipt(chequesAndStatsVM, organId);

                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.Passed;
                chequeRule.Update(cheque);
                await chequeRule.SaveChangesAsync();

                DocumentRule documentRule = new DocumentRule();
                await documentRule.InsertAsync(doucument, organId);

                await documentRule.SaveChangesAsync();



                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }

            // وصول چک دریافتی
            case "ReceivedChequeReceipt":
            {
                chequesAndStatsVM.description = " وصول چک دریافتی";

                var doucument = await CreateDocumentChangeChequeStatus(chequesAndStatsVM, organId);


                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.Passed;
                chequeRule.Update(cheque);

                await chequeRule.SaveChangesAsync();

                DocumentRule documentRule = new DocumentRule();
                await documentRule.InsertAsync(doucument, organId);

                await documentRule.SaveChangesAsync();


                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }

            // وصول چک واگذار شده به بانک
            case "DepositChequeReceipt":
            {
                chequesAndStatsVM.description = "وصول چک واگذار شده به بانک";
                var doucument = await CreateDocumentDepositChequeReceipt(chequesAndStatsVM, organId);

                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.Passed;
                chequeRule.Update(cheque);

                await chequeRule.SaveChangesAsync();

                DocumentRule documentRule = new DocumentRule();
                await documentRule.InsertAsync(doucument, organId);

                await documentRule.SaveChangesAsync();


                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }

            // واگذاری چک به بانک
            case "ReceivedChequeDeposit":
            {
                chequesAndStatsVM.description = "واگذاری چک به بانک";

                var doucument = await CreateDocumentReceivedChequeDeposit(chequesAndStatsVM, organId);

                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.InProgress;

                BankRule bankRule = new BankRule();
                var      banks    = await bankRule.GetAllByOrganIdAsync(organId);

                var bank = banks.Where(x => x.Code == chequesAndStatsVM.detailAccount.Code).SingleOrDefault();
                cheque.DepositBankId = bank.ID;

                chequeRule.Update(cheque);
                await chequeRule.SaveChangesAsync();

                DocumentRule documentRule = new DocumentRule();
                await documentRule.InsertAsync(doucument, organId);

                await documentRule.SaveChangesAsync();



                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }

            // عودت دادن چک پرداختی
            case "PaidChequeReturn":
            {
                //chequesAndStatsVM.description = "عودت دادن چک پرداختی";

                var doucument = await CreateDocumentPaidChequeReturn(chequesAndStatsVM, organId);

                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.ChequeReturn;
                chequeRule.Update(cheque);

                await chequeRule.SaveChangesAsync();

                DocumentRule documentRule = new DocumentRule();
                await documentRule.InsertAsync(doucument, organId);

                await documentRule.SaveChangesAsync();


                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }

            // عودت دادن چک دریافتی
            case "ReceivedChequeReturn":
            {
                chequesAndStatsVM.description = "عودت دادن چک دریافتی";

                var doucument = await CreateDocumentReceivedChequeReturn(chequesAndStatsVM, organId);

                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.ChequeReturn;
                chequeRule.Update(cheque);

                await chequeRule.SaveChangesAsync();

                DocumentRule documentRule = new DocumentRule();
                await documentRule.InsertAsync(doucument, organId);

                await documentRule.SaveChangesAsync();


                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }

            // تغییر وضعیت چک پرداختی به پاس نشده
            case "PaidChequeToNotPass":
            {
                chequesAndStatsVM.description = "تغییر وضعیت چک پرداختی به پاس نشده";
                chequesAndStatsVM.date        = PersianDateUtils.ToPersianDate(DateTime.Now);

                var doucument = await CreateDocumentPaidChequeToNotPass(chequesAndStatsVM, organId);

                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.Normal;
                chequeRule.Update(cheque);
                await chequeRule.SaveChangesAsync();

                DocumentRule documentRule = new DocumentRule();
                await documentRule.InsertAsync(doucument, organId);

                await documentRule.SaveChangesAsync();


                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }

            // تغییر وضعیت چک دریافتی به وصول نشده
            case "ReceivedChequeToNotPass":
            {
                chequesAndStatsVM.description = "تغییر وضعیت چک دریافتی به وصول نشده";

                ChequeRule chequeRule = new ChequeRule();
                var        cheque     = await chequeRule.FindAsync(chequesAndStatsVM.chequeId);

                PayRecevieRule  payRecevieRule = new PayRecevieRule();
                List <Document> doucuments     = await payRecevieRule.GetDoucumentIDByChequeIdAsync(chequesAndStatsVM.chequeId);

                cheque.Status = ZhivarEnums.ChequeStatus.Normal;
                chequeRule.Update(cheque);

                Document     newDocument  = new Document();
                DocumentRule documentRule = new DocumentRule();

                foreach (var document in doucuments)
                {
                    newDocument = new Document()
                    {
                        Credit         = document.Credit,
                        Description    = chequesAndStatsVM.description,
                        Debit          = document.Debit,
                        DateTime       = DateTime.Now,
                        DisplayDate    = PersianDateUtils.ToPersianDate(DateTime.Now),
                        FinanYear      = document.FinanYear,
                        FinanYearId    = document.FinanYearId,
                        IsFirsDocument = document.IsFirsDocument,
                        IsManual       = document.IsManual,
                        Number         = await documentRule.createNumberDocumentAsync(organId),
                        Number2        = await documentRule.createNumberDocumentAsync(organId),
                        OrganId        = organId,
                        Status         = ZhivarEnums.DocumentStatus.TaeedShode,
                        StatusString   = document.StatusString,
                        Type           = ZhivarEnums.NoeDoc.Pay
                    };
                    TransactionRule transactionRule = new TransactionRule();
                    var             transactions    = await transactionRule.GetAllByOrganIdAsync(organId);

                    transactions = transactions.Where(x => x.DocumentId == document.ID).ToList();

                    newDocument.Transactions = new List <Transaction>();
                    Transaction newTransaction = new Transaction();

                    foreach (var transaction in transactions)
                    {
                        //newTransaction.AccDocument = newDocument;
                        //newTransaction.Account = transaction.Account;
                        newTransaction.AccountId             = transaction.AccountId;
                        newTransaction.Amount                = transaction.Amount;
                        newTransaction.Cheque                = transaction.Cheque;
                        newTransaction.ChequeId              = transaction.ChequeId;
                        newTransaction.ContactId             = transaction.ContactId;
                        newTransaction.Credit                = transaction.Debit;
                        newTransaction.Date                  = DateTime.Now;
                        newTransaction.Debit                 = transaction.Credit;
                        newTransaction.Description           = chequesAndStatsVM.description;
                        newTransaction.DisplayDate           = PersianDateUtils.ToPersianDate(DateTime.Now);
                        newTransaction.DocumentId            = newDocument.ID;
                        newTransaction.InvoiceId             = transaction.InvoiceId;
                        newTransaction.IsCredit              = transaction.IsDebit;
                        newTransaction.IsDebit               = transaction.IsCredit;
                        newTransaction.PaymentMethod         = transaction.PaymentMethod;
                        newTransaction.PaymentMethodString   = transaction.PaymentMethodString;
                        newTransaction.Reference             = transaction.Reference;
                        newTransaction.RefTrans              = transaction.RefTrans;
                        newTransaction.Remaining             = transaction.Remaining;
                        newTransaction.RemainingType         = transaction.RemainingType;
                        newTransaction.RowNumber             = transaction.RowNumber;
                        newTransaction.Stock                 = transaction.Stock;
                        newTransaction.TransactionTypeString = transaction.TransactionTypeString;
                        newTransaction.Type                  = transaction.Type;
                        newTransaction.UnitPrice             = transaction.UnitPrice;

                        newDocument.Transactions.Add(newTransaction);
                    }
                }

                await documentRule.InsertAsync(newDocument, organId);

                await documentRule.SaveChangesAsync();


                //AccountNumber: ""
                chequeVM.Amount     = cheque.Amount;
                chequeVM.BankBranch = cheque.BankBranch;
                //chequeVM.BankDetailAccount: null
                chequeVM.BankName     = cheque.BankName;
                chequeVM.ChequeNumber = cheque.ChequeNumber;
                chequeVM.Contact      = cheque.Contact;
                chequeVM.Date         = cheque.Date;
                chequeVM.DepositBank  = cheque.DepositBank;
                //chequeVM.DepositDate = cheque.DepositBank;
                chequeVM.DisplayDate = cheque.DisplayDate;
                chequeVM.ID          = cheque.ID;
                //chequeVM.MyCheque = cheque.DepositBank;
                //chequeVM.Overdue = cheque.Overdue;
                //chequeVM.Payee = cheque.Payee;
                //chequeVM.Payer = cheque.Payer;
                chequeVM.ReceiptDate = cheque.ReceiptDate;
                //chequeVM.ReturnDate = cheque.ReturnDate;
                chequeVM.Status       = cheque.Status;
                chequeVM.StatusString = "وصول شده";
                break;
            }


            default:
                break;
            }

            return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = ZhivarEnums.ResultCode.Successful, data = chequeVM }));
        }
示例#2
0
        public async Task <HttpResponseMessage> SaveCost([FromBody] CostVM costVM)
        {
            try
            {
                bool ShouldSend = false;

                var organId = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId);

                FinanYearRule finanYearRule = new FinanYearRule();
                var           finanYears    = await finanYearRule.GetAllByOrganIdAsync(organId);

                var finanYear = finanYears.Where(x => x.Closed == false && x.OrganId == organId);

                costVM.CostItems = costVM.CostItems.Where(x => x.Item != null && x.Sum > 0).ToList();
                foreach (var costItem in costVM.CostItems)
                {
                    if (costItem.Item != null)
                    {
                        costItem.ItemId = costItem.Item.ID;
                    }
                }
                Cost cost = new Cost();
                Mapper.Map(costVM, cost);


                cost.OrganId = organId;

                if (costVM.Contact != null)
                {
                    cost.ContactId = costVM.Contact.ID;//.DetailAccount.Node.Id;
                }
                cost.CostItems = cost.CostItems.Where(x => x.ItemId != 0 && x.Sum > 0).ToList();

                CostValidate validator = new CostValidate();
                FluentValidation.Results.ValidationResult results = validator.Validate(cost);

                string failurs = "";

                if (!results.IsValid)
                {
                    foreach (var error in results.Errors)
                    {
                        failurs += "<br/>" + error.ErrorMessage;
                    }
                    return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = ZhivarEnums.ResultCode.ValidationError, data = failurs }));
                }

                if (SecurityManager.CurrentUserContext.Roles.Any(x => x.RoleCode == "Manager"))
                {
                    cost.Status = ZhivarEnums.CostStatus.WaitingToPay;
                }
                else if (costVM.Status == ZhivarEnums.CostStatus.WaitingToPay)
                {
                    ShouldSend = true;
                }
                else
                {
                    cost.Status = ZhivarEnums.CostStatus.Temporary;
                }

                //if (cost.Status == ZhivarEnums.CostStatus.WaitingToPay)
                //{
                //    var document = await Rule.RegisterDocument(costVM, organId);
                //    DocumentRule documentRule = new DocumentRule();
                //    await documentRule.InsertAsync(document, organId);
                //}

                if (cost.ID > 0)
                {
                    foreach (var costItem in cost.CostItems)
                    {
                        costItem.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                        costItem.CostId      = cost.ID;
                    }

                    cost.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                }
                else
                {
                    foreach (var costItem in cost.CostItems)
                    {
                        costItem.ObjectState = OMF.Common.Enums.ObjectState.Added;
                    }

                    cost.ObjectState = OMF.Common.Enums.ObjectState.Added;
                }

                Rule.InsertOrUpdateGraph(cost);



                if (costVM.ID <= 0)
                {
                    if (SecurityManager.CurrentUserContext.Roles.Any(x => x.RoleCode == "Manager"))
                    {
                        var document = await Rule.RegisterDocument(costVM, organId);

                        DocumentRule documentRule = new DocumentRule();
                        await documentRule.InsertAsync(document, organId);

                        await documentRule.SaveChangesAsync();

                        cost.DocumentId = document.ID;
                    }
                }

                await this.BusinessRule.UnitOfWork.SaveChangesAsync();

                if (ShouldSend)
                {
                    await StartWorkFlow(new WorkFlowBusiClass()
                    {
                        Code           = "Cost",
                        ID             = cost.ID,
                        OrganizationID = 22,
                        InstanceTitle  = cost.Explain
                    }, true);
                }

                return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = ZhivarEnums.ResultCode.Successful, data = cost }));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
示例#3
0
        public async Task <List <string> > SaveContract(ContractVM contractVM)
        {
            try
            {
                var organId = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId);

                FinanYearRule finanYearRule = new FinanYearRule();
                var           finanYears    = await finanYearRule.GetAllByOrganIdAsync(organId);

                var finanYear = finanYears.Where(x => x.Closed == false && x.OrganId == organId);

                contractVM.Contract_Sazes = contractVM.Contract_Sazes.Where(x => x.Saze != null).ToList();

                foreach (var contract_Saze in contractVM.Contract_Sazes)
                {
                    if (contract_Saze.Saze != null)
                    {
                        contract_Saze.SazeId = contract_Saze.Saze.ID;
                    }

                    if (contract_Saze.NoeEjare != null)
                    {
                        contract_Saze.NoeEjareId = contract_Saze.NoeEjare.ID;
                    }

                    if (contract_Saze.DisplayTarikhShorou != null)
                    {
                        contract_Saze.TarikhShorou = PersianDateUtils.ToDateTime(contract_Saze.DisplayTarikhShorou);



                        if (contract_Saze.NoeEjareId == 1)
                        {
                            contract_Saze.TarikhPayan = contract_Saze.TarikhShorou.AddDays((double)contract_Saze.Quantity);
                        }
                        else if (contract_Saze.NoeEjareId == 2)
                        {
                            PersianCalendar pc = new PersianCalendar();
                            contract_Saze.TarikhPayan        = pc.AddMonths(contract_Saze.TarikhShorou, (int)contract_Saze.Quantity);
                            contract_Saze.DisplayTarikhPayan = PersianDateUtils.ToPersianDate(contract_Saze.TarikhPayan);
                        }
                    }
                }

                if (contractVM.Contact != null)
                {
                    contractVM.ContactId = contractVM.Contact.ID;
                }

                DomainClasses.Contract.Contract contract = new DomainClasses.Contract.Contract();
                Mapper.Map(contractVM, contract);
                contract.OrganId  = organId;
                contract.DateTime = PersianDateUtils.ToDateTime(contract.DisplayDate);


                ContractValidate validator = new ContractValidate();
                FluentValidation.Results.ValidationResult results = validator.Validate(contract);

                List <string> failurs = new List <string>();;

                if (!results.IsValid)
                {
                    foreach (var error in results.Errors)
                    {
                        failurs.Add(error.ErrorMessage);
                    }
                    return(failurs);
                }

                //  contract = savePaymentForContract(contract, contractVM);
                if (SecurityManager.CurrentUserContext.Roles.Any(x => x.RoleCode == "Manager") &&
                    contractVM.ContractType == ContractType.RentFrom)
                {
                    contract.Status = Status.ConfirmationContract;
                }
                else if (SecurityManager.CurrentUserContext.Roles.Any(x => x.RoleCode == "Manager") &&
                         contractVM.ContractType == ContractType.PreContract)
                {
                    contract.Status = Status.ConfirmationPreContract;

                    contract.ContractType = ContractType.RentTo;

                    // contract.Contract_Sazes = uow.Repository<Contract_Saze>().Queryable().Where(x => x.ContractID == contract.ID).ToList();

                    foreach (var contract_Saze in contract.Contract_Sazes ?? new List <Contract_Saze>())
                    {
                        contract_Saze.Status = Status.ConfirmationPreContract;
                        //contract_Saze.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                    }
                }
                else if (contractVM.ContractType == ContractType.PreContract && contractVM.Status == Status.SendPreContract)
                {
                    //nothing
                }
                else
                {
                    contract.Status = Status.Temporary;
                }

                if (contract.ID > 0)
                {
                    foreach (var contractSaze in contract.Contract_Sazes)
                    {
                        contractSaze.TarikhShorou = PersianDateUtils.ToDateTime(contractSaze.DisplayTarikhShorou);
                        contractSaze.ContractID   = contract.ID;

                        if (contractSaze.ID > 0)
                        {
                            contractSaze.ContractID  = contract.ID;
                            contractSaze.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                        }

                        else
                        {
                            contractSaze.ContractID  = contract.ID;
                            contractSaze.ObjectState = OMF.Common.Enums.ObjectState.Added;
                        }


                        foreach (var contarct_Saze_Bazareab in contractSaze.Contarct_Saze_Bazareabs)
                        {
                            contractSaze.HasBazareab = true;
                            if (contarct_Saze_Bazareab.ID > 0)
                            {
                                contarct_Saze_Bazareab.ContarctSazeID = contractSaze.ID;
                                contarct_Saze_Bazareab.ObjectState    = ObjectState.Modified;
                            }
                            else
                            {
                                contarct_Saze_Bazareab.ContarctSazeID = contractSaze.ID;
                                contarct_Saze_Bazareab.ObjectState    = ObjectState.Added;
                            }
                        }

                        foreach (var contract_Saze_Tarah in contractSaze.Contract_Saze_Tarahs)
                        {
                            contractSaze.HasTarah = true;

                            if (contract_Saze_Tarah.ID > 0)
                            {
                                contract_Saze_Tarah.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Tarah.ObjectState    = ObjectState.Modified;
                            }

                            else
                            {
                                contract_Saze_Tarah.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Tarah.ObjectState    = ObjectState.Added;
                            }
                        }

                        foreach (var contract_Saze_Chapkhane in contractSaze.Contract_Saze_Chapkhanes)
                        {
                            contractSaze.HasChap = true;

                            if (contract_Saze_Chapkhane.ID > 0)
                            {
                                contract_Saze_Chapkhane.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Chapkhane.ObjectState    = ObjectState.Modified;
                            }

                            else
                            {
                                contract_Saze_Chapkhane.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Chapkhane.ObjectState    = ObjectState.Added;
                            }
                        }

                        foreach (var contract_Saze_Nasab in contractSaze.Contract_Saze_Nasabs)
                        {
                            contractSaze.HasNasab = true;
                            if (contract_Saze_Nasab.ID > 0)
                            {
                                contract_Saze_Nasab.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Nasab.ObjectState    = ObjectState.Modified;
                            }

                            else
                            {
                                contract_Saze_Nasab.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Nasab.ObjectState    = ObjectState.Added;
                            }
                        }
                    }


                    foreach (var contract_PayRecevie in contract.Contract_PayRecevies)
                    {
                        if (contract_PayRecevie.ID > 0)
                        {
                            contract_PayRecevie.ContractId  = contract.ID;
                            contract_PayRecevie.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                        }

                        else
                        {
                            contract_PayRecevie.ContractId = contract.ID;
                            contract_PayRecevie.IsReceive  = true;
                            contract_PayRecevie.OrganId    = organId;
                            contract_PayRecevie.Status     = Status.Temporary;
                            contract_PayRecevie.Type       = PayRecevieType.Sir;
                            contract_PayRecevie.Date       = DateTime.Now;

                            contract_PayRecevie.ContactId   = contract.ID;
                            contract_PayRecevie.ObjectState = OMF.Common.Enums.ObjectState.Added;
                        }


                        foreach (var contract_DetailPayRecevie in contract_PayRecevie.Contract_DetailPayRecevies)
                        {
                            if (contract_DetailPayRecevie.ID > 0)
                            {
                                contract_DetailPayRecevie.Contract_PayRecevieId = contract_PayRecevie.ID;
                                contract_DetailPayRecevie.ObjectState           = ObjectState.Modified;
                            }
                            else
                            {
                                contract_DetailPayRecevie.Contract_PayRecevieId = contract_PayRecevie.ID;
                                contract_DetailPayRecevie.ObjectState           = ObjectState.Added;
                            }
                        }
                    }
                    contract.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                }

                else
                {
                    foreach (var contractSaze in contract.Contract_Sazes)
                    {
                        contractSaze.ContractID   = contract.ID;
                        contractSaze.TarikhShorou = PersianDateUtils.ToDateTime(contractSaze.DisplayTarikhShorou);

                        if (contractSaze.ID > 0)
                        {
                            contractSaze.ContractID  = contract.ID;
                            contractSaze.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                        }

                        else
                        {
                            contractSaze.ContractID  = contract.ID;
                            contractSaze.ObjectState = OMF.Common.Enums.ObjectState.Added;
                        }


                        foreach (var contarct_Saze_Bazareab in contractSaze.Contarct_Saze_Bazareabs)
                        {
                            contractSaze.HasBazareab = true;

                            if (contarct_Saze_Bazareab.NoeMozdBazryab == NoeMozd.Month)
                            {
                                contarct_Saze_Bazareab.Hazine = 0;
                            }

                            if (contarct_Saze_Bazareab.ID > 0)
                            {
                                contarct_Saze_Bazareab.ContarctSazeID = contractSaze.ID;
                                contarct_Saze_Bazareab.ObjectState    = ObjectState.Modified;
                            }
                            else
                            {
                                contarct_Saze_Bazareab.ContarctSazeID = contractSaze.ID;
                                contarct_Saze_Bazareab.ObjectState    = ObjectState.Added;
                            }
                        }

                        foreach (var contract_Saze_Tarah in contractSaze.Contract_Saze_Tarahs)
                        {
                            contractSaze.HasTarah = true;

                            if (contract_Saze_Tarah.NoeMozdTarah == NoeMozd.Month)
                            {
                                contract_Saze_Tarah.Hazine = 0;
                            }

                            if (contract_Saze_Tarah.ID > 0)
                            {
                                contract_Saze_Tarah.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Tarah.ObjectState    = ObjectState.Modified;
                            }

                            else
                            {
                                contract_Saze_Tarah.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Tarah.ObjectState    = ObjectState.Added;
                            }
                        }

                        foreach (var contract_Saze_Chapkhane in contractSaze.Contract_Saze_Chapkhanes)
                        {
                            contractSaze.HasChap = true;



                            if (contract_Saze_Chapkhane.ID > 0)
                            {
                                contract_Saze_Chapkhane.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Chapkhane.ObjectState    = ObjectState.Modified;
                            }

                            else
                            {
                                contract_Saze_Chapkhane.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Chapkhane.ObjectState    = ObjectState.Added;
                            }
                        }

                        foreach (var contract_Saze_Nasab in contractSaze.Contract_Saze_Nasabs)
                        {
                            contractSaze.HasNasab = true;

                            if (contract_Saze_Nasab.NoeMozdNasab == NoeMozd.Month)
                            {
                                contract_Saze_Nasab.Hazine = 0;
                            }

                            if (contract_Saze_Nasab.ID > 0)
                            {
                                contract_Saze_Nasab.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Nasab.ObjectState    = ObjectState.Modified;
                            }

                            else
                            {
                                contract_Saze_Nasab.ContarctSazeID = contractSaze.ID;
                                contract_Saze_Nasab.ObjectState    = ObjectState.Added;
                            }
                        }
                    }

                    if (contract.Contract_PayRecevies != null && contract.Contract_PayRecevies.Count() > 0 &&
                        contract.Contract_PayRecevies[0].Contract_DetailPayRecevies != null && contract.Contract_PayRecevies[0].Contract_DetailPayRecevies.Count() > 0)
                    {
                        foreach (var contract_PayRecevie in contract.Contract_PayRecevies)
                        {
                            contract_PayRecevie.ContractId = contract.ID;
                            contract_PayRecevie.Date       = DateTime.Now;
                            contract_PayRecevie.IsReceive  = true;


                            if (contract_PayRecevie.ID > 0)
                            {
                                contract_PayRecevie.ContractId  = contract.ID;
                                contract_PayRecevie.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                            }

                            else
                            {
                                contract_PayRecevie.ContractId  = contract.ID;
                                contract_PayRecevie.ObjectState = OMF.Common.Enums.ObjectState.Added;
                            }


                            foreach (var contract_DetailPayRecevie in contract_PayRecevie.Contract_DetailPayRecevies)
                            {
                                if (contract_DetailPayRecevie.ID > 0)
                                {
                                    contract_DetailPayRecevie.Contract_PayRecevieId = contract_PayRecevie.ID;
                                    contract_DetailPayRecevie.ObjectState           = ObjectState.Modified;
                                }
                                else
                                {
                                    contract_DetailPayRecevie.Contract_PayRecevieId = contract_PayRecevie.ID;
                                    contract_DetailPayRecevie.ObjectState           = ObjectState.Added;
                                }
                            }
                        }
                    }
                    else
                    {
                        contract.Contract_PayRecevies = null;
                    }
                    contract.ObjectState = OMF.Common.Enums.ObjectState.Added;
                }


                this.UnitOfWork.RepositoryAsync <DomainClasses.Contract.Contract>().InsertOrUpdateGraph(contract);



                //  ContactRule contactRule = new ContactRule();
                //   await contactRule.UpdateContact(invoice.InvoiceType, invoice.ContactId);



                await this.UnitOfWork.SaveChangesAsync();

                if (contractVM.ID <= 0)
                {
                    if ((SecurityManager.CurrentUserContext.Roles.Any(x => x.RoleCode == "Manager") &&
                         contractVM.ContractType == ContractType.PreContract) || (SecurityManager.CurrentUserContext.Roles.Any(x => x.RoleCode == "Manager") &&
                                                                                  contractVM.Status == Status.ConfirmationContract))
                    {
                        InvoiceRule invoiceRule = new InvoiceRule();
                        var         invoice     = invoiceRule.ConvertContractToInvoice(contract.ID, NoeFactor.RentTo);

                        var document = invoiceRule.RegisterDocument(invoice, invoice.OrganId);

                        DocumentRule documentRule = new DocumentRule();
                        await documentRule.InsertAsync(document, invoice.OrganId);

                        await documentRule.SaveChangesAsync();

                        invoice.DocumentID = document.ID;
                        invoiceRule.Update(invoice);
                        await invoiceRule.SaveChangesAsync();
                    }
                    else if (SecurityManager.CurrentUserContext.Roles.Any(x => x.RoleCode == "Manager") &&
                             contractVM.ContractType == ContractType.RentTo)
                    {
                        InvoiceRule invoiceRule = new InvoiceRule();
                        invoiceRule.ConvertContractToInvoice(contract.ID, NoeFactor.RentFrom);
                    }
                }



                return(failurs);
            }
            catch (Exception ex)
            {
                var p = ex;
                throw;
            }
        }
示例#4
0
        public async Task <HttpResponseMessage> SaveInvoice([FromBody] InvoiceVM invoiceVM)
        {
            try
            {
                var organId = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId);

                FinanYearRule finanYearRule = new FinanYearRule();
                var           finanYears    = await finanYearRule.GetAllByOrganIdAsync(organId);

                var finanYear = finanYears.Where(x => x.Closed == false && x.OrganId == organId);

                invoiceVM.InvoiceItems = invoiceVM.InvoiceItems.Where(x => x.Item != null).ToList();

                foreach (var invoiceItem in invoiceVM.InvoiceItems)
                {
                    if (invoiceItem.Item != null)
                    {
                        invoiceItem.ItemId = invoiceItem.Item.ID;
                    }
                }

                if (invoiceVM.Contact != null)
                {
                    invoiceVM.ContactId = invoiceVM.Contact.ID;
                }

                Invoice invoice = new Invoice();
                Mapper.Map(invoiceVM, invoice);
                invoice.OrganId = organId;

                //if (invoice.Contact != null)
                //{

                //    invoice.ContactId = invoice.Contact.ID;
                //}

                //   invoice.InvoiceItems = invoice.InvoiceItems.Where(x => x.ItemId != 0).ToList();



                InvoiceValidate validator = new InvoiceValidate();
                FluentValidation.Results.ValidationResult results = validator.Validate(invoice);

                string failurs = "";

                if (!results.IsValid)
                {
                    foreach (var error in results.Errors)
                    {
                        failurs += "<br/>" + error.ErrorMessage;
                    }
                    return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = ZhivarEnums.ResultCode.ValidationError, data = failurs }));
                }



                if (invoice.ID > 0)
                {
                    foreach (var invoiceItem in invoice.InvoiceItems)
                    {
                        invoiceItem.InvoiceId = invoice.ID;

                        if (invoiceItem.ID > 0)
                        {
                            invoiceItem.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                        }
                        else
                        {
                            invoiceItem.ObjectState = OMF.Common.Enums.ObjectState.Added;
                        }

                        //if (invoiceItem.Item != null)
                        //    invoiceItem.Item = null;//.ObjectState = OMF.Common.Enums.ObjectState.Unchanged;
                    }

                    invoice.ObjectState = OMF.Common.Enums.ObjectState.Modified;
                }

                else
                {
                    foreach (var invoiceItem in invoice.InvoiceItems)
                    {
                        invoiceItem.ObjectState = OMF.Common.Enums.ObjectState.Added;

                        //if (invoiceItem.Item != null)
                        //    invoiceItem.Item = null;//.ObjectState = OMF.Common.Enums.ObjectState.Unchanged;
                    }

                    invoice.ObjectState = OMF.Common.Enums.ObjectState.Added;
                }

                this.BusinessRule.UnitOfWork.RepositoryAsync <Invoice>().InsertOrUpdateGraph(invoice);
                ContactRule contactRule = new ContactRule();
                await contactRule.UpdateContact(invoice.InvoiceType, invoice.ContactId);

                //await this.BusinessRule.UnitOfWork.SaveChangesAsync();

                if (invoice.Status == ZhivarEnums.NoeInsertFactor.WaitingToReceive)
                {
                    var document = await Rule.RegisterDocumentAsync(invoiceVM, organId);

                    DocumentRule documentRule = new DocumentRule();
                    await documentRule.InsertAsync(document, organId);

                    await documentRule.SaveChangesAsync();

                    invoice.DocumentID = document.ID;
                    this.BusinessRule.UnitOfWork.RepositoryAsync <Invoice>().Update(invoice);
                    //await this.BusinessRule.UnitOfWork.SaveChangesAsync();
                }
                await this.BusinessRule.UnitOfWork.SaveChangesAsync();

                // await RegisterDocument(invoice, organId);

                return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = ZhivarEnums.ResultCode.Successful, data = invoice }));
            }
            catch (Exception ex)
            {
                throw;
            }
        }