public IActionResult Put([FromBody] PaymentSave Payment)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest());
     }
     using (var transaction = new TransactionScope())
     {
         try
         {
             string idUser = User.Claims.Where(c => c.Type.Equals(ClaimTypes.PrimarySid)).FirstOrDefault().Value;
             _unitOfWork.Payment.Update(Payment.Payment);
             //Primero debemos eliminar los detalles del pago
             _unitOfWork.PaymentDetail.DeletePaymentDetailByPayment(Payment.Payment.Id);
             StringBuilder policyList = new StringBuilder();
             if (Payment.PaymentDetails != null && Payment.PaymentDetails.Count > 0)
             {
                 foreach (var item in Payment.PaymentDetails)
                 {
                     string text = "Póliza #{0} {1} {2} {3} {4}, Cuota: {5}, Valor {6}";
                     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)));
                     }
                     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)));
                     }
                     PaymentDetail paymentDetail = new PaymentDetail {
                         FeeNumber = item.FeeNumber, IdPayment = Payment.Payment.Id, IdPolicy = item.IdPolicy, Value = item.Value
                     };
                     _unitOfWork.PaymentDetail.Insert(paymentDetail);
                 }
             }
             //Creamos gestión con el recaudo realizado
             PaymentType paymentType  = _unitOfWork.PaymentType.GetList().Where(p => p.Id.Equals(Payment.Payment.IdPaymentType)).FirstOrDefault();
             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  = "Modificació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         = Payment.Payment.Id
             };
             _unitOfWork.Management.Insert(management);
             transaction.Complete();
         }
         catch (Exception ex)
         {
             transaction.Dispose();
             return(StatusCode(500, "Internal server error: " + ex.Message));
         }
     }
     return(Ok(new { Message = "El Pago se ha actualizado" }));
 }
        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));
        }