public static List<geoPlazas> GetCodPlazaLatLon(Int16 codplaza)
        {
            using (WASMCOMEntities w = new WASMCOMEntities())
            {
                //DateTime fechamax = fecha.AddDays(1);

                var q = from g in w.geoPlazas
                        where g.codplaza == codplaza
                        select g;

                return q.ToList();
            }
        }
        public static bool PenalizaExpedicion(Int16 codplaza, Int32 codexp, decimal importe, byte? codtipo, Int16? codconcepto, DateTime? fechaPenaliza, string observaciones )
        {
            using (WASMCOMEntities w = new WASMCOMEntities())
            {
                TExpDetalle2 det2 = (from d in w.TExpDetalle2
                                     where d.codexp == codexp
                                     && d.ultimo == "S"
                                     select d).FirstOrDefault();
                if (det2 == null) return false;

                tplazas plz = (from p in w.tplazas
                               where p.codplaza == codplaza
                               select p).FirstOrDefault();
                if (plz == null) return false;

                if (fechaPenaliza == null) fechaPenaliza = DateTime.Now;
                if (codtipo == null) codtipo = 20;
                if (string.IsNullOrEmpty(observaciones)) observaciones = "Penalización Directa";

                pnlExpediciones penalizacion = new pnlExpediciones()
                {
                    codplaza_org = det2.Codplaza_org,
                    codexp = det2.codexp,
                    fechaPenaliza = (DateTime)fechaPenaliza,
                    FPEntrega = det2.FPEntrega,
                    codtipo = (byte)codtipo,
                    codconcepto = codconcepto,
                    importe = importe,
                    estado = 0,
                    tipoPenalizacion = 1,
                    observaciones = observaciones,
                    codplazaprov = plz.codplaza,
                    codprov = plz.codprov_red
                };

                w.SaveChanges();
            }
            return true;
        }
        public static bool PenalizaSlRecogida(Int16 codplaza, Int64 codRecogida, decimal importe, byte? codtipo, Int16? codconcepto, DateTime? fechaPenaliza, string observaciones)
        {
            using (WASMCOMEntities w = new WASMCOMEntities())
            {
                tslrRecogidas rec = (from r in w.tslrRecogidas
                                     where r.CodRecogida == codRecogida
                                     select r).FirstOrDefault();

                if (rec == null) return false;

                tplazas plz = (from p in w.tplazas
                               where p.codplaza == codplaza
                               select p).FirstOrDefault();
                if (plz == null) return false;

                if (fechaPenaliza == null) fechaPenaliza = DateTime.Now;
                if (codtipo == null) codtipo = 20;
                if (string.IsNullOrEmpty(observaciones)) observaciones = "Penalización Directa";

                pnlSlRecogidas penalizacion = new pnlSlRecogidas()
                {
                    codRecogida = rec.CodRecogida,
                    fechaPenaliza = (DateTime)fechaPenaliza,
                    FRecogida = rec.FRecogida,
                    codtipo = (byte)codtipo,
                    codconcepto = codconcepto,
                    importe = importe,
                    estado = 0,
                    tipoPenalizacion = 1,
                    observaciones = observaciones,
                    codplazaprov = plz.codplaza,
                    codprov = plz.codprov_red
                };

                w.SaveChanges();
            }
            return true;
        }
        public List<Servicio> GetServicios(string codigo, Int16 top = 0, DateTime? fechaDesde = null)
        {
            if (fechaDesde == null) fechaDesde = DateTime.Now.AddMonths(-1);

            List<Servicio> servicios = new List<Servicio>();
            //using (WASMCOMEntities w = new WASMCOMEntities())
            WASMCOMEntities w = new WASMCOMEntities();
            {
                //Int64 iCodigo = 0;
                // Si el codigo es numérico, busco por codexp y por codrecogida
                var expediciones =
                    w.treferencias
                    .Join(w.texpediciones, r => r.codexp, e => e.codexp, (refs, exps) => new { refs, exps })
                    .Join(w.texpdetalle, r => r.exps.codexp, e => e.codexp, (rexps, det) => new { rexps, det })
                    .Where(r => r.det.ultimo == "S")
                    .Where(r => r.rexps.exps.fecha >= fechaDesde)
                    .Where(r => r.rexps.refs.referencia.StartsWith(codigo))
                    .Select(r => new Servicio()
                    {
                        CodExp = r.rexps.exps.codexp,
                        CodRecogida = 0L,
                        Referencia = r.rexps.refs.referencia,
                        TipoServicio = TiposServicio.EXPEDICION,
                        Fecha = r.rexps.exps.fecha,
                        Origen = new Direccion()
                        {
                            CodPlaza = r.det.codplaza_org,
                            Calle = r.rexps.exps.calle_org,
                            Nombre = r.rexps.exps.nombre_org,
                            CodigoPostal = r.rexps.exps.cp_org,
                            Localidad = r.rexps.exps.localidad_org,
                            Departamento = r.rexps.exps.departamento_org,
                            Telefono = r.rexps.exps.tfno_org
                        },
                        Destino = new Direccion()
                        {
                            CodPlaza = r.det.codplaza_dst,
                            Calle = r.rexps.exps.calle_dst,
                            Nombre = r.rexps.exps.nombre_dst,
                            CodigoPostal = r.rexps.exps.cp_dst,
                            Localidad = r.rexps.exps.localidad_dst,
                            Departamento = r.rexps.exps.departamento_dst,
                            Telefono = r.rexps.exps.tfno_dst
                        },
                        Cliente = new Cliente()
                        {
                            CodPlaza = r.det.codplaza_cli,
                            Codigo = r.det.codcli
                        },
                        CodPlazaOrg = r.det.codplaza_org,
                        CodPlazaDst = r.det.codplaza_dst,
                        CodPlazaPaga = r.det.codplaza_pag
                    });

                var solicitudes  =
                    w.tslrReferencias
                    .Join(w.tslrRecogidas, r => r.CodRecogida, s => s.CodRecogida, (r, sol) => new { r.referencia, r.CodRecogida, sol })
                    .Where(r => r.referencia.StartsWith(codigo))
                    .Where(r => r.sol.FRecogida >= fechaDesde)
                   .Select(r => new Servicio()
                   {
                       CodExp = 0,
                       CodRecogida = r.CodRecogida,
                       Referencia = r.referencia,
                       TipoServicio = TiposServicio.SLRECOGIDA,
                       Fecha = r.sol.FRecogida,
                       Origen = new Direccion()
                       {
                           CodPlaza = r.sol.CodPlaza_org,
                           Calle = r.sol.DirRec,
                           Nombre = r.sol.NombRec,
                           CodigoPostal = r.sol.cpRec,
                           Localidad = r.sol.PoblRec,
                           Departamento = r.sol.DptoRec,
                           Telefono = r.sol.TfnoRec
                       },
                       Cliente = new Cliente()
                       {
                           CodPlaza = r.sol.CodPlaza_sol,
                           Codigo = r.sol.Codcli
                       },
                       CodPlazaOrg = r.sol.CodPlaza_org,
                       CodPlazaDst = r.sol.CodPlaza_org,
                       CodPlazaPaga = r.sol.CodPlaza_sol
                   });

                /*
                if (Int64.TryParse(codigo, out iCodigo))
                {
                    expediciones = expediciones.Union(
                        w.texpdetalle
                        .Join(w.texpediciones, d => d.codexp, e => e.codexp, (det, exp) => new { det, exp })

                        .Where(e => e.det.ultimo == "S")
                        .Where(e => e.det.codexp == iCodigo)

                    .Select(r => new Servicio()
                    {
                        CodExp = r.exp.codexp,
                        CodRecogida = 0L,
                        Referencia = "" ,
                        TipoServicio = TiposServicio.EXPEDICION,
                        Fecha = r.exp.fecha,
                        Origen = new Direccion()
                        {
                            CodPlaza = r.det.codplaza_dst,
                            Calle = r.exp.calle_dst,
                            Nombre = r.exp.nombre_dst,
                            CodigoPostal = r.exp.cp_dst,
                            Localidad = r.exp.localidad_dst,
                            Departamento = r.exp.departamento_dst,
                            Telefono = r.exp.tfno_dst
                        },
                        Destino = new Direccion()
                        {
                            CodPlaza = r.det.codplaza_dst,
                            Calle = r.exp.calle_dst,
                            Nombre = r.exp.nombre_dst,
                            CodigoPostal = r.exp.cp_dst,
                            Localidad = r.exp.localidad_dst,
                            Departamento = r.exp.departamento_dst,
                            Telefono = r.exp.tfno_dst
                        },
                        Cliente = new Cliente()
                        {
                            CodPlaza = r.det.codplaza_cli,
                            Codigo = r.det.codcli
                        },

                        CodPlazaOrg = r.det.codplaza_org,
                        CodPlazaDst = r.det.codplaza_dst,
                        CodPlazaPaga = r.det.codplaza_pag
                    })
                        );
                    solicitudes = solicitudes.Union(
                        w.tslrRecogidas
                        .Where(s => s.CodRecogida == iCodigo)
                   .Select(r => new Servicio()
                   {
                       CodExp = 0,
                       CodRecogida = r.CodRecogida,
                       Referencia = "",
                       TipoServicio = TiposServicio.SLRECOGIDA,
                       Fecha = r.FRecogida,
                       Origen = new Direccion()
                       {
                           CodPlaza = r.CodPlaza_org,
                           Calle = r.DirRec,
                           Nombre = r.NombRec,
                           CodigoPostal = r.cpRec,
                           Localidad = r.PoblRec,
                           Departamento = r.DptoRec,
                           Telefono = r.TfnoRec
                       },
                       Cliente = new Cliente()
                       {
                           CodPlaza = r.CodPlaza_sol,
                           Codigo = r.Codcli
                       },
                       CodPlazaOrg = r.CodPlaza_org,
                       CodPlazaDst = r.CodPlaza_org,
                       CodPlazaPaga = r.CodPlaza_sol
                   })
                        );
                }*/
                servicios = solicitudes.Distinct().ToList();
                servicios = servicios.Concat(
                    expediciones.Distinct()
                    ).ToList();
            }

            return servicios;
        }
        //public List<Servicio> GetServiciosV01(string codigo, Int16 top = 0, DateTime? fechaDesde = null)
        //{
        //    if (fechaDesde == null) fechaDesde = DateTime.Now.AddMonths(-1);
        //    List<Servicio> servicios = new List<Servicio>();
        //    using (WASMCOMEntities w = new WASMCOMEntities())
        //    {
        //        Int64 iCodigo = 0;
        //        // Si el codigo es numérico, busco por codexp y por codrecogida
        //        var q =
        //            w.treferencias
        //            .Join(w.texpediciones, r => r.codexp, e => e.codexp, (refs, exps) => new { refs, exps })
        //            .Join(w.texpdetalle, r => r.exps.codexp, e => e.codexp, (rexps, det) => new { rexps, det })
        //            .Where(r => r.det.ultimo == "S")
        //            .Where(r => r.rexps.exps.fecha >= fechaDesde)
        //            .Where(r => r.rexps.refs.referencia.StartsWith(codigo))
        //            .Select(r => new Servicio()
        //            {
        //                CodExp = r.rexps.exps.codexp,
        //                CodRecogida = 0L,
        //                Referencia = r.rexps.refs.referencia,
        //                TipoServicio = TiposServicio.EXPEDICION,
        //                Fecha = r.rexps.exps.fecha,
        //                Origen = new Direccion()
        //                {
        //                    CodPlaza = r.det.codplaza_dst,
        //                    Calle = r.rexps.exps.calle_dst,
        //                    Nombre = r.rexps.exps.nombre_dst,
        //                    CodigoPostal = r.rexps.exps.cp_dst,
        //                    //Telefono = "12332111",
        //                    //Localidad = "localidad",
        //                    //Departamento = "dpto"
        //                    Localidad = r.rexps.exps.localidad_dst,
        //                    Departamento = r.rexps.exps.departamento_dst,
        //                    Telefono = r.rexps.exps.tfno_dst
        //                },
        //                CodPlazaOrg = r.det.codplaza_dst,
        //                CodPlazaDst = r.det.codplaza_dst,
        //                CodPlazaPaga = r.det.codplaza_pag
        //            });
        //        q = q.Union(
        //            w.tslrReferencias
        //            .Join(w.tslrRecogidas, r => r.CodRecogida, s => s.CodRecogida, (r, sol) => new { r.referencia, r.CodRecogida, sol })
        //            .Where(r => r.referencia.StartsWith(codigo))
        //            .Where(r => r.sol.FRecogida >= fechaDesde)
        //           .Select(r => new Servicio()
        //           {
        //               CodExp = 0,
        //               CodRecogida = r.CodRecogida,
        //               Referencia = r.referencia,
        //               TipoServicio = TiposServicio.SLRECOGIDA,
        //               Fecha = r.sol.FRecogida,
        //               Origen = new Direccion()
        //               {
        //                   CodPlaza = r.sol.CodPlaza_dst,
        //                   Calle = r.sol.DirRec,
        //                   Nombre = r.sol.NombRec,
        //                   CodigoPostal = r.sol.cpRec,
        //                   //Telefono = "12332111",
        //                   //Localidad = "localidad",
        //                   //Departamento = "dpto"
        //                   Localidad = r.sol.PoblRec,
        //                   Departamento = r.sol.DptoRec,
        //                   Telefono = r.sol.TfnoRec
        //               },
        //               CodPlazaOrg = r.sol.CodPlaza_org,
        //               CodPlazaDst = r.sol.CodPlaza_org,
        //               CodPlazaPaga = r.sol.CodPlaza_sol
        //           })
        //            //{ Codigo = r.CodRecogida, Referencia = r.referencia, TipoServicio = TiposServicio.SLRECOGIDA })
        //            );
        //        if (Int64.TryParse(codigo, out iCodigo))
        //        {
        //            //q = q.Union(
        //            //    w.texpdetalle
        //            //    .Join(w.texpediciones, d => d.codexp, e => e.codexp, (det, exp) => new { det, exp })
        //            //    .Where(e => e.det.ultimo == "S")
        //            //    .Where(e => e.det.codexp == iCodigo)
        //            //.Select(r => new Servicio()
        //            //{
        //            //    CodExp = r.exp.codexp,
        //            //    CodRecogida = 0L,
        //            //    Referencia = "",
        //            //    TipoServicio = TiposServicio.EXPEDICION,
        //            //    Fecha = r.exp.fecha,
        //            //    Origen = new Direccion()
        //            //    {
        //            //        CodPlaza = r.det.codplaza_dst,
        //            //        Calle = r.exp.calle_dst,
        //            //        Nombre = r.exp.nombre_dst,
        //            //        CodigoPostal = r.exp.cp_dst,
        //            //        Localidad = "localidad",
        //            //        Departamento = "dpto",
        //            //        Telefono = "12332111"
        //            //        //Localidad = r.exp.localidad_dst,
        //            //        //Departamento = r.exp.departamento_dst,
        //            //        //Telefono = r.exp.tfno_dst
        //            //    },
        //            //    CodPlazadst = r.det.codplaza_dst,
        //            //    CodPlazaDst = r.det.codplaza_dst,
        //            //    CodPlazaPaga = r.det.codplaza_pag
        //            //})
        //            //    );
        //            q = q.Union(
        //                w.tslrRecogidas
        //                .Where(s => s.CodRecogida == iCodigo)
        //           .Select(r => new Servicio()
        //           {
        //               CodExp = 0,
        //               CodRecogida = r.CodRecogida,
        //               Referencia = "",
        //               TipoServicio = TiposServicio.SLRECOGIDA,
        //               Fecha = r.FRecogida,
        //               Origen = new Direccion()
        //               {
        //                   CodPlaza = r.CodPlaza_dst,
        //                   Calle = r.DirRec,
        //                   Nombre = r.NombRec,
        //                   CodigoPostal = r.cpRec,
        //                   Localidad = r.PoblRec,
        //                   Departamento = r.DptoRec,
        //                   Telefono = r.TfnoRec
        //               },
        //               CodPlazadst = r.CodPlaza_dst,
        //               CodPlazaDst = r.CodPlaza_dst,
        //               CodPlazaPaga = r.CodPlaza_sol
        //           })
        //                );
        //        }
        //        servicios = q.Distinct().ToList();
        //        //servicios = q.ToList();
        //    }
        //    return servicios;
        //}
        public List<tplazas> GetPlazasConsulta(string parcial)
        {
            List<tplazas> plazas = null;

            int iparcial, codplaza01=999, codplaza02=0;

            if (int.TryParse(parcial, out iparcial))
            {
                if (iparcial < 10)
                {
                    codplaza01 = iparcial * 100;
                    codplaza02 = int.Parse(iparcial.ToString("0") + "99");
                }
                else if (iparcial < 100)
                {
                    codplaza01 = iparcial * 10;
                    codplaza02 = int.Parse(iparcial.ToString("00") + "9");
                }
                else
                {
                    codplaza01 = iparcial;
                    codplaza02 = iparcial;
                }

            }

            using (WASMCOMEntities w = new WASMCOMEntities())
            {

                var q = (from p in w.tplazas
                         where p.operativa == "S"
                         select p);

                if (!string.IsNullOrEmpty(parcial))
                {
                    q = q.Where(p => p.plaza.Contains(parcial) || (p.codplaza >= codplaza01 && p.codplaza<= codplaza02));
                }
                plazas = q.ToList<tplazas>();
            }

            return plazas;
        }
        public static int SetEstadoExp(Int32 codexp, Int16 codestado, string informacion, DateTime? fecha,Int16? codplaza_org )
        {
            int ret=0;
            if (fecha == DateTime.MinValue) fecha = null;
            using (WASMCOMEntities w = new WASMCOMEntities())
            {
                if (codplaza_org == null)
                {
                    codplaza_org = (from e in w.texpediciones
                                    where e.codexp == codexp
                                    select e.codplaza_org).FirstOrDefault();
                }

                string sql = "declare @ret int;";
                sql += " exec @ret=wasmcom.dbo.stpExpInsertaEstado";
                sql += " @codplaza_org={0}";
                sql += " ,@codexp={1}";
                sql += " ,@codestado={2}";
                sql += " ,@informacion={3}";
                sql += " ,@fecha={4};";
                sql += " select @ret;";

                var q = w.Database.SqlQuery<int>(sql, codplaza_org, codexp, codestado, informacion, fecha);
                ret = q.FirstOrDefault();

                //w.Database.ExecuteSqlCommand(sql, codplaza_org, codexp,codestado,informacion,fecha);
                //ret = w.stpExpInsertaEstado(codplaza_org, codexp, codestado, informacion, fecha, null, null, null, null, null, null, null, null, true, false);
            }

            return ret;
        }
        public List<webContactos> GetContactos(GridSettings grid, string abiertas, string cerradas, string fechadesde, ref int pageIndex, ref int pageSize, ref int totalRecords, ref int totalPages)
        {
            WASMCOMEntities w = new WASMCOMEntities();
            List<Int16> misPlazas = (new Seguridad()).GetMisPlazasConsulta();

            var q =
                from wc in w.webContactos
                from p in w.tplazas.Where(p => p.codplaza == wc.codplaza).DefaultIfEmpty()
                where (misPlazas.Contains(wc.codplaza.Value))
                select new
                {
                    wc.id,
                    wc.codplaza,
                    wc.contacto,
                    wc.cp,
                    wc.direccion,
                    wc.email,
                    wc.empresa,
                    wc.estado,
                    wc.fecha,
                    wc.peticion,
                    wc.poblacion,
                    wc.telefono,
                    wc.texto,
                    p.plaza
                };

            bool bAbiertas = true;
            bool bCerradas = true;
            DateTime dFechaDesde;

            bool.TryParse(abiertas, out bAbiertas);
            bool.TryParse(cerradas, out bCerradas);

            if (!(bAbiertas && bCerradas) && (bAbiertas || bCerradas))
            {
                if (bAbiertas) q = q.Where(wc => wc.estado == 0);
                if (bCerradas) q = q.Where(wc => wc.estado == 1);
            }

            if (DateTime.TryParse(fechadesde, out dFechaDesde))
            {
                q = q.Where(r => r.fecha >= dFechaDesde);
            }

            if (grid.IsSearch)
            {
                foreach (var rule in grid.Where.rules)
                {
                    //q = q.Where(rule.field, rule.data, WhereOperation.Equal);
                    switch (rule.field)
                    {
                        default:
                            q = q.Where(rule.field, rule.data, WhereOperation.Equal);
                            break;
                    }
                }
            }

            if (grid.SortColumn == "") grid.SortColumn = "fecha";
            q = q.OrderBy(grid.SortColumn, grid.SortOrder);

            pageIndex = grid.PageIndex;
            pageSize = grid.PageSize;
            totalRecords = q.Count();
            totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            int startRow = (pageIndex - 1) * pageSize;
            int endRow = startRow + pageSize;

            q = q.Skip((pageIndex - 1) * pageSize).Take(pageSize);

            List<webContactos> contactos = new List<webContactos>(pageSize);

            foreach (var con in q)
            {
                webContactos c = new webContactos();
                    c.id = con.id;
                    c.codplaza = con.codplaza;
                    c.contacto = con.contacto;
                    c.cp = con.cp;
                    c.direccion = con.direccion;
                    c.email = con.email;
                    c.empresa = con.empresa;
                    c.estado = con.estado;
                    c.fecha = con.fecha;
                    c.peticion = con.peticion;
                    c.poblacion = con.poblacion;
                    c.telefono = con.telefono;
                    c.texto = con.texto;
                    //c.plaza = con.plaza;

                contactos.Add(c);
            }

            w.Dispose();
            return contactos;
        }
        private IEnumerable<clTiposTrackingReclamacion> GetTiposTrackingReclamacion()
        {
            WASMCOMEntities w = new WASMCOMEntities();
            var q = from t in w.clTiposTrackingReclamacion
                    select t;

            return q.ToList();
        }
        public static expediciones GetExpedicion(string codigo)
        {
            expediciones expedicion=null;
            using (WASMCOMEntities w = new WASMCOMEntities())
            {
                Int32 exp;
                if (Int32.TryParse(codigo, out exp))
                {
                    w.Database.ExecuteSqlCommand("exec config.dbo.secActivaCuenta 'ParaTareas'");
                    expedicion = (from e in w.expediciones
                                  where e.codexp == exp
                                  select e).FirstOrDefault();
                }
            }

            return expedicion;
        }
        private IEnumerable<clTrackingReclamacion> GetTracking()
        {
            WASMCOMEntities w = new WASMCOMEntities();
            var q = from t in w.clTrackingReclamacion
                    where t.idReclamacion == this.id
                    select t;

            return q.ToList();
        }
        public bool GrabaBD()
        {
            //#if DEBUG

            //            WASMCOMEntities ww = new WASMCOMEntities();

            //            clReclamaciones rr =
            //                        (from r in ww.clReclamaciones
            //                         where r.id == this.idReclamacion
            //                         select r).FirstOrDefault();

            //            rr.cerrada = true;
            //            rr.codplazaPenalizada = rr.codplazaReclamada;
            //            rr.importeIndemnizacion = ImporteIndemnizacion;
            //            rr.importePenalizacion = ImportePenalizacion;
            //            rr.invertirCargos = InvertirCargos;

            //            rr.OnCierre();

            //            return true;
            //#endif

            if (!HttpContext.Current.User.Identity.IsAuthenticated) return false;

            WASMCOMEntities w = new WASMCOMEntities();
            try
            {
                if (this.fecha == DateTime.MinValue) this.fecha = DateTime.Now;
                this.usuario = HttpContext.Current.User.Identity.Name;
                w.clTrackingReclamacion.Add(this);
                w.SaveChanges();

                if (this.tipoTracking == 3 || this.tipoTracking ==4) // Aceptada/rechazada
                {
                    if (this.tipoTracking == 4)
                    {
                        ImporteIndemnizacion = 0;
                        ImportePenalizacion = 0;
                    }

                    clTrackingReclamacion cerrada = new clTrackingReclamacion();
                    cerrada.tipoTracking = 5;
                    cerrada.fecha = DateTime.Now;
                    cerrada.idReclamacion = this.idReclamacion;
                    cerrada.observaciones = "Cerrada automaticamente";
                    cerrada.usuario = HttpContext.Current.User.Identity.Name;
                    w.clTrackingReclamacion.Add(cerrada);

                    clReclamaciones reclamacion =
                        (from r in w.clReclamaciones
                        where r.id == this.idReclamacion
                        select r).FirstOrDefault();

                    reclamacion.cerrada = true;
                    reclamacion.importeIndemnizacion = ImporteIndemnizacion;
                    reclamacion.importePenalizacion = ImportePenalizacion;
                    reclamacion.invertirCargos = InvertirCargos;

                    if (reclamacion.codplazaPenalizada == null && reclamacion.importePenalizacion > 0)
                    {
                        reclamacion.codplazaPenalizada = reclamacion.codplazaReclamada;
                    }

                    if (reclamacion.codplazaIndemnizada == null && reclamacion.importeIndemnizacion > 0)
                    {
                        reclamacion.codplazaIndemnizada = reclamacion.codplazaReclama;
                    }
                    w.SaveChanges();

                    reclamacion.OnCierre();

                }

                w.Dispose();
            }
            catch
            {
                w.Dispose();
                return false;
            }

            return true;
        }
        public bool GrabaBD()
        {
            if (!HttpContext.Current.User.Identity.IsAuthenticated) return false;

            WASMCOMEntities w = new WASMCOMEntities();
            try
            {
                //es obligatorio codexp o codrecogida
                if (this.codexp == null && this.codrecogida == null) return false;
                if (this.fechaInicio == null) this.fechaInicio = DateTime.Now;
                if (this.codplazaReclama == null) this.codplazaReclama = new Seguridad().GetMiCodPlaza();
                w.clReclamaciones.Add(this);
                w.SaveChanges();

                clTrackingReclamacion tr = new clTrackingReclamacion();
                tr.tipoTracking = 1;
                tr.fecha = DateTime.Now;
                tr.idReclamacion = this.id;
                tr.observaciones = string.IsNullOrEmpty(ObservacionesAlta) ? "Por grabación" : ObservacionesAlta;
                tr.usuario = HttpContext.Current.User.Identity.Name;

                w.clTrackingReclamacion.Add(tr);
                w.SaveChanges();

                w.Dispose();
            }
            catch
            {
                w.Dispose();
                return false;
            }

            return true;
        }
        public List<clReclamaciones> GetReclamaciones(GridSettings grid, string abiertas, string cerradas, string fechadesde, ref int pageIndex, ref int pageSize, ref int totalRecords, ref int totalPages)
        {
            WASMCOMEntities w = new WASMCOMEntities();
            List<Int16> misPlazas = (new Seguridad()).GetMisPlazasConsulta();

            var q =
                from r in w.clReclamaciones
                from p1 in w.tplazas.Where(p1 => p1.codplaza == r.codplazaReclama).DefaultIfEmpty()
                from p2 in w.tplazas.Where(p2 => p2.codplaza == r.codplazaReclamada).DefaultIfEmpty()
                from p3 in w.tplazas.Where(p3 => p3.codplaza == r.codplazaPenalizada).DefaultIfEmpty()
                from p4 in w.tplazas.Where(p4 => p4.codplaza == r.codplazaIndemnizada).DefaultIfEmpty()
                where ( misPlazas.Contains(r.codplazaReclama.Value)
                || misPlazas.Contains(r.codplazaReclamada.Value))

                select new
                {
                    id = r.id,
                    tipoReclamacion = r.tipoReclamacion,
                    codplazaReclama = r.codplazaReclama,
                    codplazaReclamada = r.codplazaReclamada,
                    fechaInicio = r.fechaInicio,
                    fechaFin = r.fechaFin,
                    codexp = r.codexp,
                    codrecogida = r.codrecogida,
                    importePenalizacion = r.importePenalizacion,
                    importeIndemnizacion = r.importeIndemnizacion,
                    codplazaPenalizada = r.codplazaPenalizada,
                    codplazaIndemnizada = r.codplazaIndemnizada,
                    PlazaReclama = p1.plaza,
                    PlazaReclamada = p2.plaza,
                    PlazaPenalizada = p3.plaza,
                    PlazaIndemnizada = p4.plaza,
                    Cerrada = r.cerrada
                };

            bool bAbiertas = true;
            bool bCerradas = true;
            DateTime dFechaDesde;

            bool.TryParse(abiertas, out bAbiertas);
            bool.TryParse(cerradas, out bCerradas);

            if (!(bAbiertas && bCerradas) && (bAbiertas || bCerradas))
            {
                if (bAbiertas) q = q.Where(r => r.Cerrada == false);
                if (bCerradas) q = q.Where(r => r.Cerrada == true);
            }

            if (DateTime.TryParse(fechadesde, out dFechaDesde))
            {
                q = q.Where(r => r.fechaInicio >= dFechaDesde);
            }

            if (grid.IsSearch)
            {
                foreach (var rule in grid.Where.rules)
                {
                    //q = q.Where(rule.field, rule.data, WhereOperation.Equal);
                    switch (rule.field)
                    {
                        case "CodPlazaReclama":
                            short codplazaReclama = Convert.ToInt16(rule.data);
                            q = q.Where(r => r.codplazaReclama == codplazaReclama);
                            break;

                        case "CodPlazaReclamada":
                            short codplazaReclamada = Convert.ToInt16(rule.data);
                            q = q.Where(r => r.codplazaReclamada == codplazaReclamada);
                            break;
                        case "CodPlazaPenalizada":
                            short codplazaPenalizada = Convert.ToInt16(rule.data);
                            q = q.Where(r => r.codplazaPenalizada == codplazaPenalizada);
                            break;

                        case "CodPlazaIndemnizada":
                            short codplazaIndemnizada = Convert.ToInt16(rule.data);
                            q = q.Where(r => r.codplazaIndemnizada == codplazaIndemnizada);
                            break;

                        case "ImportePenalizacion":
                            decimal importePenalizacion = Convert.ToDecimal(rule.data);
                            q = q.Where(r => r.importePenalizacion >= importePenalizacion);
                            break;
                        case "ImporteIndemnizacion":
                            decimal importeIndemnizacion = Convert.ToDecimal(rule.data);
                            q = q.Where(r => r.importeIndemnizacion >= importeIndemnizacion);
                            break;

                        case "CodExp":
                            int codexp = Convert.ToInt32(rule.data);
                            q = q.Where(r => r.codexp >= codexp);
                            break;
                        case "CodRecogida":
                            Int64 codrecogida = Convert.ToInt64(rule.data);
                            q = q.Where(r => r.codrecogida >= codrecogida);
                            break;
                        default:
                            q = q.Where(rule.field, rule.data, WhereOperation.Equal);
                            break;
                    }
                }
            }

            if (grid.SortColumn == "") grid.SortColumn = "FechaInicio";
            q = q.OrderBy(grid.SortColumn, grid.SortOrder);

            //q = q.OrderBy<clReclamaciones>(grid.SortColumn, grid.SortOrder);

            pageIndex = grid.PageIndex;
            pageSize = grid.PageSize;
            totalRecords = q.Count();
            totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            int startRow = (pageIndex - 1) * pageSize;
            int endRow = startRow + pageSize;

            //return q.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToArray();

            q = q.Skip((pageIndex - 1) * pageSize).Take(pageSize);

            List<clReclamaciones> recs = new List<clReclamaciones>(pageSize);

            foreach (var rec in q)
            {
                clReclamaciones r = new clReclamaciones();
                r.id = rec.id;
                r.tipoReclamacion = rec.tipoReclamacion;
                r.codplazaReclama = rec.codplazaReclama;
                r.codplazaReclamada = rec.codplazaReclamada;
                r.fechaInicio = rec.fechaInicio;
                r.fechaFin = rec.fechaFin;
                r.codexp = rec.codexp;

                r.codrecogida = rec.codrecogida;
                r.importePenalizacion = rec.importePenalizacion;
                r.importeIndemnizacion = rec.importeIndemnizacion;
                r.codplazaPenalizada = rec.codplazaPenalizada;
                r.codplazaIndemnizada = rec.codplazaIndemnizada;
                r.PlazaReclama = rec.PlazaReclama;
                r.PlazaReclamada = rec.PlazaReclamada;
                r.PlazaPenalizada = rec.PlazaPenalizada;
                r.PlazaIndemnizada = rec.PlazaIndemnizada;
                r.Estado = rec.Cerrada ? "Cerrada" : "Abierta";

                recs.Add(r);
            }

            w.Dispose();
            return recs;
        }
        public static List<tPdaPosiciones> GetRutaRepartidor(Int16 codplaza, Int32 codrepartidor, DateTime fecha)
        {
            using (WASMCOMEntities w = new WASMCOMEntities())
            {
                DateTime fechamax = fecha.AddDays(1);

                var q = from p in w.tPdaPosiciones

                        where p.codplaza_rep == codplaza
                        && p.codrepartidor == codrepartidor
                        && p.fpda > fecha
                        && p.fpda < fechamax
                        orderby	p.fpda
                        select p;

                return q.ToList();
            }
        }
Exemple #15
0
            public void Procesa()
            {
                if (TieneError) return;
                if (CodBarrasExpedicion == null)
                {
                    Error = string.Format("{0} No es un codigo de barras válido",CodBarras);
                    Resultado = "-3";
                    return;
                }

                using (WASMCOMEntities w = new WASMCOMEntities())
                {

                    var expedicion = (from cc in w.texp_codbar_cli
                                      //join det2 in w.TExpDetalle2 on new { cc.codexp, cc.codplaza_org } equals new { det2.codexp, det2.Codplaza_org }
                                from det2 in w.TExpDetalle2
                                where
                                cc.codbar == CodBarrasExpedicion
                                && det2.Codplaza_org == cc.codplaza_org
                                && det2.codexp == cc.codexp
                                && det2.ultimo == "S"

                                select new { cc.codexp, cc.codplaza_org, det2.dninom, det2.CodDestinatario }).FirstOrDefault();

                    //var expedicion = (from cc in w.texp_codbar_cli
                    //                  //join det2 in w.TExpDetalle2 on new { cc.codexp, cc.codplaza_org } equals new { det2.codexp, det2.Codplaza_org }
                    //                  join det2 in w.TExpDetalle2 on cc.codexp equals det2.codexp
                    //                  where cc.codbar == CodBarrasExpedicion
                    //                  && det2.ultimo == "S"
                    //                  select new { cc.codexp, cc.codplaza_org, det2.dninom, det2.CodDestinatario }).FirstOrDefault();

                    if (expedicion == null)
                    {
                        Error = string.Format("No existe la expedición", CodBarras);
                        Resultado = "-4";
                        return;
                    }

                    if (expedicion.dninom != 7)
                    {
                        Error = "No está solicitada la entrega en DIA";
                        Resultado = "-5";
                        return;
                    }

                    //Esto habrá que ver si es un warning y como lo hacemos llegar
                    if (expedicion.CodDestinatario != CodigoTienda)
                    {
                        Error = "No está solicitada para esta tienda DIA";
                        Resultado = "-6";
                        return;
                    }

                    //Comprobar que está en el estado apropiado -- esto lo meto en el stored --
                    //// para todas no final
                    //// para llegada no puede estar entregada en punto dia
                    //// para recogida debe estar entregada en punto dia
                    //// para devolucion
                    //// para caducado

                    //Llegada
                    int ret = -99;
                    switch (Peticion)
                    {
                        case TipoPeticion.LLEGADA:
                            ret = Wasmcom.SetEstadoExp(expedicion.codexp, 22, "Por comm DIA", DateTime.Now, expedicion.codplaza_org);
                            switch (ret)
                            {
                                case 0:
                                    Resultado = "OK";
                                    break;
                                case -1:
                                    Resultado = "KO";
                                    Error = "ERROR, NO EXISTE EXPEDICION";
                                    break;
                                case -2:
                                    Resultado = "KO";
                                    Error = "ERROR, ESTA EN ESTADO FINAL";
                                    break;
                                default:
                                    Resultado = "KO";
                                    Error = "Error desconocido";
                                    break;
                            }
                            break;
                        case TipoPeticion.RECOGIDA:
                            ret = Wasmcom.SetEstadoExp(expedicion.codexp, 7, "Por comm DIA", DateTime.Now, expedicion.codplaza_org);
                            switch (ret)
                            {
                                case 0:
                                    Resultado = "OK";
                                    break;
                                case -1:
                                    Resultado = "KO";
                                    Error = "ERROR, NO EXISTE EXPEDICION";
                                    break;
                                case -2:
                                    Resultado = "KO";
                                    Error = "ERROR, ESTA EN ESTADO FINAL";
                                    break;
                                default:
                                    Resultado = "KO";
                                    Error = "Error desconocido";
                                    break;
                            }
                            break;
                        case TipoPeticion.DEVOLUCION:
                            break;
                        case TipoPeticion.CADUCADO:
                            break;
                        case TipoPeticion.Desconocido:
                            break;
                        default:
                            break;
                    }
                }
            }
 public static string GetMailPlaza(Int16 codplaza)
 {
     string mail = null;
     using (WASMCOMEntities w = new WASMCOMEntities())
     {
             mail = (from p in w.tplazas
                      where p.codplaza == codplaza
                      select p).FirstOrDefault().mail;
     }
     return mail;
 }
        public List<webContactosTracking> GetTrackingContacto(GridSettings grid, Int64 id, ref int pageIndex, ref int pageSize, ref int totalRecords, ref int totalPages)
        {
            WASMCOMEntities w = new WASMCOMEntities();

            var q =
                from t in w.webContactosTracking
                where (t.idContacto == id)
                select t;

            if (grid.SortColumn == "") grid.SortColumn = "Fecha";
            q = q.OrderBy(grid.SortColumn, grid.SortOrder);

            pageIndex = grid.PageIndex;
            pageSize = grid.PageSize;
            totalRecords = q.Count();
            totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            int startRow = (pageIndex - 1) * pageSize;
            int endRow = startRow + pageSize;

            q = q.Skip((pageIndex - 1) * pageSize).Take(pageSize);

            List<webContactosTracking> trk = q.ToList();

            w.Dispose();
            return trk;
        }
 public static tplazas GetPlaza(string codigo)
 {
     tplazas plaza = null;
     using (WASMCOMEntities w = new WASMCOMEntities())
     {
         Int16 codplaza;
         if (Int16.TryParse(codigo, out codplaza))
         {
             plaza = (from p in w.tplazas
                      where p.codplaza == codplaza
                      select p).FirstOrDefault();
         }
     }
     return plaza;
 }
        public bool GrabaBD()
        {
            if (!HttpContext.Current.User.Identity.IsAuthenticated) return false;

            WASMCOMEntities w = new WASMCOMEntities();
            try
            {
                if (this.fecha == null) this.fecha = DateTime.Now;
                if (this.fecha == DateTime.MinValue) this.fecha = DateTime.Now;
                this.usuario = HttpContext.Current.User.Identity.Name;
                w.webContactosTracking.Add(this);

                if (this.tipo == 2)
                {
                    webContactos contacto =
                        (from c in w.webContactos
                        where c.id == this.idContacto
                        select c).FirstOrDefault();

                    contacto.estado = 1;
                }
                w.SaveChanges();
                w.Dispose();
            }
            catch
            {
                w.Dispose();
                return false;
            }

            return true;
        }
            public static List<HojaRepartidor> BuscaPorFecha(Int16 codPlaza, Int32 codRepartidor, DateTime fecha)
            {
                List<HojaRepartidor> hojas = new List<HojaRepartidor>();

                using (WASMCOMEntities w = new WASMCOMEntities())
                {
                    var q = from h in w.tRepartoHojas
                            where h.codplaza_rep == codPlaza
                            && h.codrepartidor == codRepartidor
                            && h.fecha == fecha
                            select h;

                    foreach (tRepartoHojas h in q)
                    {
                        HojaRepartidor hoja = new HojaRepartidor()
                        {
                            CodPlaza = h.codplaza,
                            CodRepartidor = h.codrepartidor,
                            Hoja = h.hoja,
                            Fecha = h.fecha,
                            Estado = h.estado == null || h.estado == 0 ? "Abierta" : h.estado == 1 ? "Cerrada" :  "Liquidada"
                        };

                        var reps = from r in w.tReparto
                                   where r.codplaza == hoja.CodPlaza
                                   && r.hoja == hoja.Hoja
                                   select r;

                        hoja.ExpsEntregadas = 0;
                        hoja.ExpsIncidencia = 0;
                        hoja.Expediciones = new List<tReparto>();

                        foreach (tReparto r in reps)
                        {
                            switch (r.liquidacion)
                            {
                                case -1:
                                    hoja.ExpsEntregadas++;
                                    break;
                                case 0:
                                    break;
                                default:
                                    hoja.ExpsIncidencia++;
                                    break;
                            }
                            hoja.Expediciones.Add(r);
                        }

                        hojas.Add(hoja);
                    }
                }

                return hojas;
            }