public ActionResult Create(MovimientoEmpresa movimientoempresa)
        {
            if (ModelState.IsValid)
            {
                db.MovimientoEmpresas.AddObject(movimientoempresa);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.PayCenterId = new SelectList(db.Movimientos, "PayCenterId", "Clave", movimientoempresa.PayCenterId);
            return View(movimientoempresa);
        }
        public ViewResult Confirm(IEnumerable<PaqueteVM> model)
        {
            Succeed = false;
            //TODO:Validar que tenga el saldo suficiente. Quiero agregar un campo al PayCenter para determinar su saldo sin tener que recalcularlo
            PaycenterBR payCenterBR = new PaycenterBR();
            var cuentaId = payCenterBR.GetOrCreateCuentaPayCenter(PayCenterId, enumTipoCuenta.Pago_de_Servicios, PROVEEDOR_EVOLUCIONAMOVIL);

            EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(repository.context);
            decimal totalCompra = 0;
            List<CompraEvento> paquetesComprados = new List<CompraEvento>();
            foreach (var paquete in model)
            {
                //TODO:Esta validación debería estar en un BR aparte
                var p = repository.LoadById(paquete.PaqueteId);
                if (p == null)
                {
                    AddValidationMessage(enumMessageType.BRException, "No se ha encontrado el paquete de " + paquete.Creditos.ToString() + "créditos");
                    break;
                }
                if (p.FechaVencimiento >= DateTime.UtcNow.GetCurrentTime())
                {
                    totalCompra += p.Creditos;
                    CompraEvento compraEvento = new CompraEvento
                    {
                        Consumidos = 0,
                        Eventos = p.Creditos,
                        FechaCreacion = DateTime.UtcNow.GetCurrentTime(),
                        Monto = p.Precio,
                        PaqueteId = p.PaqueteId,
                        PayCenterId = PayCenterId
                    };
                    //Agrego a la lista de paquetes que se van a agregar
                    paquetesComprados.Add(compraEvento);

                    //Agrego al repositorio
                    repository.Add(compraEvento);
                    var movimiento = estadoCuentaBR.CrearMovimiento(PayCenterId, enumTipoMovimiento.Cargo, 0, cuentaId, p.Precio, enumMotivo.Compra, PayCenterName, enumEstatusMovimiento.Aplicado);

                    //Agrego movimiento de abono para la empresa
                    //TODO: ESTO DEBE DE IR EN EstadoCuentaBR
                    //TODO: Revisar el saldo actual
                    //****************************************************************************************************+
                    var movimientoEmpresaPago = new MovimientoEmpresa
                    {
                        Clave = DateTime.UtcNow.GetCurrentTime().ToString("yyyyMMdd") + "0" + ((Int16)enumMotivo.Financiamiento).ToString() + new Random().Next(0, 99999).ToString(),
                        IsAbono = true,
                        Monto = p.Precio,
                        Motivo = (short)enumMotivo.Compra,
                        Movimiento = movimiento,
                        //SaldoActual = saldoActual,
                        Status = (short)enumEstatusMovimiento.Procesando,
                        UserName = PayCenterName,
                        FechaCreacion = DateTime.UtcNow.GetCurrentTime(),
                        FechaActualizacion = DateTime.UtcNow.GetCurrentTime()
                    };
                    MovimientosEmpresaRepository movimientosEmpresaRepository = new MovimientosEmpresaRepository(repository.context);
                    movimientosEmpresaRepository.Add(movimientoEmpresaPago);
                    //****************************************************************************************************+
                }
                else
                {
                    AddValidationMessage(enumMessageType.BRException, "El paquete seleccionado ha expirado.  Intente con otro paquete o pongase en contacto con soporte");
                    break;
                }
            }
            var saldos = estadoCuentaBR.GetSaldosPagoServicio(PayCenterId);
            if (saldos.SaldoDisponible < totalCompra)
            {
                AddValidationMessage(enumMessageType.BRException, "No cuenta con saldo suficiente para comprar más paquetes");
                return View(model);
            }
            Succeed = repository.Save();
            ViewBag.Succeed = Succeed;
            if (Succeed)
            {
                AddValidationMessage(enumMessageType.Succeed, "Se ha realizado la compra de " + totalCompra + " créditos exitosamente.");

                //Julius: Permite avisar a los emails configurados en el momento que se realizó la compra del paquete
                StringBuilder emailMessage = new StringBuilder();
                emailMessage.AppendLine("<p>El Paycenter <b>" + this.PayCenterName + "</b> ha realizado la compra de:<p>");
                emailMessage.AppendLine("<table>");
                paquetesComprados.ForEach(x =>
                {
                    emailMessage.AppendLine("<tr>");
                    emailMessage.AppendLine("<td>Paquete: <b>PAQ" + x.PaqueteId + "</b></td>");
                    emailMessage.AppendLine("<td>Eventos: <b>" + x.Eventos.ToString() + "</b></td>");
                    emailMessage.AppendLine("<td>Monto: <b>" + x.Monto.ToString("C") + "</b></td>");
                    emailMessage.AppendLine("</tr>");
                });
                emailMessage.AppendLine("<p>Fecha de compra: " + DateTime.Now.GetCurrentTime().ToString() + "</p>");
                emailMessage.AppendLine("</table>");
                var paquetesEmail = ConfigurationManager.AppSettings.Get("PaquetesEmail");
                EmailHelper.Enviar(emailMessage.ToString(), "Compra Paquete - " + this.PayCenterName, paquetesEmail);
            }
            else
            {
                //TODO: Leer de los mensajes que vengan del save
                //ValidationMessages = repository.ValidationMessages
                AddValidationMessage(enumMessageType.UnhandledException, "No fue posible realizar la compra. Intente más tarde");
            }
            return View(model);
        }
 /// <summary>
 /// Deprecated Method for adding a new object to the MovimientoEmpresas EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
 /// </summary>
 public void AddToMovimientoEmpresas(MovimientoEmpresa movimientoEmpresa)
 {
     base.AddObject("MovimientoEmpresas", movimientoEmpresa);
 }
 /// <summary>
 /// Create a new MovimientoEmpresa object.
 /// </summary>
 /// <param name="movimientoEmpresaId">Initial value of the MovimientoEmpresaId property.</param>
 /// <param name="clave">Initial value of the Clave property.</param>
 /// <param name="monto">Initial value of the Monto property.</param>
 /// <param name="motivo">Initial value of the Motivo property.</param>
 /// <param name="userName">Initial value of the UserName property.</param>
 /// <param name="isAbono">Initial value of the IsAbono property.</param>
 /// <param name="status">Initial value of the Status property.</param>
 /// <param name="saldoActual">Initial value of the SaldoActual property.</param>
 /// <param name="fechaCreacion">Initial value of the FechaCreacion property.</param>
 /// <param name="baja">Initial value of the Baja property.</param>
 /// <param name="fechaActualizacion">Initial value of the FechaActualizacion property.</param>
 /// <param name="referenciaId">Initial value of the ReferenciaId property.</param>
 public static MovimientoEmpresa CreateMovimientoEmpresa(global::System.Int32 movimientoEmpresaId, global::System.String clave, global::System.Decimal monto, global::System.Int16 motivo, global::System.String userName, global::System.Boolean isAbono, global::System.Int16 status, global::System.Decimal saldoActual, global::System.DateTime fechaCreacion, global::System.Boolean baja, global::System.DateTime fechaActualizacion, global::System.Int32 referenciaId)
 {
     MovimientoEmpresa movimientoEmpresa = new MovimientoEmpresa();
     movimientoEmpresa.MovimientoEmpresaId = movimientoEmpresaId;
     movimientoEmpresa.Clave = clave;
     movimientoEmpresa.Monto = monto;
     movimientoEmpresa.Motivo = motivo;
     movimientoEmpresa.UserName = userName;
     movimientoEmpresa.IsAbono = isAbono;
     movimientoEmpresa.Status = status;
     movimientoEmpresa.SaldoActual = saldoActual;
     movimientoEmpresa.FechaCreacion = fechaCreacion;
     movimientoEmpresa.Baja = baja;
     movimientoEmpresa.FechaActualizacion = fechaActualizacion;
     movimientoEmpresa.ReferenciaId = referenciaId;
     return movimientoEmpresa;
 }
 public ActionResult Edit(MovimientoEmpresa movimientoempresa)
 {
     if (ModelState.IsValid)
     {
         db.MovimientoEmpresas.Attach(movimientoempresa);
         db.ObjectStateManager.ChangeObjectState(movimientoempresa, EntityState.Modified);
         db.SaveChanges();
         return RedirectToAction("Index");
     }
     ViewBag.PayCenterId = new SelectList(db.Movimientos, "PayCenterId", "Clave", movimientoempresa.PayCenterId);
     return View(movimientoempresa);
 }