using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Modelos_Generales;
using Exferia_Aplicacion.Sincronizacion;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_Mythos._0_Modelos;
using Exferia_Mythos._1_Datos;
using Exferia_Mythos._3_Vistas.Listados;
using Exferia_Mythos.General;
using GMap.NET;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Mythos._3_Vistas.Controladoras
{
    public class P_Parte_TrabajoRealizado_Controladora
    {
        #region Variables Generales
        private P_Parte_TrabajoRealizado g_frm_P_Parte_TrabajoRealizado = null; //Variable que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando; //Pantalla de espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc.

        //Clases de negocio necesarias para la carga de datos
        private MYT_Partes_TrabajosRealizados_Datos g_obj_MYT_Partes_TrabajosRealizados_Datos = new MYT_Partes_TrabajosRealizados_Datos();
        private MYT_Partes_TrabajosRealizados_Firmas_Datos g_obj_MYT_Partes_TrabajosRealizados_Firmas_Datos = new MYT_Partes_TrabajosRealizados_Firmas_Datos();

        //Modelos
        private INTERNO_MYT_Partes_Modelo g_mdl_INTERNO_MYT_Partes_Modelo = null;
        private MYT_Partes_TrabajosRealizados g_mdl_MYT_Partes_TrabajosRealizados = null;
       
        public bool g_bol_Termino_CargaDatosInicial = false; //Se utiliza para saber cuando se termina la carga de datos estaticos iniciales
        public bool g_bol_ModificacionDatosAfectaLineas = true; //Se utiliza para saber si se modificaron datos que afectan las lineas.

        //Tarea Asincrona de carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos;

        //Tarea Asincrona de grabar de datos
        private BackgroundWorker g_obj_TareaAsincrona_GrabarDatos;
        private bool g_bol_GrabarDatos_TerminoCorrectamente = true;
        private bool g_bol_GrabarDatos_VaciarDatos = true;

        //Tarea Asincrona de borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos;

        //Tarea Asincrona de carga del Mapa
        private BackgroundWorker g_obj_TareaAsincrona_CargarMapa;

        //Firma Tecnico
        public byte[] g_arr_Firma_Tecnico_Inicial;
        public Image g_img_Firma_Tecnico_Real = null;

        //Firma Cliente
        public byte[] g_arr_Firma_Cliente_Inicial;
        public Image g_img_Firma_Cliente_Real = null;

        public bool g_bol_Traspasado = false;

        public bool g_bol_CampoCodigo_Numerico = false;
        #endregion

        #region Constructor
        public P_Parte_TrabajoRealizado_Controladora(P_Parte_TrabajoRealizado _frm_P_Parte_TrabajoRealizado, INTERNO_MYT_Partes_Modelo _mdl_INTERNO_MYT_Partes_Modelo)
        {
            g_frm_P_Parte_TrabajoRealizado = _frm_P_Parte_TrabajoRealizado;
            g_mdl_INTERNO_MYT_Partes_Modelo = _mdl_INTERNO_MYT_Partes_Modelo;


            g_bol_Termino_CargaDatosInicial = true;
        }
        #endregion

        #region Datos Iniciales
        public void Cargar_DatosIniciales()
        {

            //fecha y hora 
            g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_frm_P_Parte_TrabajoRealizado.P_Base_FechaTrabajo.ToString("dd/MM/yyyy");
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_ConMascara_Hora.Text = DateTime.Now.ToString("HH:mm");


            //Tecnico
            if (g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos!=null)
            {
                g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id = g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos.id;
                g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Codigo = g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos.codigo;
                g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Descripcion = g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos.nombre;
                g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_FechaBorrado = g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos.fechaBorrado;
            }

        }
        #endregion

        #region Vaciar Datos
        private void VaciarDatos()
        {
            //Fecha
            g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_frm_P_Parte_TrabajoRealizado.P_Base_FechaTrabajo.ToString("dd/MM/yyyy");

            //Hora
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_ConMascara_Hora.Text = DateTime.Now.ToString("HH:mm");

            //Duracion_Horas
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Horas.Text = "";

            //Duracion_Minutos
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Minutos.Text = "";

            //Estado
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Id = -1;
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Codigo = "";
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Descripcion = "";
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_FechaBorrado = null;

            //Descripcion
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Descripcion.Text = "";

            //Tecnico
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id = -1;
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Codigo = "";
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Descripcion = "";
            g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_FechaBorrado = null;

            //Firma Tecnico
            g_arr_Firma_Tecnico_Inicial = null;
            g_img_Firma_Tecnico_Real = null;
            g_frm_P_Parte_TrabajoRealizado.PictureBox_Tecnico_Firma.Image = null;
            g_frm_P_Parte_TrabajoRealizado.PictureBox_Tecnico_Firma.Tag = "";

            //Tecnico_Firma_Observaciones
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Tecnico_Firma_Observaciones.Text = "";

            //Firma Cliente
            g_arr_Firma_Cliente_Inicial = null;
            g_img_Firma_Cliente_Real = null;
            g_frm_P_Parte_TrabajoRealizado.PictureBox_Cliente_Firma.Image = null;
            g_frm_P_Parte_TrabajoRealizado.PictureBox_Cliente_Firma.Tag = "";

            //Cliente_Firma
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Cliente_Firma.Text = "";

            //Cliente_Firma_Observaciones
            g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Cliente_Firma_Observaciones.Text = "";

            //Mapa
            g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.BorrarTodosPunto();

            string[] str_Separador = new string[] { " [" };
            //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo:
            if (g_frm_P_Parte_TrabajoRealizado.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
            {
                g_frm_P_Parte_TrabajoRealizado.P_Base_TituloPantalla = (g_frm_P_Parte_TrabajoRealizado.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
            }

            //Actualizar el boton de seleccion de pantalla ##########################################################
            Variables.G_EMS_CONTROL_MENUSUPERIOR.Update_Texto_NombrePantalla(g_frm_P_Parte_TrabajoRealizado.Tag.ToString());
            //#######################################################################################################

            g_mdl_MYT_Partes_TrabajosRealizados= null;
        }

        #endregion

        #region Comprobar Cambios
        public bool ComprobarCambios()
        {
            if (g_frm_P_Parte_TrabajoRealizado.P_Base_SeModificoDatosPantalla)
            {
                GrabarDatos(false);
                //Te quedas esperando a que termine la tarea asincrona de grabar
                while (g_obj_TareaAsincrona_GrabarDatos.IsBusy)
                {
                    Application.DoEvents();
                }
                return g_bol_GrabarDatos_TerminoCorrectamente;
            }
            return true;
        }
        #endregion

        #region Cargar Datos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que se termine
                g_frm_P_Parte_TrabajoRealizado.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                //Si la tarea asincrona esta en marcha la paro
                if(g_obj_TareaAsincrona_CargarDatos != null)
                {
                    while (g_obj_TareaAsincrona_CargarDatos.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_CargarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_DoWork);
                    g_obj_TareaAsincrona_CargarDatos.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_CargarDatos_ProgressChanged);
                    g_obj_TareaAsincrona_CargarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Completed);
                    g_obj_TareaAsincrona_CargarDatos.WorkerReportsProgress = false;
                }
                //Vaciar
                VaciarDatos();

                //Tarea Asincrona cargar datos###############################################################
                g_obj_TareaAsincrona_CargarDatos.RunWorkerAsync();
                //###########################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch(Exception ex)
            {
                g_frm_P_Parte_TrabajoRealizado.Enabled = true;
                if(g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                throw new Control_Errores(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA(), ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(RecargarDatos), true);
            }
        }

        private void TareaAsincrona_CargarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Cargar Valores
                if(CargarDatos(g_frm_P_Parte_TrabajoRealizado.P_Base_id) == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
            }
            catch(ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarDatos_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {}
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_ProgressChanged));
            }
        }
        private void TareaAsincrona_CargarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if(g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_P_Parte_TrabajoRealizado.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                        g_frm_P_Parte_TrabajoRealizado.Salir_P_Base();
                    }
                }
                else
                {
                    //Firma tecnico
                    if (g_img_Firma_Tecnico_Real != null)
                    {
                        g_frm_P_Parte_TrabajoRealizado.PictureBox_Tecnico_Firma.Image = g_img_Firma_Tecnico_Real;
                        Application.DoEvents();
                        Funciones.PictureBox_RedimencionarImagen(g_frm_P_Parte_TrabajoRealizado.PictureBox_Tecnico_Firma, g_frm_P_Parte_TrabajoRealizado.PictureBox_Tecnico_Firma.Image);
                    }

                    //Firma Cliente
                    if (g_img_Firma_Cliente_Real != null)
                    {
                        g_frm_P_Parte_TrabajoRealizado.PictureBox_Cliente_Firma.Image = g_img_Firma_Cliente_Real;
                        Application.DoEvents();
                        Funciones.PictureBox_RedimencionarImagen(g_frm_P_Parte_TrabajoRealizado.PictureBox_Cliente_Firma, g_frm_P_Parte_TrabajoRealizado.PictureBox_Cliente_Firma.Image);
                    }
                }

                g_frm_P_Parte_TrabajoRealizado.P_Base_SeModificoDatosPantalla = false;
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Parte_TrabajoRealizado.Salir_P_Base();
            }
            finally
            {
                if (g_bol_Traspasado)
                {
                    //Bloqueo los Controles
                    SoloLectura.Empezar(g_frm_P_Parte_TrabajoRealizado, true);
                }
            }
        }

        public bool CargarDatos(long _lng_id)
        {
            bool bol_ValorDevuelto = true;

            try
            {
                g_mdl_MYT_Partes_TrabajosRealizados = g_obj_MYT_Partes_TrabajosRealizados_Datos.Obtener(_lng_id);

                //Si no es Nulo Cargo los Datos
                if (g_mdl_MYT_Partes_TrabajosRealizados != null)
                {
                    //Paginador ................................................................................
                    if (g_frm_P_Parte_TrabajoRealizado.P_Base_PantallaOrigen != null &&
                        g_frm_P_Parte_TrabajoRealizado.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados != null &&
                        g_frm_P_Parte_TrabajoRealizado.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Count > 0)
                    {
                        long lng_id_ParaPaginacion = g_mdl_MYT_Partes_TrabajosRealizados.id;
                        int int_PaginaDelObjeto = g_frm_P_Parte_TrabajoRealizado.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.IndexOf(g_frm_P_Parte_TrabajoRealizado.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Where(n => n.ID.Equals(lng_id_ParaPaginacion)).FirstOrDefault());

                        g_frm_P_Parte_TrabajoRealizado.g_obj_Funciones_Paginador.SetPaginaActual(int_PaginaDelObjeto);
                        // Asignando al paginador la pagina actual.
                        g_frm_P_Parte_TrabajoRealizado.Exferia_Paginador_TrabajosRealizados.PaginaActual = g_frm_P_Parte_TrabajoRealizado.g_obj_Funciones_Paginador.GetPaginaActual();
                    }
                    //...........................................................................................

                    //Fecha
                    g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Partes_TrabajosRealizados.fechaHora.ToString("dd/MM/yyyy");

                    //hora 
                    g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_ConMascara_Hora.Text = g_mdl_MYT_Partes_TrabajosRealizados.fechaHora.ToString("HH:mm");

                    //Duracion
                    long lng_horas = 0;
                    long lng_minutos = 0;
                    if (g_mdl_MYT_Partes_TrabajosRealizados.duracionSegundos!=null)
                    {
                        lng_horas = (g_mdl_MYT_Partes_TrabajosRealizados.duracionSegundos.Value / 3600);
                        lng_minutos = ((g_mdl_MYT_Partes_TrabajosRealizados.duracionSegundos.Value - lng_horas * 3600) / 60);
                    }

                    //Duracion_Horas
                    g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Horas.Text = lng_horas.ToString();

                    //Duracion_Minutos
                    g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Minutos.Text = lng_minutos.ToString();

                    //estado
                    if (g_mdl_MYT_Partes_TrabajosRealizados.MYT_PartesEstados != null)
                    {
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Id = g_mdl_MYT_Partes_TrabajosRealizados.MYT_PartesEstados.id;
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Codigo = g_mdl_MYT_Partes_TrabajosRealizados.MYT_PartesEstados.codigo;
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Descripcion = g_mdl_MYT_Partes_TrabajosRealizados.MYT_PartesEstados.descripcion;
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_FechaBorrado = g_mdl_MYT_Partes_TrabajosRealizados.MYT_PartesEstados.fechaBorrado;
                    }

                    //Descripcion
                    g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Descripcion.Text = g_mdl_MYT_Partes_TrabajosRealizados.trabajoRealizado;

                    //Tecnicos
                    if (g_mdl_MYT_Partes_TrabajosRealizados.MYT_Tecnicos != null)
                    {
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id = g_mdl_MYT_Partes_TrabajosRealizados.MYT_Tecnicos.id;
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Codigo = g_mdl_MYT_Partes_TrabajosRealizados.MYT_Tecnicos.codigo;
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Descripcion = g_mdl_MYT_Partes_TrabajosRealizados.MYT_Tecnicos.nombre;
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_FechaBorrado = g_mdl_MYT_Partes_TrabajosRealizados.MYT_Tecnicos.fechaBorrado;
                    }

                    //Firmas
                    if (g_mdl_MYT_Partes_TrabajosRealizados.MYT_Partes_TrabajosRealizados_Firmas!=null &&
                        g_mdl_MYT_Partes_TrabajosRealizados.MYT_Partes_TrabajosRealizados_Firmas.Count>0)
                    {
                        foreach (MYT_Partes_TrabajosRealizados_Firmas mdl_MYT_Partes_TrabajosRealizados_Firmas in g_mdl_MYT_Partes_TrabajosRealizados.MYT_Partes_TrabajosRealizados_Firmas)
                        {
                            //Tecnico Principal
                            if (mdl_MYT_Partes_TrabajosRealizados_Firmas.tecnicoPrincipal!=null &&
                                mdl_MYT_Partes_TrabajosRealizados_Firmas.tecnicoPrincipal.Value)
                            {
                                //Tecnicos
                                if (mdl_MYT_Partes_TrabajosRealizados_Firmas.MYT_Tecnicos != null)
                                {
                                    g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id = mdl_MYT_Partes_TrabajosRealizados_Firmas.MYT_Tecnicos.id;
                                    g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Codigo = mdl_MYT_Partes_TrabajosRealizados_Firmas.MYT_Tecnicos.codigo;
                                    g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Descripcion = mdl_MYT_Partes_TrabajosRealizados_Firmas.MYT_Tecnicos.nombre;
                                    g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_FechaBorrado = mdl_MYT_Partes_TrabajosRealizados_Firmas.MYT_Tecnicos.fechaBorrado;
                                }

                                //Firma
                                g_arr_Firma_Tecnico_Inicial = mdl_MYT_Partes_TrabajosRealizados_Firmas.firma;
                                g_img_Firma_Tecnico_Real = Funciones.Convertir_Arraybytes_Image(mdl_MYT_Partes_TrabajosRealizados_Firmas.firma);

                                //Tecnico_Firma_Observaciones
                                g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Tecnico_Firma_Observaciones.Text = mdl_MYT_Partes_TrabajosRealizados_Firmas.observaciones;

                            }
                            //Cliente
                            else if (mdl_MYT_Partes_TrabajosRealizados_Firmas.idTecnico_Firma==null)
                            {
                                //Cliente_Firma
                                g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Cliente_Firma.Text = mdl_MYT_Partes_TrabajosRealizados_Firmas.cliente_Firma;

                                //Firma
                                g_arr_Firma_Cliente_Inicial = mdl_MYT_Partes_TrabajosRealizados_Firmas.firma;
                                g_img_Firma_Cliente_Real = Funciones.Convertir_Arraybytes_Image(mdl_MYT_Partes_TrabajosRealizados_Firmas.firma);

                                //Cliente_Firma_Observaciones
                                g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Cliente_Firma_Observaciones.Text = mdl_MYT_Partes_TrabajosRealizados_Firmas.observaciones;
                            }
                        }
                    }

                    // Traspasado
                    if (g_mdl_INTERNO_MYT_Partes_Modelo.idAlbaranCabecera != null ||
                        g_mdl_INTERNO_MYT_Partes_Modelo.idFacturaCabecera != null)
                    {
                        g_bol_Traspasado = true;
                    }
                    else
                    {
                        g_bol_Traspasado = false;
                    }

                    // Mostrar Campo en el Titulo de mantenimiento
                    string str_MenuSuperior_Codigo = "";
                    if (g_frm_P_Parte_TrabajoRealizado.g_mdl_PRV_OpcionesDetalle != null &&
                        g_frm_P_Parte_TrabajoRealizado.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento != null &&
                        g_frm_P_Parte_TrabajoRealizado.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Trim().Length > 0)
                    {
                        //Obtener el Array de Campos
                        string[] arr_Campos = g_frm_P_Parte_TrabajoRealizado.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Split(new Char[] { ',' });
                        string str_ValorAMostrarFinal = "";

                        string[] str_Separador = new string[] { " [" };

                        //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
                        if (g_frm_P_Parte_TrabajoRealizado.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                        {
                            g_frm_P_Parte_TrabajoRealizado.P_Base_TituloPantalla = (g_frm_P_Parte_TrabajoRealizado.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
                        }

                        dynamic dnm_Objeto = g_mdl_MYT_Partes_TrabajosRealizados;
                        foreach (string str_campo in arr_Campos)
                        {
                            var Valor = dnm_Objeto.GetType().GetProperty(str_campo).GetValue(dnm_Objeto, null);
                            if (Valor != null)
                            {
                                str_ValorAMostrarFinal += " " + Valor;
                            }

                        }

                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_Parte_TrabajoRealizado.P_Base_TituloPantalla += " [" + str_ValorAMostrarFinal + "] -Modificar";
                        }
                    }

                    //Actualizar el Boton de Seleccion de pantalla ####################################################
                    Variables.G_EMS_CONTROL_MENUSUPERIOR.Add_Texto_NombrePantalla_Descripciones(g_frm_P_Parte_TrabajoRealizado.Tag.ToString(), str_MenuSuperior_Codigo);
                    //#################################################################################################

                    g_frm_P_Parte_TrabajoRealizado.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(CargarDatos));
            }
            return bol_ValorDevuelto;
        }
        #endregion

        #region Grabar Datos
        public void GrabarDatos(bool _bol_GrabarDatos_VaciarDatos)
        {
            try
            {
                g_bol_GrabarDatos_VaciarDatos = _bol_GrabarDatos_VaciarDatos;

                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_P_Parte_TrabajoRealizado.Enabled = false;
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_GRABANDODATOS());

                g_obj_TareaAsincrona_GrabarDatos = new BackgroundWorker();
                g_obj_TareaAsincrona_GrabarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_GrabarDatos_DoWork);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_GrabarDatos_Completed);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerAsync();

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_bol_GrabarDatos_TerminoCorrectamente = false;
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                g_frm_P_Parte_TrabajoRealizado.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(GrabarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_GrabarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_VALIDACION = ValidarDatos();
                if (mdl_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = GrabarDatos_Final();
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch(ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_GrabarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Parte_TrabajoRealizado.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);

                        //Poner el Foco en el objeto que tuvo el problema en validar
                        if (mdl_ValorDevuelto_Modelo_Resultado.Objeto != null)
                        {
                            Funciones.Poner_Foco_Objeto(g_frm_P_Parte_TrabajoRealizado, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }

                    g_bol_GrabarDatos_TerminoCorrectamente = false;
                }
                else
                {
                    #region SINCRONIZACION
                    INTERNO_Sincronizacion_ActualizarRegistro_Modelo mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo = new INTERNO_Sincronizacion_ActualizarRegistro_Modelo();
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.tabla = nameof(MYT_Partes_TrabajosRealizados);
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.idClavePrimaria = mdl_ValorDevuelto_Modelo_Resultado.Id;

                    Sincronizacion_ActualizarRegistro.Sincronizacion_ActualizarRegistro_RESTOTABLAS(mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo);

                    #endregion

                    // Devolver al Listado el Row Añadido/Modificado
                    List<object> lst_obj = new List<object>();
                    lst_obj.Add(g_frm_P_Parte_TrabajoRealizado.g_mdl_PRV_OpcionesDetalle.opcion);
                    lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Objeto);

                    g_frm_P_Parte_TrabajoRealizado.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(lst_obj, G_ENUM_TIPOACCION.INT_NADA);

                    if (g_bol_GrabarDatos_VaciarDatos)
                    {
                        VaciarDatos();
                    }

                    g_frm_P_Parte_TrabajoRealizado.P_Base_SeModificoDatosPantalla = false;

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_Completed));
            }
        }

        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                // La fecha no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha;
                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha;
                    }
                }

                // La hora de recepcion no puede estar vacia
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_FechaHora_Respuesta = Funciones.Hora_Validacion(g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_ConMascara_Hora.Text);

                    if (int_FechaHora_Respuesta == 1)//Vacia
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_ConMascara_Hora;
                    }
                    else if (int_FechaHora_Respuesta == 2)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_ConMascara_Hora;
                    }
                }


                // Estado no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Codigo.Trim().Length == 0 &&
                    g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Estado validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // La Descripcion no puede estar vacía
                if ((mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Descripcion.Text.Trim().Length == 0))
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO("Descripción");
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Descripcion;
                }


                //Si hay Firma del Tecnico Tiene que tener el Tecnico
                if (g_img_Firma_Cliente_Real!=null)
                {
                    // Tecnico no puede estar Vacio (Obligatorio)
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Codigo.Trim().Length == 0 &&
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Descripcion.Trim().Length == 0)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Titulo);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                    }

                    // Si hay Tecnico validar que es Correcta
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Codigo.Trim().Length != 0 ||
                        g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id == -1)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Titulo);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                    }
                }

                // Si hay Tecnico validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(ValidarDatos));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo GrabarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();

            try
            {
                long? lng_Nulo = null;
                long lng_idTrabajoRealizado = -1;

                MYT_Partes_TrabajosRealizados mdl_MYT_Partes_TrabajosRealizados = new MYT_Partes_TrabajosRealizados();

                //id
                mdl_MYT_Partes_TrabajosRealizados.id = g_mdl_MYT_Partes_TrabajosRealizados != null ? g_mdl_MYT_Partes_TrabajosRealizados.id : -1;

                //idParte
                mdl_MYT_Partes_TrabajosRealizados.idParte = g_mdl_INTERNO_MYT_Partes_Modelo.id;

                //idTerminal
                mdl_MYT_Partes_TrabajosRealizados.idTerminal = g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos!=null ? g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos.idTerminal : lng_Nulo;

                //fechaHora
                DateTime dtt_fechaHora = DateTime.ParseExact(g_frm_P_Parte_TrabajoRealizado.Exferia_FechaSeleccion_Fecha.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                TimeSpan tms_fechaHora = TimeSpan.ParseExact(g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_ConMascara_Hora.Text, "hh\\:mm", CultureInfo.InvariantCulture);
                mdl_MYT_Partes_TrabajosRealizados.fechaHora = new DateTime(dtt_fechaHora.Year, dtt_fechaHora.Month, dtt_fechaHora.Day, tms_fechaHora.Hours, tms_fechaHora.Minutes, 0);

                //trabajoRealizado
                mdl_MYT_Partes_TrabajosRealizados.trabajoRealizado = g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Descripcion.Text;

                //duracionSegundos
                long lng_Horas = 0;
                long lng_Minutos = 0;
                long lng_TotalDuracionSegundos = 0;

                if (g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Horas.Text.Trim().Length > 0)
                {
                    lng_Horas = long.Parse(g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Horas.Text.Trim()) * 3600;//Pasado a Segundos
                }
                if (g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Minutos.Text.Trim().Length > 0)
                {
                    lng_Minutos = long.Parse(g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Duracion_Minutos.Text.Trim()) * 60;//Pasado a Segundos
                }
                lng_TotalDuracionSegundos = lng_Horas + lng_Minutos;
                mdl_MYT_Partes_TrabajosRealizados.duracionSegundos = lng_TotalDuracionSegundos;

                //guid
                mdl_MYT_Partes_TrabajosRealizados.guid = g_mdl_INTERNO_MYT_Partes_Modelo.guid;

                //fechaBorrado
                mdl_MYT_Partes_TrabajosRealizados.fechaBorrado = null;

                //Mapa
                if (g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.DatosMapa_Puntos().Count > 0 &&
                    !g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.DatosMapa_Puntos()[0].Posicion_Punto.IsEmpty)
                {
                    mdl_MYT_Partes_TrabajosRealizados.gps_posicionLatitud = g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.DatosMapa_Puntos()[0].Posicion_Punto.Lat.ToString();
                    mdl_MYT_Partes_TrabajosRealizados.gps_posicionLongitud = g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.DatosMapa_Puntos()[0].Posicion_Punto.Lng.ToString();
                    mdl_MYT_Partes_TrabajosRealizados.gps_zoom = g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.DatosMapa_Puntos()[0].Zoom;
                    mdl_MYT_Partes_TrabajosRealizados.gps_tipoProveedor = g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.DatosMapa_Puntos()[0].TipoProveedor;
                }
                else
                {
                    if (g_frm_P_Parte_TrabajoRealizado.g_bol_CargarMapa && g_mdl_MYT_Partes_TrabajosRealizados != null)
                    {
                        mdl_MYT_Partes_TrabajosRealizados.gps_posicionLatitud = g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLatitud;
                        mdl_MYT_Partes_TrabajosRealizados.gps_posicionLongitud = g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLongitud;
                        mdl_MYT_Partes_TrabajosRealizados.gps_zoom = g_mdl_MYT_Partes_TrabajosRealizados.gps_zoom;
                        mdl_MYT_Partes_TrabajosRealizados.gps_tipoProveedor = g_mdl_MYT_Partes_TrabajosRealizados.gps_tipoProveedor;
                    }
                    else
                    {
                        mdl_MYT_Partes_TrabajosRealizados.gps_posicionLatitud = null;
                        mdl_MYT_Partes_TrabajosRealizados.gps_posicionLongitud = null;
                        mdl_MYT_Partes_TrabajosRealizados.gps_zoom = null;
                        mdl_MYT_Partes_TrabajosRealizados.gps_tipoProveedor = null;
                    }
                }

                //idTecnico
                if (g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id > -1)
                {
                    mdl_MYT_Partes_TrabajosRealizados.idTecnico = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id;
                }
                else
                {
                    mdl_MYT_Partes_TrabajosRealizados.idTecnico = null;
                }

                //idInstalacionCabecera
                mdl_MYT_Partes_TrabajosRealizados.idInstalacionCabecera = g_mdl_MYT_Partes_TrabajosRealizados != null ? g_mdl_MYT_Partes_TrabajosRealizados.idInstalacionCabecera : g_mdl_INTERNO_MYT_Partes_Modelo.idInstalacionCabecera;

                //idInstalacionLinea
                mdl_MYT_Partes_TrabajosRealizados.idInstalacionLinea = g_mdl_MYT_Partes_TrabajosRealizados != null ? g_mdl_MYT_Partes_TrabajosRealizados.idInstalacionLinea : g_mdl_INTERNO_MYT_Partes_Modelo.idInstalacionLinea;

                //idParteEstado
                mdl_MYT_Partes_TrabajosRealizados.idParteEstado = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Estado.Exferia_F3_Id;

                // Se graba el modelo ya relleno.
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_MYT_Partes_TrabajosRealizados_Datos.Grabar(mdl_MYT_Partes_TrabajosRealizados);

                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    lng_idTrabajoRealizado = mdl_INTERNO_ValorDevuelto_Modelo.Id;

                    #region FIRMAS
                    //Borro todas las Firmas Asociadas
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_BORRAR = g_obj_MYT_Partes_TrabajosRealizados_Firmas_Datos.Borrar_Por_IdTrabajoRealizado(lng_idTrabajoRealizado);
                    if (!mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_BORRAR.TodoCorrecto)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_BORRAR;
                    }

                    //INSERTO LA FIRMA DEL TECNICO
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        if (g_img_Firma_Tecnico_Real != null)
                        {
                            MYT_Partes_TrabajosRealizados_Firmas mdl_MYT_Partes_TrabajosRealizados_Firmas = new MYT_Partes_TrabajosRealizados_Firmas();
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.id = -1;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.idTrabajoRealizado = lng_idTrabajoRealizado;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.idTerminal = g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos != null ? g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos.idTerminal : lng_Nulo;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.idTecnico_Firma = g_frm_P_Parte_TrabajoRealizado.Exferia_F3_Tecnico.Exferia_F3_Id;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.tecnicoPrincipal = true;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.cliente_Firma = null;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.firma = Funciones.Convertir_Image_Arraybytes(g_img_Firma_Tecnico_Real);
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.observaciones = g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Tecnico_Firma_Observaciones.Text;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.guid = g_mdl_INTERNO_MYT_Partes_Modelo.guid;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.fechaBorrado = null;

                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_FIRMA_TECNICO = g_obj_MYT_Partes_TrabajosRealizados_Firmas_Datos.Insertar(mdl_MYT_Partes_TrabajosRealizados_Firmas);
                            if (!mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_FIRMA_TECNICO.TodoCorrecto)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_FIRMA_TECNICO;
                            }
                        }
                    }

                    //INSERTO LA FIRMA DEL CLIENTE
                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        if (g_img_Firma_Cliente_Real != null)
                        {
                            MYT_Partes_TrabajosRealizados_Firmas mdl_MYT_Partes_TrabajosRealizados_Firmas = new MYT_Partes_TrabajosRealizados_Firmas();
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.id = -1;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.idTrabajoRealizado = lng_idTrabajoRealizado;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.idTerminal = g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos != null ? g_mdl_INTERNO_MYT_Partes_Modelo.MYT_Tecnicos.idTerminal : lng_Nulo;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.idTecnico_Firma = null;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.tecnicoPrincipal = false;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.cliente_Firma = g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Cliente_Firma.Text;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.firma = Funciones.Convertir_Image_Arraybytes(g_img_Firma_Cliente_Real);
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.observaciones = g_frm_P_Parte_TrabajoRealizado.Exferia_TextBox_Cliente_Firma_Observaciones.Text;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.guid = g_mdl_INTERNO_MYT_Partes_Modelo.guid;
                            mdl_MYT_Partes_TrabajosRealizados_Firmas.fechaBorrado = null;

                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_FIRMA_CLIENTE = g_obj_MYT_Partes_TrabajosRealizados_Firmas_Datos.Insertar(mdl_MYT_Partes_TrabajosRealizados_Firmas);
                            if (!mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_FIRMA_CLIENTE.TodoCorrecto)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo = mdl_INTERNO_ValorDevuelto_Modelo_TRABAJOREALIZADO_FIRMA_CLIENTE;
                            }
                        }
                    }
                    #endregion
                }

                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    #region ARGUMENTOS A DEVOLVER, PARA ACTUALIZAR LE LISTADO
                    List<object> lst_Argumentos = new List<object>();

                    //Principal
                    lst_Argumentos.Add(lng_idTrabajoRealizado);
                    lst_Argumentos.Add(mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion);
                    //..........................................................................................................................

                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = lst_Argumentos;
                    #endregion
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(GrabarDatos_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            
            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Borrar Datos
        public void BorrarDatos()
        {
            try
            {
                //Preguntar si está seguro de borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_Parte_TrabajoRealizado.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

                    g_obj_TareaAsincrona_BorrarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_BorrarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_BorrarDatos_DoWork);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_BorrarDatos_Completed);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerAsync();

                    g_frm_PE_Esperando.ShowDialog();
                }
            }
            catch(Exception ex)
            {
                if(g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                g_frm_P_Parte_TrabajoRealizado.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(BorrarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_BorrarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Borrar
                mdl_INTERNO_ValorDevuelto_Modelo = BorrarDatos_Final();
            }
            catch(ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_BorrarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_Parte_TrabajoRealizado.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    #region SINCRONIZACION
                    INTERNO_Sincronizacion_ActualizarRegistro_Modelo mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo = new INTERNO_Sincronizacion_ActualizarRegistro_Modelo();
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.tabla = nameof(MYT_Partes_TrabajosRealizados);
                    mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo.idClavePrimaria = mdl_ValorDevuelto_Modelo_Resultado.Id;

                    Sincronizacion_ActualizarRegistro.Sincronizacion_ActualizarRegistro_RESTOTABLAS(mdl_INTERNO_Sincronizacion_ActualizarRegistro_Modelo);

                    #endregion

                    // Devolver al Listado el Row Borrar
                    List<object> lst_obj = new List<object>();

                    //opcion
                    lst_obj.Add(g_frm_P_Parte_TrabajoRealizado.g_mdl_PRV_OpcionesDetalle.opcion);


                    //Ids a borrar
                    List<long> lst_id = new List<long>();
                    lst_id.Add(mdl_ValorDevuelto_Modelo_Resultado.Id);
                    lst_obj.Add(lst_id);

                    g_frm_P_Parte_TrabajoRealizado.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(lst_obj, G_ENUM_TIPOACCION.INT_ELIMINAR);

                    g_frm_P_Parte_TrabajoRealizado.P_Base_SeModificoDatosPantalla = false;
                    g_frm_P_Parte_TrabajoRealizado.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Completed));
            }
        }
        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            try
            {
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_MYT_Partes_TrabajosRealizados_Datos.Borrar(g_mdl_MYT_Partes_TrabajosRealizados!=null ? g_mdl_MYT_Partes_TrabajosRealizados.id : -1);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(BorrarDatos_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Mapa
        public void RecargarMapa()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Parte_TrabajoRealizado.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                //Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_CargarMapa != null)
                {
                    while (g_obj_TareaAsincrona_CargarMapa.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_CargarMapa = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarMapa.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarMapa_DoWork);
                    g_obj_TareaAsincrona_CargarMapa.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarMapa_Completed);
                    g_obj_TareaAsincrona_CargarMapa.WorkerReportsProgress = false;
                }

                //(Tarea Asincrona) Cargar Datos #######################################################
                g_obj_TareaAsincrona_CargarMapa.RunWorkerAsync();
                //######################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_Parte_TrabajoRealizado.Enabled = true;

                if (g_frm_P_Parte_TrabajoRealizado != null)
                {
                    g_frm_P_Parte_TrabajoRealizado.Close();
                    g_frm_P_Parte_TrabajoRealizado = null;
                }

                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(RecargarMapa));
            }
        }
        private void TareaAsincrona_CargarMapa_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                if (Mapa_Cargar() == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarMapa_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_P_Parte_TrabajoRealizado.Enabled = true;

            try
            {
                if (e.Cancelled)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                    //Mostrar si tuviera algun mensaje
                    if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                    {
                        if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                        {
                            Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                            g_frm_P_Parte_TrabajoRealizado.Salir_P_Base();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(TareaAsincrona_CargarMapa_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Parte_TrabajoRealizado.Salir_P_Base();
            }
        }

        public bool Mapa_Cargar()
        {
            bool bol_ValorDevuelto = true;

            try
            {
                if (g_mdl_MYT_Partes_TrabajosRealizados != null)
                {
                    INTERNO_DatosMapa_Modelo mdl_INTERNO_DatosMapa_Modelo = new INTERNO_DatosMapa_Modelo();
                    mdl_INTERNO_DatosMapa_Modelo.TipoProveedor = Variables.G_INT_MAPAS_BING_SATELITE;

                    //gps_posicionLatitud y gps_posicionLongitud
                    if (g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLatitud != null && g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLatitud.Trim().Length > 0 &&
                        g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLongitud != null && g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLongitud.Trim().Length > 0)
                    {
                        mdl_INTERNO_DatosMapa_Modelo.Posicion_Punto = new PointLatLng(double.Parse(g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLatitud.Replace(".", ",")), double.Parse(g_mdl_MYT_Partes_TrabajosRealizados.gps_posicionLongitud.Replace(".", ",")));
                    }

                    //descripcion
                    mdl_INTERNO_DatosMapa_Modelo.TextoToolTip ="Donde se hizo el trabajo";

                    //gps_zoom
                    mdl_INTERNO_DatosMapa_Modelo.Zoom = g_mdl_MYT_Partes_TrabajosRealizados.gps_zoom != null ? g_mdl_MYT_Partes_TrabajosRealizados.gps_zoom.Value : 10;

                    //gps_tipoProveedor
                    mdl_INTERNO_DatosMapa_Modelo.TipoProveedor = g_mdl_MYT_Partes_TrabajosRealizados.gps_tipoProveedor != null ? g_mdl_MYT_Partes_TrabajosRealizados.gps_tipoProveedor.Value : 1;

                    List<INTERNO_DatosMapa_Modelo> lst_INTERNO_DatosMapa_Modelo = new List<INTERNO_DatosMapa_Modelo>();
                    lst_INTERNO_DatosMapa_Modelo.Add(mdl_INTERNO_DatosMapa_Modelo);

                    g_frm_P_Parte_TrabajoRealizado.CTU_Mapa_TrabajoRealizado.ActualizarMapa(lst_INTERNO_DatosMapa_Modelo);
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Parte_TrabajoRealizado_Controladora) + "/" + nameof(Mapa_Cargar));
                bol_ValorDevuelto = false;
            }

            return bol_ValorDevuelto;
        }
        #endregion
    }
}
