public async Task <IActionResult> Download([FromBody] DigitalizedFile digitalizedFile)
        {
            try
            {
                var folderName = Path.Combine("Resources", "DigitalizedFiles");
                var uploads    = Path.Combine(Directory.GetCurrentDirectory(), folderName);
                var filePath   = Path.Combine(uploads, digitalizedFile.FileRoute);
                if (!System.IO.File.Exists(filePath))
                {
                    return(NotFound());
                }

                var memory = new MemoryStream();
                using (var stream = new FileStream(filePath, FileMode.Open))
                {
                    await stream.CopyToAsync(memory);
                }
                memory.Position = 0;

                return(File(memory, GetContentType(filePath), digitalizedFile.FileName));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, "Internal server error: " + ex.Message));
            }
        }
        public IActionResult Post([FromBody] PolicyPendingRegistrationSave policyPendingRegistrationSave)
        {
            int id = 0;

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            using (var transaction = new TransactionScope())
            {
                try
                {
                    if (!policyPendingRegistrationSave.PolicyPendingRegistration.CreationDate.HasValue)
                    {
                        policyPendingRegistrationSave.PolicyPendingRegistration.CreationDate = DateTime.Now;
                    }
                    string idUser = User.Claims.Where(c => c.Type.Equals(ClaimTypes.PrimarySid)).FirstOrDefault().Value;
                    policyPendingRegistrationSave.PolicyPendingRegistration.IdUser = int.Parse(idUser);
                    id = _unitOfWork.PolicyPendingRegistration.Insert(policyPendingRegistrationSave.PolicyPendingRegistration);
                    PolicyList policy = _unitOfWork.Policy.PolicyListById(policyPendingRegistrationSave.PolicyPendingRegistration.IdPolicy);
                    //Debemos guardar el documento digital y asociarlo al recaudo
                    DigitalizedFile digitalizedFile = policyPendingRegistrationSave.DigitalizedFile;
                    if (digitalizedFile != null)
                    {
                        digitalizedFile.IdPolicyOrder = policy.IdPolicyOrder;
                        digitalizedFile.Date          = DateTime.Now;
                        digitalizedFile.Description   = "MATRICULA VEHÍCULO";
                        _unitOfWork.DigitalizedFile.Insert(digitalizedFile);
                    }

                    transaction.Complete();
                }
                catch (System.Data.SqlClient.SqlException sqlex)
                {
                    transaction.Dispose();
                    if (sqlex.Number.Equals(2601))
                    {
                        return(StatusCode(500, "No se puede ingresar el registro de matricula mas de una vez"));
                    }
                    return(StatusCode(500, "Internal server error: " + sqlex.Message));
                }
                catch (Exception ex)
                {
                    transaction.Dispose();
                    return(StatusCode(500, "Internal server error: " + ex.Message));
                }
            }
            return(Ok(id));
        }
 public IActionResult Post([FromBody] DigitalizedFile digitalizedFile)
 {
     try
     {
         if (!ModelState.IsValid)
         {
             return(BadRequest());
         }
         return(Ok(_unitOfWork.DigitalizedFile.Insert(digitalizedFile)));
     }
     catch (Exception ex)
     {
         return(StatusCode(500, "Internal server error: " + ex.Message));
     }
 }
 public IActionResult Put([FromBody] DigitalizedFile digitalizedFile)
 {
     try
     {
         if (ModelState.IsValid && _unitOfWork.DigitalizedFile.Update(digitalizedFile))
         {
             return(Ok(new { Message = "El archivo digitalizado se ha actualizado" }));
         }
         else
         {
             return(BadRequest());
         }
     }
     catch (Exception ex)
     {
         return(StatusCode(500, "Internal server error: " + ex.Message));
     }
 }
        public IActionResult Post([FromBody] PolicyOutlaySave policyOutlaySave)
        {
            int idPolicyOutlay = 0;

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            using (var transaction = new TransactionScope())
            {
                try
                {
                    string idUser = User.Claims.Where(c => c.Type.Equals(ClaimTypes.PrimarySid)).FirstOrDefault().Value;
                    policyOutlaySave.PolicyOutlay.IdUser       = int.Parse(idUser);
                    policyOutlaySave.PolicyOutlay.CreationDate = DateTime.Now;
                    idPolicyOutlay = _unitOfWork.PolicyOutlay.Insert(policyOutlaySave.PolicyOutlay);

                    // Actualizamos las cuotas financiadas con el día de pago real
                    IEnumerable <PolicyFeeFinancialList> policyFees = _unitOfWork.PolicyFeeFinancial.PolicyFeeFinancialListByPolicy(policyOutlaySave.PolicyOutlay.IdPolicy, false);
                    foreach (PolicyFeeFinancialList item in policyFees)
                    {
                        if (item.DatePayment.HasValue)
                        {
                            int day     = policyOutlaySave.PolicyOutlay.PayDay;
                            int lastDay = DateTime.DaysInMonth(item.DatePayment.Value.Year, item.DatePayment.Value.Month);
                            if (day >= lastDay)
                            {
                                day = lastDay;
                            }
                            DateTime datePayment = new DateTime(item.DatePayment.Value.Year, item.DatePayment.Value.Month, day);
                            item.DatePayment = datePayment;
                            _unitOfWork.PolicyFeeFinancial.Update(item);
                        }
                    }
                    Policy   policy   = _unitOfWork.Policy.GetById(policyOutlaySave.PolicyOutlay.IdPolicy);
                    Customer customer = _unitOfWork.Customer.InsuredListByPolicy(policyOutlaySave.PolicyOutlay.IdPolicy).FirstOrDefault();

                    //Debemos generar el recaudo L3 aplicando el desembolso
                    PaymentType paymentType = _unitOfWork.PaymentType.GetList().Where(p => p.Id.Equals("L3")).FirstOrDefault();
                    paymentType.Number = paymentType.Number + 1;
                    _unitOfWork.PaymentType.Update(paymentType);
                    Payment payment = new Payment();
                    payment.DateCreated   = DateTime.Now;
                    payment.DatePayment   = policyOutlaySave.DatePayment;
                    payment.IdPaymentType = "L3";
                    payment.IdUser        = int.Parse(idUser);
                    payment.IdCustomer    = customer.Id;
                    payment.Number        = paymentType.Number;
                    //payment.PaidDestination = "A";
                    payment.State         = "A";
                    payment.Observation   = "DESEMBOLSO";
                    payment.Total         = (float)policy.TotalValue;
                    payment.TotalReceived = (float)policy.TotalValue;
                    payment.TotalValue    = (float)policy.TotalValue;
                    int idPayment = _unitOfWork.Payment.Insert(payment);
                    policyOutlaySave.PolicyOutlay.Id        = idPolicyOutlay;
                    policyOutlaySave.PolicyOutlay.IdPayment = idPayment;
                    _unitOfWork.PolicyOutlay.Update(policyOutlaySave.PolicyOutlay);
                    PaymentDetail paymentDetail = new PaymentDetail();
                    paymentDetail.DatePayFinancial = DateTime.Now;
                    paymentDetail.DueInterestValue = 0;
                    paymentDetail.FeeNumber        = 1;
                    paymentDetail.IdPayment        = idPayment;
                    paymentDetail.IdPolicy         = policy.Id;
                    paymentDetail.InitialFee       = false;
                    paymentDetail.Value            = (float)policy.TotalValue;
                    paymentDetail.ValueOwnProduct  = 0;
                    _unitOfWork.PaymentDetail.Insert(paymentDetail);

                    //Debemos guardar el documento digital y asociarlo al recaudo
                    DigitalizedFile digitalizedFile = policyOutlaySave.DigitalizedFile;
                    if (digitalizedFile != null)
                    {
                        digitalizedFile.IdPayment   = idPayment;
                        digitalizedFile.Date        = DateTime.Now;
                        digitalizedFile.Description = "DESEMBOLSO CREDITO #: " + policyOutlaySave.PolicyOutlay.CreditNumber + ", RECAUDO: L3-" + payment.Number.ToString();
                        _unitOfWork.DigitalizedFile.Insert(digitalizedFile);
                    }

                    transaction.Complete();
                }
                catch (Exception ex)
                {
                    transaction.Dispose();
                    return(StatusCode(500, "Internal server error: " + ex.Message));
                }
            }
            return(Ok(idPolicyOutlay));
        }
        public IActionResult Post([FromBody] PaymentSave Payment)
        {
            int idPayment = 0;

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            using (var transaction = new TransactionScope())
            {
                try
                {
                    string idUser = User.Claims.Where(c => c.Type.Equals(ClaimTypes.PrimarySid)).FirstOrDefault().Value;
                    Payment.Payment.IdUser      = int.Parse(idUser);
                    Payment.Payment.DateCreated = DateTime.Now;
                    idPayment = _unitOfWork.Payment.Insert(Payment.Payment);
                    StringBuilder policyList = new StringBuilder();
                    if (Payment.PaymentDetails != null && Payment.PaymentDetails.Count > 0)
                    {
                        foreach (var item in Payment.PaymentDetails)
                        {
                            switch (item.PaidDestination)
                            {
                            case "A":
                                string text = "Póliza #{0} {1} {2} {3} {4}, Cuota: {5}, Valor {6}, Valor Int. Mora {7}";
                                if (policyList.Length > 0)
                                {
                                    policyList.Append(" | " + string.Format(text, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                                }
                                else
                                {
                                    policyList.Append(string.Format(text, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                                }
                                PaymentDetail paymentDetail = new PaymentDetail {
                                    FeeNumber = item.FeeNumber, IdPayment = idPayment, IdPolicy = item.IdPolicy, Value = item.Value, ValueOwnProduct = item.ValueOwnProduct, DueInterestValue = item.DueInterestValue, ValueDiscount = item.ValueDiscount
                                };
                                _unitOfWork.PaymentDetail.Insert(paymentDetail);
                                break;

                            case "F":
                                string textF = "Póliza #{0} {1} {2} {3} {4}, Cuota: {5}, Valor {6}, Valor Int. Mora {7}";
                                if (policyList.Length > 0)
                                {
                                    policyList.Append(" | " + string.Format(textF, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                                }
                                else
                                {
                                    policyList.Append(string.Format(textF, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                                }
                                PaymentDetailFinancial paymentDetailF = new PaymentDetailFinancial {
                                    FeeNumber = item.FeeNumber, IdPayment = idPayment, IdPolicy = item.IdPolicy, Value = item.Value, DueInterestValue = item.DueInterestValue
                                };
                                _unitOfWork.PaymentDetailFinancial.Insert(paymentDetailF);
                                break;

                            case "P":
                                string textP = "Póliza #{0} {1} {2} {3} {4}, Cuota: {5}, Valor {6}";
                                if (policyList.Length > 0)
                                {
                                    policyList.Append(" | " + string.Format(textP, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value)));
                                }
                                else
                                {
                                    policyList.Append(string.Format(textP, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value)));
                                }
                                PaymentDetailProduct paymentDetailP = new PaymentDetailProduct
                                {
                                    FeeNumber = item.FeeNumber,
                                    IdPayment = idPayment,
                                    IdPolicy  = item.IdPolicy,
                                    Value     = item.Value
                                };
                                _unitOfWork.PaymentDetailProduct.Insert(paymentDetailP);
                                break;
                            }
                        }
                        //if (Payment.Payment.PaidDestination.Equals("A"))
                        //{
                        //    foreach (var item in Payment.PaymentDetails)
                        //    {
                        //        string text = "Póliza #{0} {1} {2} {3} {4}, Cuota: {5}, Valor {6}, Valor Int. Mora {7}";
                        //        if (policyList.Length > 0)
                        //            policyList.Append(" | " + string.Format(text, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                        //        else
                        //            policyList.Append(string.Format(text, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                        //        PaymentDetail paymentDetail = new PaymentDetail { FeeNumber = item.FeeNumber, IdPayment = idPayment, IdPolicy = item.IdPolicy, Value = item.Value, ValueOwnProduct = item.ValueOwnProduct, DueInterestValue = item.DueInterestValue };
                        //        _unitOfWork.PaymentDetail.Insert(paymentDetail);
                        //    }
                        //}
                        //else
                        //{
                        //    foreach (var item in Payment.PaymentDetails)
                        //    {
                        //        string text = "Póliza #{0} {1} {2} {3} {4}, Cuota: {5}, Valor {6}, Valor Int. Mora {7}";
                        //        if (policyList.Length > 0)
                        //            policyList.Append(" | " + string.Format(text, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                        //        else
                        //            policyList.Append(string.Format(text, item.Number, item.MovementShort, item.InsuranceDesc, item.InsuranceLineDesc, item.InsuranceSublineDesc, item.FeeNumber, String.Format("{0:0,0.0}", item.Value), String.Format("{0:0,0.0}", item.DueInterestValue)));
                        //        PaymentDetailFinancial paymentDetail = new PaymentDetailFinancial { FeeNumber = item.FeeNumber, IdPayment = idPayment, IdPolicy = item.IdPolicy, Value = item.Value, DueInterestValue = item.DueInterestValue };
                        //        _unitOfWork.PaymentDetailFinancial.Insert(paymentDetail);
                        //    }
                        //}
                    }
                    //Actualizamos el consecutivo
                    PaymentType paymentType = _unitOfWork.PaymentType.GetList().Where(p => p.Id.Equals(Payment.Payment.IdPaymentType)).FirstOrDefault();
                    paymentType.Number = Payment.Payment.Number;
                    _unitOfWork.PaymentType.Update(paymentType);
                    //Creamos gestión con el recaudo realizado
                    Customer   customer     = _unitOfWork.Customer.GetById(Payment.Payment.IdCustomer);
                    string     customerName = customer.FirstName + (string.IsNullOrEmpty(customer.MiddleName) ? "" : " " + customer.MiddleName) + customer.LastName + (string.IsNullOrEmpty(customer.MiddleLastName) ? "" : " " + customer.MiddleLastName);
                    string     textSubject  = "Creación Pago {0} # {1}, Total: {2}, Cliente: {3}, Detalle Pago: {4}";
                    string     subject      = string.Format(textSubject, paymentType.Alias, Payment.Payment.Number, String.Format("{0:0,0.0}", Payment.Payment.TotalValue), customerName, policyList.ToString());
                    Management management   = new Management
                    {
                        ManagementType    = "G",
                        CreationUser      = int.Parse(idUser),
                        StartDate         = DateTime.Now,
                        EndDate           = DateTime.Now,
                        State             = "R",
                        Subject           = subject,
                        ManagementPartner = "R",
                        IdCustomer        = Payment.Payment.IdCustomer,
                        IsExtra           = false,
                        IdPayment         = idPayment
                    };
                    _unitOfWork.Management.Insert(management);
                    //Actualizamos el id en los digitales
                    foreach (int id in Payment.Digitals)
                    {
                        DigitalizedFile digitalizedFile = _unitOfWork.DigitalizedFile.GetById(id);
                        digitalizedFile.IdPayment = idPayment;
                        _unitOfWork.DigitalizedFile.Update(digitalizedFile);
                    }
                    transaction.Complete();
                }
                catch (Exception ex)
                {
                    transaction.Dispose();
                    return(StatusCode(500, "Internal server error: " + ex.Message));
                }
            }
            return(Ok(idPayment));
        }