//actualiza los datos en SumaPlazasStatuses
 public bool SaveChanges(Afiliado afiliado)
 {
     using (LealtadEntities db = new LealtadEntities())
     {
         // Entidad: Affiliate
         Affiliate affiliate = db.Affiliates.FirstOrDefault(a => a.id == afiliado.id);
         if (affiliate != null)
         {
             affiliate.storeid = afiliado.storeid;
             affiliate.channelid = afiliado.channelid;
             affiliate.typeid = afiliado.typeid;
             affiliate.typedelivery = afiliado.typedelivery;
             affiliate.storeiddelivery = afiliado.storeiddelivery;
             affiliate.modifieduserid = (int)HttpContext.Current.Session["userid"];
             affiliate.modifieddate = System.DateTime.Now;
             affiliate.statusid = afiliado.statusid;
             affiliate.reasonsid = afiliado.reasonsid;
             affiliate.twitter_account = afiliado.twitter_account;
             affiliate.facebook_account = afiliado.facebook_account;
             affiliate.instagram_account = afiliado.instagram_account;
             affiliate.comments = afiliado.comments;
         }
         // Entidad: CLIENTE
         CLIENTE cliente = db.CLIENTES.FirstOrDefault(c => c.TIPO_DOCUMENTO + "-" + c.NRO_DOCUMENTO == afiliado.docnumber);
         if (cliente != null)
         {
             cliente.NACIONALIDAD = afiliado.nationality;
             cliente.NOMBRE_CLIENTE1 = afiliado.name;
             cliente.NOMBRE_CLIENTE2 = afiliado.name2;
             cliente.APELLIDO_CLIENTE1 = afiliado.lastname1;
             cliente.APELLIDO_CLIENTE2 = afiliado.lastname2;
             cliente.FECHA_NACIMIENTO = DateTime.ParseExact(afiliado.birthdate, "dd-MM-yyyy", CultureInfo.InvariantCulture);
             cliente.SEXO = afiliado.gender;
             cliente.EDO_CIVIL = afiliado.maritalstatus;
             cliente.OCUPACION = afiliado.occupation;
             cliente.TELEFONO_HAB = afiliado.phone1;
             cliente.TELEFONO_OFIC = afiliado.phone2;
             cliente.TELEFONO_CEL = afiliado.phone3;
             cliente.COD_SUCURSAL = afiliado.storeid;
             cliente.COD_ESTADO = afiliado.cod_estado;
             cliente.COD_CIUDAD = afiliado.cod_ciudad;
             cliente.COD_MUNICIPIO = afiliado.cod_municipio;
             cliente.COD_PARROQUIA = afiliado.cod_parroquia;
             cliente.COD_URBANIZACION = afiliado.cod_urbanizacion;
         }
         // Entida: TARJETA
         TARJETA tarjeta = db.TARJETAS.FirstOrDefault(t => t.NRO_AFILIACION.Equals(afiliado.id));
         if (tarjeta != null)
         {
             tarjeta.ESTATUS_TARJETA = afiliado.estatustarjeta;
             tarjeta.COD_USUARIO = (int)HttpContext.Current.Session["userid"];
             tarjeta.FECHA_CREACION = DateTime.Now;
         }
         else if (afiliado.pan != null && afiliado.estatustarjeta != null)
         {
             tarjeta = new TARJETA()
             {
                 NRO_TARJETA = Convert.ToDecimal(afiliado.pan),
                 NRO_AFILIACION = afiliado.id,
                 TIPO_DOCUMENTO = afiliado.docnumber.Substring(0, 1),
                 NRO_DOCUMENTO = afiliado.docnumber.Substring(2),
                 ESTATUS_TARJETA = afiliado.estatustarjeta,
                 SALDO_PUNTOS = null,
                 OBSERVACIONES = null,
                 COD_USUARIO = (int)HttpContext.Current.Session["userid"],
                 TRACK1 = null,
                 TRACK2 = null,
                 CVV2 = null,
                 FECHA_CREACION = DateTime.Now
             };
             db.TARJETAS.Add(tarjeta);
         }
         // Entidad: CustomerInterest
         foreach (var m in db.CustomerInterests.Where(f => f.customerid == afiliado.id))
         {
             db.CustomerInterests.Remove(m);
         }
         foreach (var interes in afiliado.Intereses.Where(x => x.Checked == true))
         {
             CustomerInterest customerInterest = new CustomerInterest()
             {
                 customerid = afiliado.id,
                 interestid = interes.id,
                 comments = ""
             };
             db.CustomerInterests.Add(customerInterest);
         }
         //Entidad: AffiliateAud
         int statusidactual = (from a in db.Affiliates
                               where a.id.Equals(afiliado.id)
                               select a.statusid
                                ).SingleOrDefault();
         //Solo inserto registros cuando hay cambio de estado de Afiliación
         if (statusidactual != afiliado.statusid)
         {
             var affiliateAuditoria = new AffiliateAud()
             {
                 id = AfilliateAudID(),
                 affiliateid = afiliado.id,
                 modifieduserid = (int)HttpContext.Current.Session["userid"],
                 modifieddate = System.DateTime.Now,
                 statusid = afiliado.statusid,
                 reasonsid = ID_REASONS_INICIAL,
                 comments = afiliado.comments
             };
             db.AffiliateAuds.Add(affiliateAuditoria);
         }
         if (SaveWebPlazas(afiliado))
         {
             db.SaveChanges();
             return true;
         }
         else
         {
             return false;
         }
     }
 }
        public bool SaveChanges(AfiliadoSuma afiliado, HttpPostedFileBase fileNoValidado = null)
        {
            using (LealtadEntities db = new LealtadEntities())
            {
                db.Database.Connection.ConnectionString = AppModule.ConnectionString("SumaLealtad");
                // Entidad: Affiliate
                Affiliate affiliate = db.Affiliates.FirstOrDefault(a => a.id == afiliado.id);
                if (affiliate != null)
                {
                    ///affiliate.storeid = afiliado.storeid;
                    affiliate.channelid = afiliado.channelid;
                    affiliate.typeid = afiliado.typeid;
                    affiliate.typedelivery = afiliado.typedelivery;
                    affiliate.storeiddelivery = afiliado.storeiddelivery;
                    affiliate.modifieduserid = (int)HttpContext.Current.Session["userid"];
                    affiliate.modifieddate = System.DateTime.Now;
                    affiliate.sumastatusid = afiliado.sumastatusid;
                    affiliate.reasonsid = afiliado.reasonsid;
                    affiliate.twitter_account = afiliado.twitter_account;
                    affiliate.facebook_account = afiliado.facebook_account;
                    affiliate.instagram_account = afiliado.instagram_account;
                    affiliate.comments = afiliado.comments;
                }
                // Entidad: CLIENTE
                CLIENTE cliente = db.CLIENTES.FirstOrDefault(c => c.TIPO_DOCUMENTO + "-" + c.NRO_DOCUMENTO == afiliado.docnumber);
                if (cliente != null)
                {
                    cliente.E_MAIL = afiliado.email == null ? "" : afiliado.email;
                    cliente.NOMBRE_CLIENTE1 = afiliado.name;
                    cliente.NOMBRE_CLIENTE2 = afiliado.name2 == null ? string.Empty : afiliado.name2;
                    cliente.APELLIDO_CLIENTE1 = afiliado.lastname1 == null ? "" : afiliado.lastname1;
                    cliente.APELLIDO_CLIENTE2 = afiliado.lastname2 == null ? "" : afiliado.lastname2;
                    cliente.FECHA_NACIMIENTO = afiliado.birthdate == null ? new DateTime?() : DateTime.ParseExact(afiliado.birthdate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                    //cliente.NACIONALIDAD = afiliado.nationality;
                    //cliente.SEXO = afiliado.gender;
                    //cliente.EDO_CIVIL = afiliado.maritalstatus;
                    //cliente.COD_SUCURSAL = afiliado.storeid;

                    //nuevos campos con claves a tablas nuevas
                    cliente.NACIONALITY_ID = Convert.ToInt32(afiliado.nationality);
                    cliente.SEX_ID = Convert.ToInt32(afiliado.gender);
                    cliente.CIVIL_STATUS_ID = Convert.ToInt32(afiliado.maritalstatus);

                    var query = db.Stores.OrderBy(x=>x.store_code);
                    cliente.STORE_ID = (from q in query.AsEnumerable()
                                        where q.store_code == afiliado.storeid.ToString()
                                        select q.id).FirstOrDefault();

                    cliente.TELEFONO_HAB = afiliado.phone1;
                    cliente.TELEFONO_OFIC = afiliado.phone2;
                    cliente.TELEFONO_CEL = afiliado.phone3;
                    cliente.COD_ESTADO = afiliado.cod_estado;
                    cliente.COD_CIUDAD = afiliado.cod_ciudad;
                    cliente.COD_MUNICIPIO = afiliado.cod_municipio;
                    cliente.COD_PARROQUIA = afiliado.cod_parroquia;
                    cliente.COD_URBANIZACION = afiliado.cod_urbanizacion;
                    if (afiliado.occupation == null)
                    {
                        cliente.OCUPACION = afiliado.occupation;
                    }
                    else if (afiliado.occupation.Length > 30)
                    {
                        cliente.OCUPACION = afiliado.occupation.Substring(0, 30);
                    }
                    else
                    {
                        cliente.OCUPACION = afiliado.occupation;
                    }
                }
                // Entida: TARJETA
                //TARJETA tarjeta = db.TARJETAS.FirstOrDefault(t => t.NRO_AFILIACION.Equals(afiliado.id));
                Decimal pan = Convert.ToDecimal(afiliado.pan);
                TARJETA tarjeta = db.TARJETAS.FirstOrDefault(t => t.NRO_TARJETA.Equals(pan));
                if (tarjeta != null)
                {
                    tarjeta.NRO_AFILIACION = afiliado.id;
                    tarjeta.ESTATUS_TARJETA = afiliado.estatustarjeta;
                    tarjeta.COD_USUARIO = (int)HttpContext.Current.Session["userid"];
                    tarjeta.TRACK2 = afiliado.trackII;
                    tarjeta.CVV2 = afiliado.cvv2;
                    tarjeta.FECHA_CREACION = afiliado.printed == null ? new DateTime?() : DateTime.ParseExact(afiliado.printed, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                }
                else if (afiliado.pan != null && afiliado.estatustarjeta != null)
                {
                    tarjeta = new TARJETA()
                    {
                        NRO_TARJETA = pan,
                        NRO_AFILIACION = afiliado.id,
                        TIPO_DOCUMENTO = afiliado.docnumber.Substring(0, 1),
                        NRO_DOCUMENTO = afiliado.docnumber.Substring(2),
                        ESTATUS_TARJETA = afiliado.estatustarjeta,
                        SALDO_PUNTOS = null,
                        OBSERVACIONES = null,
                        COD_USUARIO = (int)HttpContext.Current.Session["userid"],
                        TRACK1 = null,
                        TRACK2 = afiliado.trackII,
                        CVV2 = afiliado.cvv2,
                        FECHA_CREACION = afiliado.printed == null ? new DateTime?() : DateTime.ParseExact(afiliado.printed, "dd/MM/yyyy", CultureInfo.InvariantCulture)
                    };
                    db.TARJETAS.Add(tarjeta);
                }

                // Entidad: CustomerInterest
                foreach (var m in db.CustomerInterests.Where(f => f.customerid == afiliado.id))
                {
                    db.CustomerInterests.Remove(m);
                }
                foreach (var interes in afiliado.Intereses.Where(x => x.Checked == true))
                {
                    CustomerInterest customerInterest = new CustomerInterest()
                    {
                        customerid = afiliado.id,
                        interestid = interes.id,
                        comments = ""
                    };
                    db.CustomerInterests.Add(customerInterest);
                }
                //Entidad: AffiliateAud
                int sumastatusidactual = (from a in db.Affiliates
                                          where a.id.Equals(afiliado.id)
                                          select a.sumastatusid
                                         ).SingleOrDefault().Value;
                //Solo inserto registros cuando hay cambio de estado de Afiliación
                if (sumastatusidactual != afiliado.sumastatusid)
                {
                    var affiliateAuditoria = new AffiliateAud()
                    {
                        id = AfilliateAudID(),
                        affiliateid = afiliado.id,
                        modifieduserid = (int)HttpContext.Current.Session["userid"],
                        modifieddate = DateTime.Now,
                        statusid = afiliado.sumastatusid,
                        reasonsid = Globals.ID_REASONS_INICIAL,
                        comments = afiliado.comments
                    };
                    db.AffiliateAuds.Add(affiliateAuditoria);
                }
                //YA NO SE ENVIARÁ INFORMACIÓN A LA WEB
                //if (SaveWebPlazas(afiliado))
                //{
                //ENTIDAD Photos_Affiliate
                if (fileNoValidado != null)
                {
                    try
                    {
                        int length = fileNoValidado.ContentLength;
                        byte[] buffer = new byte[length];
                        fileNoValidado.InputStream.Read(buffer, 0, length);
                        Photos_Affiliate photos_affiliate = db.Photos_Affiliates.FirstOrDefault(x => x.Affiliate_id == afiliado.id);
                        if (photos_affiliate == null)
                        {
                            photos_affiliate = new Photos_Affiliate()
                        {
                            photo = buffer,
                            photo_type = fileNoValidado.ContentType,
                            Affiliate_id = afiliado.id
                        };
                            db.Photos_Affiliates.Add(photos_affiliate);
                        }
                        else
                        {
                            photos_affiliate.photo = buffer;
                            photos_affiliate.photo_type = fileNoValidado.ContentType;
                        }
                    }
                    catch
                    {
                    }
                }
                db.SaveChanges();
                return true;
                //}
                //else
                //{
                //    return false;
                //}
            }
        }