public bool AprobarTransferencia(Transferencia transferencia)
 {
     using (LealtadEntities db = new LealtadEntities())
     {
         db.Database.Connection.ConnectionString = AppModule.ConnectionString("SumaLealtad");
         Order orden = db.Orders.Find(transferencia.id);
         List<OrdersDetail> ordersdetails = db.OrdersDetails.Where(x => x.orderid == orden.id).ToList();
         foreach (OrdersDetail od in ordersdetails)
         {
             OrdersDetail od2 = db.OrdersDetails.Find(od.id, od.orderid);
             od2.sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_APROBADO) && (s.tablename == "OrdersDetail")).id;
         }
         //Actualizar estatus y monto de la Orden
         orden.sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_ORDEN_APROBADA) && (s.tablename == "Orders")).id;
         orden.totalamount = 0;
         orden.processdate = DateTime.Now;
         //Entidad OrderHistory
         int idOrderHistory = repOrden.OrdersHistoryId();
         OrdersHistory orderhistory = new OrdersHistory()
         {
             id = idOrderHistory,
             orderid = orden.id,
             estatusid = orden.sumastatusid,
             userid = (int)HttpContext.Current.Session["userid"],
             creationdate = orden.processdate,
             comments = "orden aprobada"
         };
         db.OrdersHistories.Add(orderhistory);
         db.SaveChanges();
         return true;
     }
 }
 public int CrearTransferencia(int idCliente, List<DetalleOrdenRecargaPrepago> detalleOrden)
 {
     int idOrden = 0;
     using (LealtadEntities db = new LealtadEntities())
     {
         db.Database.Connection.ConnectionString = AppModule.ConnectionString("SumaLealtad");
         //ENTIDAD Order
         Order Order = new Order()
         {
             id = repOrden.OrderId(),
             prepaidcustomerid = idCliente,
             totalamount = 0,
             paymenttype = "",
             creationdate = DateTime.Now,
             creationuserid = (int)HttpContext.Current.Session["userid"],
             processdate = DateTime.Now,
             comments = detalleOrden.First().tipoOrden,
             sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_ORDEN_NUEVA) && (s.tablename == "Orders")).id
         };
         db.Orders.Add(Order);
         idOrden = Order.id;
         int idbase = repOrden.OrdersDetailId();
         foreach (DetalleOrdenRecargaPrepago item in detalleOrden)
         {
             idbase = idbase + 1;
             //ENTIDAD OrderDetail
             OrdersDetail OrderDetail = new OrdersDetail()
             {
                 id = idbase,
                 orderid = Order.id,
                 customerid = item.idAfiliado,
                 amount = item.montoRecarga,
                 sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_INCLUIDO) && (s.tablename == "OrdersDetail")).id
             };
             if (detalleOrden.First().tipoOrden == "Orden de Anulación de Transferencia")
             {
                 long number1 = 0;
                 bool canConvert = long.TryParse(item.batchid, out number1);
                 //si la transferencia no fue exitosa, creo el renglon de la orden con monto 0
                 if (canConvert == false)
                 {
                     OrderDetail.amount = 0;
                 }
                 else
                 {
                     OrderDetail.amount = item.montoRecarga;
                     OrderDetail.comments = item.batchid;
                 }
             }
             db.OrdersDetails.Add(OrderDetail);
         }
         //Entidad OrderHistory
         int idOrderHistory = repOrden.OrdersHistoryId();
         OrdersHistory orderhistory = new OrdersHistory()
         {
             id = idOrderHistory,
             orderid = idOrden,
             estatusid = Order.sumastatusid,
             userid = (int)HttpContext.Current.Session["userid"],
             creationdate = DateTime.Now,
             comments = "orden creada"
         };
         db.OrdersHistories.Add(orderhistory);
         db.SaveChanges();
         return idOrden;
     }
 }
 public bool RechazarTransferencia(int id)
 {
     using (LealtadEntities db = new LealtadEntities())
     {
         db.Database.Connection.ConnectionString = AppModule.ConnectionString("SumaLealtad");
         Order orden = db.Orders.FirstOrDefault(o => o.id.Equals(id));
         orden.sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_ORDEN_RECHAZADA) && (s.tablename == "Orders")).id;
         orden.processdate = DateTime.Now;
         //Entidad OrderHistory
         int idOrderHistory = repOrden.OrdersHistoryId();
         OrdersHistory orderhistory = new OrdersHistory()
         {
             id = idOrderHistory,
             orderid = orden.id,
             estatusid = orden.sumastatusid,
             userid = (int)HttpContext.Current.Session["userid"],
             creationdate = orden.processdate,
             comments = "orden rechazada"
         };
         db.OrdersHistories.Add(orderhistory);
         db.SaveChanges();
         return true;
     }
 }
        public bool ProcesarTransferencia(int id)
        {
            Transferencia transferencia = FindTransferencia(id);
            string respuestaSuma = "";
            string respuestaPrepago = "";
            string mensaje = "";
            using (LealtadEntities db = new LealtadEntities())
            {
                db.Database.Connection.ConnectionString = AppModule.ConnectionString("SumaLealtad");
                Order orden = db.Orders.Find(transferencia.id);
                List<OrdersDetail> ordersdetails = db.OrdersDetails.Where(x => x.orderid == orden.id).ToList();
                if (orden.comments.Contains("Orden de Transferencia"))
                {
                    //realizar transferencias
                    if (transferencia.ResumenTransferenciaSuma != "0")
                    {
                        respuestaSuma = Transferir(transferencia.docnumberAfiliadoOrigen, transferencia.docnumberAfiliadoDestino, Globals.TIPO_CUENTA_SUMA, transferencia.ResumenTransferenciaSuma);
                        long number1 = 0;
                        bool canConvert = long.TryParse(respuestaSuma, out number1);
                        if (canConvert == false)
                        {
                            mensaje = "Falló transferencia Suma (" + respuestaSuma + "). ";
                            ordersdetails.First().comments = "Transferencia Suma fallida";
                            ordersdetails.First().cardsresponse = respuestaSuma;
                            ordersdetails.First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                            ordersdetails.Skip(2).First().comments = "Transferencia Suma fallida";
                            ordersdetails.Skip(2).First().cardsresponse = respuestaSuma;
                            ordersdetails.Skip(2).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                        else
                        {
                            mensaje = "Transferencia Suma efectiva con clave " + respuestaSuma + ". ";
                            ordersdetails.First().comments = "Transferencia Suma efectiva";
                            ordersdetails.First().cardsresponse = respuestaSuma;
                            ordersdetails.First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                            ordersdetails.Skip(2).First().comments = "Transferencia Suma efectiva";
                            ordersdetails.Skip(2).First().cardsresponse = (Convert.ToInt32(respuestaSuma) + 1).ToString();
                            ordersdetails.Skip(2).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                    }
                    else
                    {
                        ordersdetails.First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        ordersdetails.First().comments = "";
                        ordersdetails.First().cardsresponse = "";
                        ordersdetails.Skip(2).First().comments = "";
                        ordersdetails.Skip(2).First().cardsresponse = "";
                        ordersdetails.Skip(2).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                    }
                    if (transferencia.ResumenTransferenciaPrepago != "0,00")
                    {
                        respuestaPrepago = Transferir(transferencia.docnumberAfiliadoOrigen, transferencia.docnumberAfiliadoDestino, Globals.TIPO_CUENTA_PREPAGO, transferencia.ResumenTransferenciaPrepago);
                        long number1 = 0;
                        bool canConvert = long.TryParse(respuestaPrepago, out number1);
                        if (canConvert == false)
                        {
                            mensaje = mensaje + "Falló transferencia Prepago (" + respuestaPrepago + ").";
                            ordersdetails.Skip(1).First().comments = "Transferencia Prepago fallida";
                            ordersdetails.Skip(1).First().cardsresponse = respuestaPrepago;
                            ordersdetails.Skip(1).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                            ordersdetails.Skip(3).First().comments = "Transferencia Prepago fallida";
                            ordersdetails.Skip(3).First().cardsresponse = respuestaPrepago;
                            ordersdetails.Skip(3).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                        else
                        {
                            mensaje = mensaje + "Transferencia Prepago efectiva con clave " + respuestaPrepago + ".";
                            ordersdetails.Skip(1).First().comments = "Transferencia Prepago efectiva";
                            ordersdetails.Skip(1).First().cardsresponse = respuestaPrepago;
                            ordersdetails.Skip(1).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                            ordersdetails.Skip(3).First().comments = "Transferencia Prepago efectiva";
                            ordersdetails.Skip(3).First().cardsresponse = (Convert.ToInt32(respuestaPrepago) + 1).ToString();
                            ordersdetails.Skip(3).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                    }
                    else
                    {
                        ordersdetails.Skip(1).First().comments = "";
                        ordersdetails.Skip(1).First().cardsresponse = "";
                        ordersdetails.Skip(1).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        ordersdetails.Skip(3).First().comments = "";
                        ordersdetails.Skip(3).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        ordersdetails.Skip(3).First().cardsresponse = "";
                    }
                    db.SaveChanges();
                }
                else
                {
                    //Anular Transferencias y Actualizar estatus detalleorden
                    if (transferencia.ResumenTransferenciaSuma != "0")
                    {
                        //ANULO DEBITO SUMA
                        respuestaSuma = Anular(transferencia.docnumberAfiliadoOrigen, ordersdetails.First().comments, Globals.TRANSCODE_ANULACION);
                        long number1 = 0;
                        bool canConvert = long.TryParse(respuestaSuma, out number1);
                        if (canConvert == false)
                        {
                            mensaje = "Falló Anulación de transferencia Suma (" + respuestaSuma + "). ";
                            ordersdetails.First().comments = "Anulación fallida " + ordersdetails.First().comments;
                            ordersdetails.First().cardsresponse = respuestaSuma;
                            ordersdetails.First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                        else
                        {
                            mensaje = "Anulación de Transferencia Suma efectiva con clave " + respuestaSuma + ". ";
                            ordersdetails.First().comments = "Anulación efectiva " + ordersdetails.First().comments;
                            ordersdetails.First().cardsresponse = respuestaSuma;
                            ordersdetails.First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;

                        }
                        //ANULO CREDITO SUMA
                        respuestaSuma = Anular(transferencia.docnumberAfiliadoDestino, ordersdetails.Skip(2).First().comments, Globals.TRANSCODE_ANULACION);
                        number1 = 0;
                        canConvert = long.TryParse(respuestaSuma, out number1);
                        if (canConvert == false)
                        {
                            mensaje = "Falló Anulación de transferencia Suma (" + respuestaSuma + "). ";
                            ordersdetails.Skip(2).First().comments = "Anulación fallida " + ordersdetails.Skip(2).First().comments;
                            ordersdetails.Skip(2).First().cardsresponse = respuestaSuma;
                            ordersdetails.Skip(2).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                        else
                        {
                            mensaje = "Anulación de Transferencia Suma efectiva con clave " + respuestaSuma + ". ";
                            ordersdetails.Skip(2).First().comments = "Anulación efectiva " + ordersdetails.Skip(2).First().comments;
                            ordersdetails.Skip(2).First().cardsresponse = respuestaSuma;
                            ordersdetails.Skip(2).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                    }
                    else
                    {
                        ordersdetails.First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        ordersdetails.First().comments = "";
                        ordersdetails.First().cardsresponse = "";
                        ordersdetails.Skip(2).First().comments = "";
                        ordersdetails.Skip(2).First().cardsresponse = "";
                        ordersdetails.Skip(2).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                    }
                    if (transferencia.ResumenTransferenciaPrepago != "0,00")
                    {
                        //ANULO DEBITO PREPAGO
                        respuestaPrepago = Anular(transferencia.docnumberAfiliadoOrigen, ordersdetails.Skip(1).First().comments, Globals.TRANSCODE_ANULACION);
                        long number1 = 0;
                        bool canConvert = long.TryParse(respuestaPrepago, out number1);
                        if (canConvert == false)
                        {
                            mensaje = "Falló Anulación de transferencia Prepago (" + respuestaPrepago + "). ";
                            ordersdetails.Skip(1).First().comments = "Anulación fallida " + ordersdetails.Skip(1).First().comments;
                            ordersdetails.Skip(1).First().cardsresponse = respuestaPrepago;
                            ordersdetails.Skip(1).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                        else
                        {
                            mensaje = "Anulación de Transferencia Prepago efectiva con clave " + respuestaPrepago + ". ";
                            ordersdetails.Skip(1).First().comments = "Anulación efectiva " + ordersdetails.Skip(1).First().comments;
                            ordersdetails.Skip(1).First().cardsresponse = respuestaPrepago;
                            ordersdetails.Skip(1).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                        //ANULO CREDITO PREPAGO
                        respuestaPrepago = Anular(transferencia.docnumberAfiliadoDestino, ordersdetails.Skip(3).First().comments, Globals.TRANSCODE_ANULACION);
                        number1 = 0;
                        canConvert = long.TryParse(respuestaPrepago, out number1);
                        if (canConvert == false)
                        {
                            mensaje = "Falló Anulación de transferencia Prepago (" + respuestaPrepago + "). ";
                            ordersdetails.Skip(3).First().comments = "Anulación fallida " + ordersdetails.Skip(3).First().comments;
                            ordersdetails.Skip(3).First().cardsresponse = respuestaPrepago;
                            ordersdetails.Skip(3).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                        else
                        {
                            mensaje = "Anulación de Transferencia Prepago efectiva con clave " + respuestaPrepago + ". ";
                            ordersdetails.Skip(3).First().comments = "Anulación efectiva " + ordersdetails.Skip(3).First().comments;
                            ordersdetails.Skip(3).First().cardsresponse = respuestaPrepago;
                            ordersdetails.Skip(3).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        }
                    }
                    else
                    {
                        ordersdetails.Skip(1).First().comments = "";
                        ordersdetails.Skip(1).First().cardsresponse = "";
                        ordersdetails.Skip(1).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        ordersdetails.Skip(3).First().comments = "";
                        ordersdetails.Skip(3).First().sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_DETALLEORDEN_PROCESADO) && (s.tablename == "OrdersDetail")).id;
                        ordersdetails.Skip(3).First().cardsresponse = "";
                    }
                    db.SaveChanges();
                }
                //Actualizar estatus de la Orden
                orden.sumastatusid = db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_ORDEN_PROCESADA) && (s.tablename == "Orders")).id;
                orden.processdate = DateTime.Now;
                //Entidad OrderHistory
                int idOrderHistory = repOrden.OrdersHistoryId();
                OrdersHistory orderhistory = new OrdersHistory()
                {
                    id = idOrderHistory,
                    orderid = orden.id,
                    estatusid = orden.sumastatusid,
                    userid = (int)HttpContext.Current.Session["userid"],
                    creationdate = orden.processdate,
                    comments = "orden procesada"
                };
                db.OrdersHistories.Add(orderhistory);
                db.SaveChanges();
                return true;
            }
        }
 public Transferencia DetalleParaOrdenAnulacionTransferencia(int orden)
 {
     Transferencia transferencia = new Transferencia();
     using (LealtadEntities db = new LealtadEntities())
     {
         db.Database.Connection.ConnectionString = AppModule.ConnectionString("SumaLealtad");
         //verificar que es orden de transferencia
         Order order = db.Orders.Find(orden);
         //orden no encontrada
         if (order == null)
         {
             return null;
         }
         //orden no es de transferencia
         if (order.comments != "Orden de Transferencia")
         {
             return null;
         }
         //verificar que la orden de transferencia este procesada
         if (order.sumastatusid != db.SumaStatuses.FirstOrDefault(s => (s.value == Globals.ID_ESTATUS_ORDEN_PROCESADA) && (s.tablename == "Orders")).id)
         {
             transferencia.tipoOrden = "No ha sido procesada";
             return transferencia;
         }
         //verificar que esa orden no tenga anulación
         var q = (from od in db.OrdersDetails
                  where od.orderid.Equals(orden)
                  select od).ToList();
         foreach (var o in q)
         {
             var query = (from od in db.OrdersDetails
                          join or in db.Orders on od.orderid equals or.id
                          where (od.comments.Equals(o.cardsresponse) || od.comments.Equals("Anulación efectiva " + o.cardsresponse))
                          && or.comments == "Orden de Anulación de Transferencia"
                          && od.amount != 0
                          select od).ToList();
             if (query.Count > 0)
             {
                 transferencia.tipoOrden = "Ya tiene Anulación";
                 return transferencia;
             }
         }
         //buscar detalle para crear orden de anulación
         {
             transferencia = FindTransferencia(orden);
             return transferencia;
         }
     }
 }