예제 #1
0
        public IHttpActionResult UpdateFull(List <Models.AgendaUpdate> agendas)
        {
            var agente = DataBase.Agentes.Get(p => p.Usuario.LogonName == CurrentUser.LogonName).FirstOrDefault();

            Ruta.Models.AgendaUpdateResponse response = new Models.AgendaUpdateResponse()
            {
                Result = new List <Models.AgendaResult>()
            };

            if (agente != null)
            {
                foreach (var agenda in agendas)
                {
                    Rp3.AgendaComercial.Models.Ruta.Agenda modelInsert = null;

                    try
                    {
                        bool insert = agenda.IdAgenda == 0;

                        AgendaComercial.Models.Ruta.Ruta ruta = DataBase.Rutas.GetRutaOAsignar(agente.IdAgente);
                        agente.IdRuta = ruta.IdRuta;

                        if (insert)
                        {
                            modelInsert = new Rp3.AgendaComercial.Models.Ruta.Agenda()
                            {
                                AgendaTareas = new List <AgendaComercial.Models.Ruta.AgendaTarea>()
                            };
                            modelInsert.IdRuta             = ruta.IdRuta;
                            modelInsert.OrigenTabla        = AgendaComercial.Models.Constantes.OrigenAgenda.Tabla;
                            modelInsert.Origen             = AgendaComercial.Models.Constantes.OrigenAgenda.Movil;
                            modelInsert.IdCliente          = agenda.IdCliente;
                            modelInsert.IdClienteDireccion = agenda.IdClienteDireccion;
                        }
                        else
                        {
                            modelInsert = DataBase.Agendas.Get(p => p.IdRuta == agente.IdRuta && p.IdAgenda == agenda.IdAgenda).SingleOrDefault();
                        }

                        modelInsert.EstadoAgenda            = agenda.EstadoAgenda;
                        modelInsert.FechaFinGestionTicks    = agenda.FechaFinGestionTicks;
                        modelInsert.FechaInicioGestionTicks = agenda.FechaInicioGestionTicks;

                        modelInsert.FechaFinTicks    = agenda.FechaFinTicks;
                        modelInsert.FechaInicioTicks = agenda.FechaInicioTicks;

                        modelInsert.IdAgenda = agenda.IdAgenda;

                        if (modelInsert.IdClienteContacto.HasValue && modelInsert.IdClienteContacto != 0)
                        {
                            modelInsert.IdClienteContacto = agenda.IdClienteContacto;
                        }
                        else
                        {
                            modelInsert.IdClienteContacto = null;
                        }

                        modelInsert.Latitud              = agenda.Latitud;
                        modelInsert.Longitud             = agenda.Longitud;
                        modelInsert.MotivoNoGestion      = agenda.MotivoNoGestion;
                        modelInsert.Observacion          = agenda.Observacion;
                        modelInsert.MotivoReprogramacion = agenda.MotivoReprogramacion;
                        if (agenda.MotivoReprogramacion != null && agenda.MotivoReprogramacion != "0")
                        {
                            modelInsert.EsReprogramada = true;
                        }
                        modelInsert.MotivoReprogramacionTabla = agenda.MotivoReprogramacionTabla;
                        modelInsert.Duracion            = agenda.Duracion;
                        modelInsert.DistanciaUbicacion  = agenda.DistanciaUbicacion;
                        modelInsert.TiempoViaje         = agenda.TiempoViaje;
                        modelInsert.FechaFinOriginal    = agenda.FechaFinOriginal;
                        modelInsert.FechaInicioOriginal = agenda.FechaInicioOriginal;

                        modelInsert.UsrIng = CurrentUser.LogonName;
                        modelInsert.UsrMod = CurrentUser.LogonName;
                        modelInsert.FecMod = GetCurrentDateTime();

                        modelInsert.IdAgente = agente.IdAgente;

                        modelInsert.MotivoNoGestionTabla = AgendaComercial.Models.Constantes.MotivosNoGestion.Tabla;
                        modelInsert.EstadoAgendaTabla    = AgendaComercial.Models.Constantes.EstadoAgenda.Tabla;

                        modelInsert.AgendaTareas.Clear();

                        if (insert)
                        {
                            modelInsert.AsignarId();
                            modelInsert.FecIng = GetCurrentDateTime();
                            modelInsert.FecMod = modelInsert.FecIng;
                        }

                        if (agenda.AgendaTareas != null)
                        {
                            foreach (var tarea in agenda.AgendaTareas)
                            {
                                AgendaComercial.Models.Ruta.AgendaTarea agendaTarea = new AgendaComercial.Models.Ruta.AgendaTarea()
                                {
                                    IdRuta                 = modelInsert.IdRuta,
                                    IdAgenda               = modelInsert.IdAgenda,
                                    IdTarea                = tarea.IdTarea,
                                    EstadoTareaTabla       = AgendaComercial.Models.Constantes.EstadoTarea.Tabla,
                                    EstadoTarea            = tarea.EstadoTarea,
                                    AgendaTareaActividades = new List <AgendaComercial.Models.Ruta.AgendaTareaActividad>()
                                };
                                agendaTarea.Tarea = DataBase.Tareas.GetSingleOrDefault(p => p.IdTarea == tarea.IdTarea);
                                modelInsert.AgendaTareas.Add(agendaTarea);

                                //Si se envian las actividades entonces se crean a partir de la definición de la base de datos
                                if (tarea.AgendaTareaActividades != null && tarea.AgendaTareaActividades.Any())
                                {
                                    var tareaActividades = DataBase.TareaActividades.Get(p => p.IdTarea == tarea.IdTarea);

                                    foreach (var act in tareaActividades)
                                    {
                                        var respuesta = tarea.AgendaTareaActividades.Where(p => p.IdTareaActividad == act.IdTareaActividad).FirstOrDefault();

                                        var actividad = new Rp3.AgendaComercial.Models.Ruta.AgendaTareaActividad()
                                        {
                                            IdAgenda              = modelInsert.IdAgenda,
                                            IdRuta                = modelInsert.IdRuta,
                                            IdTarea               = act.IdTarea,
                                            IdTareaActividad      = act.IdTareaActividad,
                                            IdTareaActividadPadre = act.IdTareaActividadPadre,
                                            Descripcion           = act.Descripcion,
                                            IdTipoActividad       = act.IdTipoActividad,
                                            Orden    = act.Orden,
                                            Opciones = act.Opciones
                                        };

                                        if (respuesta != null)
                                        {
                                            actividad.IdTareaOpcion   = respuesta.IdTareaOpcion;
                                            actividad.Resultado       = respuesta.Resultado;
                                            actividad.ResultadoCodigo = respuesta.ResultadoCodigo;
                                        }

                                        agendaTarea.AgendaTareaActividades.Add(actividad);
                                    }
                                }
                            }
                        }

                        if (insert)
                        {
                            DataBase.Agendas.ExecuteSerializableInsert(modelInsert);
                        }
                        else
                        {
                            DataBase.Agendas.ExecuteSerializableUpdate(modelInsert);
                        }

                        response.Result.Add(new Models.AgendaResult()
                        {
                            IdAgendaServer = modelInsert.IdAgenda,
                            IdRutaServer   = modelInsert.IdRuta,
                            IdInterno      = agenda.IdInterno,
                            Ok             = true
                        });
                    }
                    catch (Exception e)
                    {
                        response.Result.Add(new Models.AgendaResult()
                        {
                            IdInterno = agenda.IdInterno,
                            Ok        = false,
                            Error     = e.Message
                        });
                    }
                }
            }
            return(Ok(response));
        }
예제 #2
0
        public IHttpActionResult Update(List <Models.AgendaUpdate> agendas)
        {
            var agente = DataBase.Agentes.Get(p => p.Usuario.LogonName == CurrentUser.LogonName).FirstOrDefault();

            if (agente != null)
            {
                try
                {
                    foreach (var agenda in agendas)
                    {
                        var modelUpdate = DataBase.Agendas.Get(p => p.IdRuta == agenda.IdRuta && p.IdAgenda == agenda.IdAgenda, includeProperties: "AgendaTareas, AgendaTareas.AgendaTareaActividades").FirstOrDefault();

                        modelUpdate.IdAgente = agente.IdAgente;

                        if (modelUpdate != null)
                        {
                            Rp3.Data.Service.CopyTo(agenda, modelUpdate, includeProperties: new string[] {
                                "IdClienteContacto",
                                "EstadoAgenda",
                                "FechaInicioGestionTicks",
                                "FechaFinGestionTicks",
                                "Observacion",
                                "Latitud",
                                "Longitud",
                                "MotivoReprogramacion",
                                "MotivoReprogramacionTabla",
                                "Duracion",
                                "TiempoViaje",
                                "DistanciaUbicacion"
                            });


                            if (agenda.AgendaTareas != null)
                            {
                                foreach (var tarea in agenda.AgendaTareas)
                                {
                                    var tareaUpdate = modelUpdate.AgendaTareas.Where(p => p.IdTarea == tarea.IdTarea).FirstOrDefault();

                                    if (tareaUpdate != null)
                                    {
                                        Rp3.Data.Service.CopyTo(tarea, tareaUpdate, includeProperties: new string[] { "EstadoTarea" });

                                        var tareaActividades = DataBase.TareaActividades.Get(p => p.IdTarea == tareaUpdate.IdTarea);

                                        tareaUpdate.AgendaTareaActividades.Clear();

                                        foreach (var act in tareaActividades)
                                        {
                                            var respuesta = tarea.AgendaTareaActividades.Where(p => p.IdTareaActividad == act.IdTareaActividad).FirstOrDefault();

                                            var actividad = new Rp3.AgendaComercial.Models.Ruta.AgendaTareaActividad()
                                            {
                                                IdRuta                = modelUpdate.IdRuta,
                                                IdAgenda              = modelUpdate.IdAgenda,
                                                IdTarea               = tareaUpdate.IdTarea,
                                                IdTareaActividad      = act.IdTareaActividad,
                                                IdTareaActividadPadre = act.IdTareaActividadPadre,
                                                Descripcion           = act.Descripcion,
                                                IdTipoActividad       = act.IdTipoActividad,
                                                Orden    = act.Orden,
                                                Opciones = act.Opciones
                                            };

                                            if (respuesta != null)
                                            {
                                                actividad.IdTareaOpcion   = respuesta.IdTareaOpcion;
                                                actividad.Resultado       = respuesta.Resultado;
                                                actividad.ResultadoCodigo = respuesta.ResultadoCodigo;
                                            }

                                            tareaUpdate.AgendaTareaActividades.Add(actividad);
                                        }


                                        //if (tarea.AgendaTareaActividades != null)
                                        //{
                                        //    foreach (var actividad in tarea.AgendaTareaActividades)
                                        //    {
                                        //        var actividadUpdate = tareaUpdate.AgendaTareaActividades.Where(p => p.IdTarea == tarea.IdTarea && p.IdTareaActividad == actividad.IdTareaActividad).FirstOrDefault();

                                        //        if (actividadUpdate != null)
                                        //        {
                                        //            Rp3.Data.Service.CopyTo(actividad, actividadUpdate, includeProperties: new string[] { "IdTareaOpcion", "Resultado" });
                                        //        }
                                        //    }
                                        //}
                                    }
                                }
                            }

                            modelUpdate.UsrMod = CurrentUser.LogonName;
                            modelUpdate.FecMod = GetCurrentDateTime();

                            DataBase.Agendas.ExecuteSerializableUpdate(modelUpdate);
                        }
                        //else
                        //    return BadRequest(String.Format("IdRuta:{0} IdAgenda:{1}", agenda.IdRuta, agenda.IdAgenda));
                    }
                }
                catch (Exception ex)
                {
                    return(BadRequest(ex.Message));
                }
            }

            return(Ok());
        }