Example #1
0
        /// <summary>
        /// Click en botón quitar de la lista de recursos asignados
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lkbQuitarRecursoAsignado_Click(object sender, EventArgs e)
        {
            //Declaramos Objeto Resultado
            RetornoOperacion resultado = new RetornoOperacion();

            //Validamos que existan Recursos Asignados
            if (gvRecursosAsignados.DataKeys.Count > 0)
            {
                //Seleccionando la fila actual
                Controles.SeleccionaFila(gvRecursosAsignados, sender, "lnk", false);

                //Instanciamos Asignación
                using (MovimientoAsignacionRecurso objMovimientoAsignacionRecurso = new MovimientoAsignacionRecurso
                                                                                        (Convert.ToInt32(gvRecursosAsignados.SelectedDataKey.Value)))
                {
                    //Validamos Deshabilitación de Recursos
                    resultado = objMovimientoAsignacionRecurso.ValidaDeshabilitacionRecursos();
                }
                //Si existe asignación ligada
                if (!resultado.OperacionExitosa)
                {
                    //Asignamos Mensaje a la ventana Modal
                    lblMensaje.Text = resultado.Mensaje;
                    //Ocultando ventana de recursos asignados
                    alternaVentanaModal("unidadesAsignadas", (LinkButton)sender);
                    //Mostrando ventana de confirmación para quitar recurso asociado
                    alternaVentanaModal("confirmacionQuitarRecursos", (LinkButton)sender);
                }
                else
                {
                    //Deshabilitamos Recurso Asignado
                    deshabilitaRecurso();
                }
            }
        }
Example #2
0
        /// <summary>
        /// Deshabilita Recurso
        /// </summary>
        private void deshabilitaRecurso()
        {
            //Definiendo objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion();

            //Instanciando la asignación
            using (MovimientoAsignacionRecurso r = new MovimientoAsignacionRecurso(Convert.ToInt32(gvRecursosAsignados.SelectedValue)))
                //Realizando la deshabilitación
                resultado = r.DeshabilitaMovimientosAsignacionesRecurso(((SAT_CL.Seguridad.UsuarioSesion)Session["usuario_sesion"]).id_usuario);

            //Si no existe ningún error
            if (resultado.OperacionExitosa)
            {
                //Cargando lista de recursos asignados
                cargaRecursosAsignados();
                //Actualizamos la consulta de servicios pendientes
                cargaServiciosManteniendoSeleccion();
                //Actualizamos el grid
                upgvServicios.Update();
                //Si no hay registros asignados al servicio
                if (gvRecursosAsignados.DataKeys.Count == 0)
                {
                    //Ocultando ventana de recursos asignados
                    alternaVentanaModal("unidadesAsignadas", this);
                }
            }

            //Mostrando resultados
            ScriptServer.MuestraNotificacion(this, resultado, ScriptServer.PosicionNotificacion.AbajoDerecha);
        }
Example #3
0
        /// <summary>
        /// Valida que la asignación de recurso esté asociada a un movimiento de servicio (NO Movimientos en Vacío)
        /// </summary>
        /// <param name="id_movimiento_asignacion">Id de Asignación del movimiento</param>
        /// <param name="id_servicio">Id de servicio al que pertenece</param>
        /// <returns></returns>
        private RetornoOperacion validaMovimientoServicio(int id_movimiento_asignacion, out int id_servicio)
        {
            //Asignando parametros de salida
            id_servicio = 0;

            //Inicializando resultado sin errores
            RetornoOperacion resultado = new RetornoOperacion("Recurso asignado a servicio.", true);

            //Instanciando Asignación
            using (MovimientoAsignacionRecurso asignacion = new MovimientoAsignacionRecurso(id_movimiento_asignacion))
            {
                //Cargando movimiento correspondiente
                using (Movimiento mov = new Movimiento(asignacion.id_movimiento))
                {
                    //Asignando id de servicio
                    id_servicio = mov.id_servicio;

                    //Si el movimiento no es de servicio
                    if (mov.id_servicio == 0)
                    {
                        resultado = new RetornoOperacion("El movimiento de la asignación no corresponde a un servicio.");
                    }
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Example #4
0
        /// <summary>
        /// Inicializamos Controles Movimiento en Vacio
        /// </summary>
        /// <param name="idCompania">Id Compania del Servicio</param>
        /// <param name="idParadaActual">Id Parada Actual</param>
        /// <param name="tipoActualizaionFin">Tipo de Actualización Fin de la Estancia (Manual, GPS, APP)</param>
        public void InicializaControl(int idCompania, int idParadaActual, Parada.TipoActualizacionLlegada tipoActualizacionLlegada, Parada.TipoActualizacionSalida tipoActualizacionSalida, EstanciaUnidad.TipoActualizacionInicio tipoActuailizacionInicio,
                                      EstanciaUnidad.TipoActualizacionFin tipoActualizaionFin)
        {
            //Asignamo Atributos
            this._id_compania_emisor        = idCompania;
            this._id_tipo_actualizacion_fin = tipoActualizaionFin;
            this._id_parada           = idParadaActual;
            this._id_ubicacion_origen = 0;  //Se actualiza con el Id de Ubicación de la unidad principal del movimiento

            //Instanciamos Parada
            using (Parada objParada = new Parada(idParadaActual))
            {
                //Declaramos Variables para la Unidad por modificar ubicación
                int id_unidad = 0;

                //Asignando Atributos
                this._id_servicio = objParada.id_servicio;

                //Cargamos la Unidade que se asignarón a la Parada pero se encuentran en una ubicación distinta
                MovimientoAsignacionRecurso.CargaRecursoAsignadoAParadaDifUbicacion(idParadaActual, objParada.id_ubicacion, out id_unidad, out this._id_ubicacion_origen);

                //Instanciamos Unidad
                using (SAT_CL.Global.Unidad objUnidad = new SAT_CL.Global.Unidad(id_unidad))
                {
                    //Si existe unidad a mover
                    if (objUnidad.id_unidad > 0)
                    {
                        //Instanciamos Tipo de Unidad
                        using (SAT_CL.Global.UnidadTipo objUnidadTipo = new SAT_CL.Global.UnidadTipo(objUnidad.id_tipo_unidad))
                        {
                            //Cargamos Catalogos
                            cargaCatalogos(this._id_ubicacion_origen);

                            //Validamos Tipo de Unidad para Inicializar y habilitar Controles
                            if (objUnidadTipo.bit_motriz == true)
                            {
                                //Inicializamos Controles
                                inicializaValoresUnidad(objUnidad.id_unidad);
                                //Habilitamos Controles
                                habilitarControlesUnidad();
                            }
                            else
                            {
                                //Inicializamos Controles
                                inicializaValoresRemolque(objUnidad.id_unidad);
                                //Habilitamos Controles
                                habilitaControlesRemolque();
                            }
                        }
                    }
                    else
                    {
                        //Inicializamos Controles
                        inicializaValores();
                        //Habilitamos Controles
                        habilitarControles();
                    }
                }
            }
        }
Example #5
0
        /// <summary>
        /// Edita la Fecha de Termino del Movimiento
        /// </summary>
        /// <param name="fecha_termino">Fecha de termino del movimiento / Inicio de la Estancia</param>
        /// <param name="tipo_llegada">Tipo actualización  de la fecha de llegada de la parada</param>
        /// <param name="tipo_actualizacion_inicio">Tipo actualización  de la fecha de inicio de la estancia</param>
        /// <param name="id_usuario">Id Usuario actualiza</param>
        /// <returns></returns>
        public RetornoOperacion EditaFechaTerminoMovimiento(DateTime fecha_termino, Parada.TipoActualizacionLlegada tipo_llegada, EstanciaUnidad.TipoActualizacionInicio tipo_actualizacion_inicio, int id_usuario)
        {
            //Declarando objeto de retorno
            RetornoOperacion resultado = new RetornoOperacion();

            //Validando estatus actual del movimiento
            if (this.EstatusMovimiento == Estatus.Terminado)
            {
                //Iniciando transacción
                using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                {
                    //Validando que las unidades involucradas se encuentren:
                    //Asociadas aún al servicio y en estatus ocupado
                    //Disponibles en la ubicación de fin del movimiento y sin ningún movimiento asignado
                    resultado = MovimientoAsignacionRecurso.ValidaRecursosParaReversaTerminaMovimiento(this._id_movimiento);

                    //Validamos Resultado
                    if (resultado.OperacionExitosa)
                    {
                        //Validamos que no existan pagos ligados al movimeinto
                        resultado = validaPagos();

                        //Validamos Resultado
                        if (resultado.OperacionExitosa)
                        {
                            //Actualizamos la fecha de llegada de las Estancias
                            resultado = EstanciaUnidad.EditaEstanciasUnidadFechaInicio(this._id_parada_destino, fecha_termino, tipo_actualizacion_inicio, id_usuario);

                            //Validamos Resultado
                            if (resultado.OperacionExitosa)
                            {
                                //Instanciamos Parada destino
                                using (Parada objParadaDestino = new Parada(this._id_parada_destino))
                                {
                                    //Editamos fecha de llegada de la parada
                                    resultado = objParadaDestino.EditaFechaLlegadaParada(fecha_termino, tipo_llegada, 0, id_usuario);
                                }
                            }
                        }
                    }
                }
            }
            //Devolvemos Resultado
            return(resultado);
        }
Example #6
0
        /// <summary>
        /// Realiza la actualización de la parada, fecha y recursos finales del servicio
        /// </summary>
        /// <param name="id_parada_destino">Id de parada de destino</param>
        /// <param name="fecha_fin">Fecha de Fin de la parada</param>
        /// <param name="id_usuario">Id de Usuario</param>
        /// <returns></returns>
        public RetornoOperacion ActualizaParadaDestinoServicio(int id_parada_destino, DateTime fecha_fin, int id_usuario)
        {
            //Declarando variables auxiliareas para obtencion de recursos principales del servicio
            int id_motriz_principal = 0, id_arrastre_1 = 0, id_arrastre_2 = 0, id_tercero = 0;

            //Obtenemos Unidades de Arratre Principales
            MovimientoAsignacionRecurso.ObtieneRecursoArrastrePrincipalServicio(this._id_servicio, out id_arrastre_1, out id_arrastre_2);
            //Motriz
            id_motriz_principal = MovimientoAsignacionRecurso.ObtieneRecursoPrincipalServicio(this._id_servicio, MovimientoAsignacionRecurso.Tipo.Unidad, 1);
            //Tercero
            id_tercero = MovimientoAsignacionRecurso.ObtieneRecursoPrincipalServicio(this._id_servicio, MovimientoAsignacionRecurso.Tipo.Tercero, 0);

            //Actualizando y devolviendo resultado
            return(editaServicioDespacho(this._id_servicio, this._fecha_inicio, fecha_fin, this._id_parada_origen,
                                         id_parada_destino, this._id_parada_carga_inicio, id_parada_destino, this._kms_asignados,
                                         this._kms_recorridos, this._kms_cargado_recorridos, this._kms_vacio_recorridos,
                                         this._kms_tronco_recorridos, id_motriz_principal, id_arrastre_1, id_arrastre_2,
                                         id_tercero, id_usuario, this._habilitar));
        }
Example #7
0
        /// <summary>
        /// Método encargado de Reversa el Inicio de un Movimiento Vacio
        /// </summary>
        /// <param name="mitEstanciasOrigen">Estancias Origen</param>
        /// <param name="estatus">Estatus de la Asignación que se desea editar</param>
        /// <param name="id_usuario">Id Usuario</param>
        /// <returns></returns>
        private RetornoOperacion ReversaInicioMovimietoVacio(DataTable mitEstanciasOrigen, MovimientoAsignacionRecurso.Estatus estatus, int id_usuario)
        {
            //Declaramos objeto Retorno
            RetornoOperacion resultado = new RetornoOperacion(0);

            //Iniciando transacción
            using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
            {
                //Instanciamos la Parada Origen
                using (Parada objParadaOrigen = new Parada(this._id_parada_origen))
                {
                    //Localizando parada comodín de la ubicación origen
                    int id_parada_origen = Parada.ObtieneParadaComodinUbicacion(objParadaOrigen.id_ubicacion, true, id_usuario);

                    //Validamos existencia de Parada Comodin
                    if (id_parada_origen > 0)
                    {
                        //Iniciamos Estancias de la parada origen del servicio
                        resultado = EstanciaUnidad.IniciaEstanciasTerminadasParada(this._id_parada_origen, id_usuario);

                        //Validamos Resultado
                        if (resultado.OperacionExitosa)
                        {
                            //Actuakizamos Kilometraje de las Unidades de Movimiento
                            resultado = MovimientoAsignacionRecurso.ActualizaKilometrajeUnidadesMovimiento(this._id_movimiento, -this._kms, id_usuario);

                            //Validamos Resultado
                            if (resultado.OperacionExitosa)
                            {
                                //Actualizando estatus de recursos asignados a Disponibles
                                resultado = MovimientoAsignacionRecurso.ActualizaEstatusRecursosTerminadosADisponible(this._id_movimiento, id_parada_origen, objParadaOrigen.fecha_llegada, estatus, id_usuario);

                                //Validamos Resultado
                                if (resultado.OperacionExitosa)
                                {
                                    //Deshabilita Asignaciones
                                    resultado = MovimientoAsignacionRecurso.DeshabilitaMovimientosAsignacionesRecursosVacio(this._id_movimiento, id_usuario);
                                    //Validamos Resultado
                                    if (resultado.OperacionExitosa)
                                    {
                                        //Recuperando los Id de Recurso de las Unidades
                                        List <int> unidades = (from DataRow r in mitEstanciasOrigen.Rows
                                                               select r.Field <int>("IdRecurso")).DefaultIfEmpty().ToList();

                                        //Cambiamos el Id de Parada de las Estrancias
                                        resultado = EstanciaUnidad.CambiaParadaEstanciaUnidadesUbicacion(unidades, id_parada_origen, objParadaOrigen.id_ubicacion, id_usuario);

                                        //Validamos Resultado
                                        if (resultado.OperacionExitosa)
                                        {
                                            //Deshabilitamos Parada  Origen
                                            resultado = objParadaOrigen.DeshabilitaParada(id_usuario);

                                            //Validamos Resultado
                                            if (resultado.OperacionExitosa)
                                            {
                                                //Validamos Deshabilitación de Movimiento
                                                resultado = this.editaMovimiento(this._id_servicio, this._id_segmento_carga, this._secuencia_servicio, (Estatus)this._id_estatus_movimiento, (Tipo)this._id_tipo_movimiento
                                                                                 , this._kms, this._kms_maps, this._id_compania_emisor, this._id_parada_origen, this._id_parada_destino, id_usuario, false);
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                //Mostramos Mensaje Error
                                resultado = new RetornoOperacion(string.Format("Error al actualizar kilometraje de unidades asociadas: {0}", resultado.Mensaje));
                            }
                        }
                    }
                    else
                    {
                        //Mostramos Mensaje Error
                        resultado = new RetornoOperacion("No se encontró datos complementarios de la parada comodin.");
                    }
                }
                //Validamos Resultado
                if (resultado.OperacionExitosa)
                {
                    //Validamos resultado
                    scope.Complete();
                }
            }
            //Devolvemos Valor
            return(resultado);
        }
Example #8
0
        /// <summary>
        /// Mètodo encargado de validar pagos ligados al movimiento
        /// </summary>
        /// <returns></returns>
        private RetornoOperacion validaPagos()
        {
            //Declaramos objeto retorno
            RetornoOperacion resultado = new RetornoOperacion(0);

            //Obtenemos Asignaciones Liquidadas
            using (DataTable mitAsignaciones = MovimientoAsignacionRecurso.CargaAsignacionesLiquidadas(this._id_movimiento))
            {
                //Validamos Asignaciones
                if (Validacion.ValidaOrigenDatos(mitAsignaciones))
                {
                    //Recorremos  cada una de las asignaciones liquidadas
                    foreach (DataRow r in mitAsignaciones.Rows)
                    {
                        //Intsanciamos Asignación
                        using (MovimientoAsignacionRecurso objAsignacion = new MovimientoAsignacionRecurso(r.Field <int>("Id")))
                        {
                            //De acuerdo al tipo de asignación
                            switch ((MovimientoAsignacionRecurso.Tipo)(objAsignacion.id_tipo_asignacion))
                            {
                            //Si es Operador
                            case MovimientoAsignacionRecurso.Tipo.Operador:
                                //Instanciamos Operador
                                using (Operador objOperador = new Operador(objAsignacion.id_recurso_asignado))
                                {
                                    //establecemos mensaje error
                                    resultado = new RetornoOperacion("La asignación del operador " + objOperador.nombre + " se encuentra liquidada.");
                                }
                                break;

                            //Si es tercero
                            case MovimientoAsignacionRecurso.Tipo.Tercero:
                                //Instanciamos Tercero
                                using (CompaniaEmisorReceptor objCompania = new CompaniaEmisorReceptor(objAsignacion.id_recurso_asignado))
                                {
                                    //establecemos mensaje error
                                    resultado = new RetornoOperacion("La asignación del Tercero " + objCompania.nombre_corto + " se encuentra liquidada.");
                                }
                                break;

                            //Si es Unidad
                            case MovimientoAsignacionRecurso.Tipo.Unidad:
                                //Instanciamos Unidad
                                using (Unidad objUnidad = new Unidad(objAsignacion.id_recurso_asignado))
                                {
                                    //establecemos mensaje error
                                    resultado = new RetornoOperacion("La asignación de la unidad " + objUnidad.numero_unidad + " se encuentra liquidada.");
                                }
                                break;
                            }
                        }
                    }
                }
                //Validamos si existen pagos
                else if (PagoMovimiento.ValidaPagoMovimiento(this._id_movimiento))
                {
                    //Establecemos Mensaje Error
                    resultado = new RetornoOperacion("Existen pagos ligados al movimiento.");
                }
            }

            //Retornamos resultado
            return(resultado);
        }
Example #9
0
        /// <summary>
        /// Realiza las acciones necesarias para la reversa en la actualización de fin de movimiento: elimina estancias, inicia asignaciones del movimiento, elimina asignaciones copiadas al movimiento siguiente (en caso de existir), los recursos se colocan en estatus tránsito, se resta el kilometraje del movimiento en el despacho de su servicio y el movimiento se coloca como iniciado
        /// </summary>
        /// <param name="id_usuario">Id de Usuario que actualiza</param>
        /// <returns></returns>
        public RetornoOperacion ReversaTerminaMovimientoVacio(int id_usuario)
        {
            //Declarando objeto de retorno
            RetornoOperacion resultado = new RetornoOperacion("El movimiento debe estar en estatus Terminado");

            //Validando estatus actual del movimiento
            if (this.EstatusMovimiento == Estatus.Terminado)
            {
                //Iniciando transacción
                using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                {
                    //Validando que las unidades involucradas se encuentren:
                    //Asociadas aún al servicio y en estatus ocupado
                    //Disponibles en la ubicación de fin del movimiento y sin ningún movimiento asignado
                    resultado = MovimientoAsignacionRecurso.ValidaRecursosParaReversaTerminaMovimiento(this._id_movimiento);

                    //Validamos Resultado
                    if (resultado.OperacionExitosa)
                    {
                        //Validamos que no existan pagos ligados al movimeinto
                        resultado = validaPagos();

                        //Si es válido realizar la reversa
                        if (resultado.OperacionExitosa)
                        {
                            //Actualziando el kilometraje de las unidades involucradas
                            resultado = MovimientoAsignacionRecurso.ActualizaKilometrajeUnidadesMovimiento(this._id_movimiento, -this._kms, id_usuario);
                            //Si no hubo errores
                            if (resultado.OperacionExitosa)
                            {
                                //instanciando parad de origen
                                using (Parada paradaOrigen = new Parada(this._id_parada_origen))
                                {
                                    //Si la parada se encontró
                                    if (paradaOrigen.habilitar)
                                    {
                                        //Eliminando estancias creadas para dichos recursos
                                        resultado = EstanciaUnidad.DeshabilitaEstanciaUnidadesReversaFinMovimiento(this._id_movimiento, paradaOrigen.fecha_salida, id_usuario);
                                    }
                                    else
                                    {
                                        resultado = new RetornoOperacion("No fue localizada la información de la parada de origen.");
                                    }
                                }

                                //Si no hubo errores
                                if (resultado.OperacionExitosa)
                                {
                                    //Actualziando estatus de movimiento a iniciado
                                    resultado = ActualizaEstatusMovimiento(Estatus.Iniciado, id_usuario);

                                    //Validamos Resultado
                                    if (resultado.OperacionExitosa)
                                    {
                                        //Instanciamos Parada Destino
                                        using (Parada objParadaDestino = new Parada(this._id_parada_destino))
                                            //Editamos Pararda
                                            resultado = objParadaDestino.CambiaParadaARegistrada(id_usuario);
                                    }
                                    else
                                    {
                                        resultado = new RetornoOperacion("No fue posible actualizar el estatus del movimiento.");
                                    }
                                }
                            }
                            else
                            {
                                resultado = new RetornoOperacion(string.Format("Error al actualizar kilometraje de unidades involucradas: {0}", resultado.Mensaje));
                            }
                        }
                    }

                    //Si no hay errores
                    if (resultado.OperacionExitosa)
                    {
                        //Terminando transacción
                        scope.Complete();
                    }
                }
            }
            //Devolviendo resultado
            return(resultado);
        }
Example #10
0
        /// <summary>
        /// Deshabilita un Movimiento en Vacio
        /// </summary>
        /// <param name="id_usuario">Id Usuario</param>
        /// <returns></returns>
        public RetornoOperacion DeshabilitaMovimientoVacioTerminado(int id_usuario)
        {
            //Declaramos objeto resultado
            RetornoOperacion resultado = new RetornoOperacion("El movimiento debe estar en estatus Terminado");

            //Validando estatus actual del movimiento
            if (this.EstatusMovimiento == Estatus.Terminado)
            {
                //Iniciando transacción
                using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                {
                    //Instanciamos la Parada Origen
                    using (Parada objParadaOrigen = new Parada(this._id_parada_origen), objParadadDestino = new Parada(this._id_parada_destino))
                    {
                        //Cargamos Estancias ligadas a un Id Movimiento en Estatus Terminado
                        using (DataTable mitEstanciasOrigen = EstanciaUnidad.CargaEstanciasTerminadasParada(this._id_parada_origen))
                        {
                            //Validando que las unidades involucradas se encuentren:
                            //Asociadas aún al servicio y en estatus ocupado
                            //Disponibles en la ubicación de fin del movimiento y sin ningún movimiento asignado
                            resultado = MovimientoAsignacionRecurso.ValidaRecursosParaReversaTerminaMovimiento(this._id_movimiento);

                            //Validamos Resultado
                            if (resultado.OperacionExitosa)
                            {
                                //Validamos que no existan pagos ligados al movimeinto
                                resultado = validaPagos();

                                //Validamos Resultado
                                if (resultado.OperacionExitosa)
                                {
                                    //Deshabilitamos Estancias
                                    resultado = EstanciaUnidad.DeshabilitaEstanciaUnidadesMovimientoVacio(this._id_movimiento, this._id_parada_destino, id_usuario);

                                    //Validamos Resultado
                                    if (resultado.OperacionExitosa)
                                    {
                                        //Deshabilitamos Parada Destino
                                        resultado = objParadadDestino.DeshabilitaParada(id_usuario);

                                        //Validamos Resultado
                                        if (resultado.OperacionExitosa)
                                        {
                                            //Reversa los movimientos de la Parada Origen
                                            resultado = ReversaInicioMovimietoVacio(mitEstanciasOrigen, MovimientoAsignacionRecurso.Estatus.Terminado, id_usuario);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    //Si no hay errores
                    if (resultado.OperacionExitosa)
                    {
                        //Terminando transacción
                        scope.Complete();
                    }
                }
            }
            else
            {
                //Establecemos Mesnaje Error
                resultado = new RetornoOperacion("El estatus del movimiento no permite su eliminación");
            }
            //Devolvemos resultado
            return(resultado);
        }
Example #11
0
        /// <summary>
        /// Notificación de un nuevo servicio asignado (nueva asignación a movimiento)
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignación de recurso</param>
        /// <returns></returns>
        public RetornoOperacion NuevoServicioAsignado(int id_movimiento_asignacion_recurso)
        {
            //Inicializando variables auxiliares
            string tokenFCM = "";
            int    idCompania = 0, idRecurso = 0;

            MovimientoAsignacionRecurso.Tipo tipoRecurso = MovimientoAsignacionRecurso.Tipo.Operador;

            //Validando que la asignación pertenezca a un servicio
            RetornoOperacion resultado = validaMovimientoServicio(id_movimiento_asignacion_recurso);

            //Si es de un servicio
            if (resultado.OperacionExitosa)
            {
                //Validando asignación del recurso y obtención de token al que se enviará la notificación
                resultado = validaUsuarioSesionActivaRecurso(id_movimiento_asignacion_recurso, out idCompania, out idRecurso, out tipoRecurso, out tokenFCM);

                //Si hay datos suficientes
                if (resultado.OperacionExitosa)
                {
                    //Validando configuración de notificaciones
                    resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(idCompania);

                    //Si hay datos suficientes
                    if (resultado.OperacionExitosa)
                    {
                        //Inicializando asignaciones totales
                        int      totalAsignaciones = 0;
                        DateTime cita_inicio       = Fecha.ObtieneFechaEstandarMexicoCentro();

                        //Recuperando asignaciones totales de servicio al usuario
                        using (DataTable mit = MovimientoAsignacionRecurso.CargaServiciosAsignadosAlRecurso(tipoRecurso, idRecurso, false))
                        {
                            //Si hay asignaciones
                            if (mit != null)
                            {
                                totalAsignaciones = mit.Rows.Count;
                                cita_inicio       = Convert.ToDateTime(mit.Rows[0]["CitaOrigen"]);
                            }
                        }

                        //Si hay asignaciones
                        if (totalAsignaciones > 0)
                        {
                            //Definiendo datos del mensaje de la notificación (si hay mas de una asignación, se considera como notificación de baja prioridad dado que existe otra en curso)
                            var datos = new
                            {
                                Titulo           = "¡Nuevo viaje asignado!",
                                Mensaje          = String.Format(totalAsignaciones > 1 ? "Se ha añadido un viaje a la lista de pendientes." : "Inicia el '{0:dd-MM-yyyy HH:mm}'", cita_inicio),
                                TipoNotificacion = totalAsignaciones > 1 ? "NAsignacion" : "NAsignacionActivo"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos);
                        }
                        //Si no hay asignaciones
                        else
                        {
                            resultado = new RetornoOperacion("No se pudo obtener el total de asignaciones.");
                        }
                    }
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Example #12
0
        /// <summary>
        /// Realiza la validación de un usuario y asesión activa en dispositivo móvil
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignación de recurso</param>
        /// <param name="id_compania">Id de Compañía donde se encuentra el recurso</param>
        /// <param name="token_fcm">Token de Firebase Cloud Messaging</param>
        /// <returns></returns>
        private RetornoOperacion validaUsuarioSesionActivaRecurso(int id_movimiento_asignacion_recurso, out int id_compania, out int id_recurso, out MovimientoAsignacionRecurso.Tipo tipo_recurso, out string token_fcm)
        {
            //Inicializando retorno
            RetornoOperacion resultado = new RetornoOperacion("Sesión Activa Encontrada.", true);

            //Inicializando parámetros de salida
            id_compania  = id_recurso = 0;
            tipo_recurso = MovimientoAsignacionRecurso.Tipo.Operador;
            token_fcm    = "";

            //Instanciando asignación
            using (MovimientoAsignacionRecurso asignacion = new MovimientoAsignacionRecurso(id_movimiento_asignacion_recurso))
            {
                //Definiendo objeto usuario sin asignar
                Usuario usuario = null;

                //Para el tipo de asignación correspondiente
                switch (asignacion.TipoMovimientoAsignacion)
                {
                case MovimientoAsignacionRecurso.Tipo.Operador:
                    //Instanciando operador
                    using (Operador op = new Operador(asignacion.id_recurso_asignado))
                    {
                        //Obteniendo usuario en cuestión
                        usuario     = Usuario.ObtieneUsuarioAsignadoOperador(op.id_operador);
                        id_compania = op.id_compania_emisor;
                        id_recurso  = op.id_operador;
                    }

                    break;

                case MovimientoAsignacionRecurso.Tipo.Tercero:

                    //TODO: Implementar obtención de token FCM de dispositivo asignado al tercero

                    break;

                case MovimientoAsignacionRecurso.Tipo.Unidad:
                    //TODO: Implementar obtención de token FCM de dispositivo asignado a la unidad
                    break;
                }

                //Validando existencia de usuario
                if (usuario != null)
                {
                    //Validando sesión activa en algún dispositivo
                    if (Validacion.ValidaOrigenDatos(UsuarioSesion.ObtieneSesionesActivasUsuario(usuario.id_usuario, UsuarioSesion.TipoDispositivo.Android)))
                    {
                        //Recuperando referencia del token de usuario
                        using (DataTable mit = Referencia.CargaReferencias(usuario.id_usuario, 30, ReferenciaTipo.ObtieneIdReferenciaTipo(id_compania, 30, "Token FCM", 0, "Configuración")))
                            token_fcm = mit != null ? mit.Rows[0]["Valor"].ToString() : "";

                        //Si no obtuvo el token del usuario correspondiente
                        if (token_fcm == "")
                        {
                            resultado = new RetornoOperacion("El token del dispositivo del usuario debe ser actualizado.");
                        }
                    }
                    //Si no hay sesiones activas
                    else
                    {
                        resultado = new RetornoOperacion("El usuario no cuenta con una sesión activa en dispositivo móvil.");
                    }
                }
                //Si no hay un usuario asiciado
                else
                {
                    resultado = new RetornoOperacion("No hay un usuario asociado al recurso.");
                }
            }

            //Devolviendo resultado
            return(resultado);
        }
Example #13
0
        /// <summary>
        /// Notificación de asignación eliminada
        /// </summary>
        /// <param name="id_movimiento_asignacion_recurso">Id de Asignanción de Recurso</param>
        /// <param name="viaje_activo">True para indicar que la asignación correspondia al viaje inmediato siguiente, de lo contrario false</param>
        /// <returns></returns>
        public RetornoOperacion EliminaAsignacionServicio(int id_movimiento_asignacion_recurso, bool viaje_activo)
        {
            //Inicializando variables auxiliares
            string tokenFCM = "";
            int    idCompania = 0, idRecurso = 0;

            MovimientoAsignacionRecurso.Tipo tipoRecurso = MovimientoAsignacionRecurso.Tipo.Operador;

            //Validando que la asignación pertenezca a un servicio
            RetornoOperacion resultado = validaMovimientoServicio(id_movimiento_asignacion_recurso);

            //Si es de un servicio
            if (resultado.OperacionExitosa)
            {
                //Obtención de token al que se enviará la notificación
                resultado = validaUsuarioSesionActivaRecurso(id_movimiento_asignacion_recurso, out idCompania, out idRecurso, out tipoRecurso, out tokenFCM);

                //Si hay datos suficientes
                if (resultado.OperacionExitosa)
                {
                    //Validando configuración de notificaciones
                    resultado = CompaniaEmisorReceptor.ValidaConfiguracionUsoAplicacionMovil(idCompania);

                    //Si se configuró el uso de aplicación móvil
                    if (resultado.OperacionExitosa)
                    {
                        //Inicializando asignaciones totales
                        int totalAsignaciones = 0;

                        //Recuperando asignaciones totales de servicio al usuario
                        using (DataTable mit = MovimientoAsignacionRecurso.CargaServiciosAsignadosAlRecurso(tipoRecurso, idRecurso, false))
                        {
                            //Si hay asignaciones
                            if (mit != null)
                            {
                                totalAsignaciones = mit.Rows.Count;
                            }
                        }

                        //Definiendo datos del mensaje de la notificación (si no hay asignaciones se informa que no tiene servicios asignados, si queda alguna otra pendiente se informa)
                        //Si hay asignaciones pendientes
                        if (totalAsignaciones > 0)
                        {
                            var datos1 = new
                            {
                                Titulo           = "¡Viaje Reemplazado!",
                                Mensaje          = "El viaje activo fue cambiado, consulte los detalles.",
                                TipoNotificacion = "NAsignacionActivo"
                            };

                            var datos2 = new
                            {
                                Titulo           = "¡Viajes pendientes actualizados!",
                                Mensaje          = "La lista de pendientes fue modificada, consulte los detalles.",
                                TipoNotificacion = "EAsignacion"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, viaje_activo ? datos1 : datos2);
                        }
                        //Si ya no hay asignaciones
                        else
                        {
                            var datos = new
                            {
                                Titulo           = "¡Sin viajes pendientes!",
                                Mensaje          = "Por el momento no tiene viajes asignados.",
                                TipoNotificacion = "EAsignacionActivo"
                            };

                            //Enviando mensaje vía FCM
                            resultado = FirebaseCloudNotifications.EnviaMensajeFCM(_url_servidor_fcm, _server_token_fcm, tokenFCM, FirebaseCloudNotifications.Prioridad.Normal, datos);
                        }
                    }
                }
            }

            //Devolviendo resultado
            return(resultado);
        }