public async void SendMail(McSendMailRequest request)
 {
     try
     {
         var param = new SqlParameter[] {
             new SqlParameter()
             {
                 ParameterName = "@ASUNTO",
                 SqlDbType     = System.Data.SqlDbType.NVarChar,
                 Size          = 255,
                 Direction     = System.Data.ParameterDirection.Input,
                 Value         = request.Asunto
             },
             new SqlParameter()
             {
                 ParameterName = "@TEXTO_NOTIFICAR",
                 SqlDbType     = System.Data.SqlDbType.NVarChar,
                 Size          = 4000,
                 Direction     = System.Data.ParameterDirection.Input,
                 Value         = request.Texto_Notificar
             },
             new SqlParameter()
             {
                 ParameterName = "@CUENTA_NOTIFICAR",
                 SqlDbType     = System.Data.SqlDbType.NVarChar,
                 Size          = 255,
                 Direction     = System.Data.ParameterDirection.Input,
                 Value         = request.Cuenta_Notificar
             },
             new SqlParameter()
             {
                 ParameterName = "@CUENTAS_COPIAS",
                 SqlDbType     = System.Data.SqlDbType.NVarChar,
                 Size          = -1,
                 Direction     = System.Data.ParameterDirection.Input,
                 Value         = request.Cuentas_Copias
             },
             new SqlParameter()
             {
                 ParameterName = "@PROFILE_CORREO",
                 SqlDbType     = System.Data.SqlDbType.NVarChar,
                 Size          = 100,
                 Direction     = System.Data.ParameterDirection.Input,
                 Value         = request.Profile_Correo
             }
         };
         var result = await Task.Run(() => context.Database.ExecuteSqlCommand("EXEC [dbo].[USP_ENVIOEMAIL_LINEAUNO] @ASUNTO, @TEXTO_NOTIFICAR, @CUENTA_NOTIFICAR, @CUENTAS_COPIAS, @PROFILE_CORREO", param));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        public async Task <PedidoTrabajoAccionesResponse> ResponderInconvenientePT(MCMovBanPTRequest request)
        {
            try
            {
                //MovBand
                var maxIdBan = await context.McmovBanPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                              m.INumDetPt == request.iNumDetPT &&
                                                              m.BEstRegistro == true).MaxAsync(b => (int?)b.INumDesBanPt) ?? 0;

                var mov = await context.McmovBanPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                         m.INumDetPt == request.iNumDetPT &&
                                                         m.BEstRegistro == true &&
                                                         m.INumDesBanPt == maxIdBan).AsNoTracking().FirstOrDefaultAsync() ?? null;

                var MCMovBanPT = new McmovBanPt
                {
                    BEstRegistro       = true,
                    INumIdPt           = request.iNumIdPT,
                    INumDetPt          = request.iNumDetPT,
                    SdFecCreacion      = DateTime.Now,
                    VCodUsuCreacion    = request.vCodUsuarioCreacion,
                    INumDesBanPt       = maxIdBan == 0 ? 1 : maxIdBan + 1,
                    CTipBandeja        = "2",
                    CEstBandeja        = "1",
                    ICodTraResponsable = mov.ICodTraResponsable,
                    vContenido         = request.Mensaje,
                    SdFecIngreso       = DateTime.Now,
                    CNomTerCreacion    = request.Terminal
                };


                await context.McmovBanPt.AddAsync(MCMovBanPT);

                await context.SaveChangesAsync();

                mov.SdFecFinalizacion   = DateTime.Now;
                mov.VCodUsuModificacion = request.vCodUsuarioCreacion;
                mov.CNomTerModificacion = request.Terminal;
                mov.SdFecModificacion   = DateTime.Now;
                mov.CEstBandeja         = "2";

                context.McmovBanPt.Update(mov);
                await context.SaveChangesAsync();

                if (request.Rutas != null)
                {
                    if (request.Rutas.Count() > 0)
                    {
                        foreach (var ruta in request.Rutas)
                        {
                            var maxIdAdj = await context.McmaeAdjPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                                          m.INumDetPt == request.iNumDetPT &&
                                                                          m.BEstRegistro == true).MaxAsync(b => (int?)b.INumDetAdjT) ?? 0;

                            var adjunto = new McmaeAdjPt
                            {
                                INumIdPt        = request.iNumIdPT,
                                INumDetPt       = request.iNumDetPT,
                                SdFecCreacion   = DateTime.Now,
                                CNomTerCreacion = request.Terminal,
                                INumDetAdjT     = maxIdAdj == 0 ? 1 : maxIdAdj + 1,
                                VRutaAdjunto    = ruta,
                                ITipAdjunto     = 2,
                                BEstRegistro    = true,
                                VCodUsuCreacion = request.vCodUsuarioCreacion
                            };

                            await context.McmaeAdjPt.AddAsync(adjunto);

                            await context.SaveChangesAsync();
                        }
                    }
                }

                if (!string.IsNullOrEmpty(request.Email))
                {
                    var mailRequest = new McSendMailRequest
                    {
                        Asunto           = "Se ha registrado una incidencia para el pedido de trabajo " + request.PedidoTrabajo,
                        Texto_Notificar  = !string.IsNullOrEmpty(request.Mensaje) ? request.Mensaje : "Se ha registrado una incidencia para el pedido de trabajo " + request.PedidoTrabajo,
                        Cuenta_Notificar = request.Email,
                        Cuentas_Copias   = "",
                        Profile_Correo   = ""
                    };
                    //Descomentar la línea siguiente para enviar correo electrónico al responsable
                    SendMail(mailRequest);
                }

                return(new PedidoTrabajoAccionesResponse
                {
                    Exito = true,
                    Mensaje = "Operacion realizada exitosamente"
                });
            }
            catch (Exception ex)
            {
                return(new PedidoTrabajoAccionesResponse
                {
                    Exito = false,
                    Mensaje = "Ha ocurrido un error inesperado " + ex.Message
                });
            }
        }
        public async Task <PedidoTrabajoAccionesResponse> RegistrarInconvenientePT(MCMovBanPTRequest request)
        {
            try
            {
                var listaMotivos = !string.IsNullOrEmpty(request.VTipInconveniente)? request.VTipInconveniente.Split(','): null;
                //Movimiento de Estado
                var maxIdEst = await context.McmovEstPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                              m.INumDetPt == request.iNumDetPT &&
                                                              m.BEstRegistro == true).MaxAsync(m => (int?)m.INumDetEstPt) ?? 0;

                var mov = await context.McmovEstPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                         m.INumDetPt == request.iNumDetPT &&
                                                         m.BEstRegistro == true &&
                                                         m.INumDetEstPt == maxIdEst).AsNoTracking().FirstOrDefaultAsync() ?? null;

                var MCMovEstadoPT = new McmovEstPt
                {
                    BEstRegistro    = true,
                    CEstPt          = "I",
                    INumIdPt        = request.iNumIdPT,
                    INumDetPt       = request.iNumDetPT,
                    SdFecCreacion   = DateTime.Now,
                    SdFecIniEstado  = DateTime.Now,
                    VCodUsuCreacion = request.vCodUsuarioCreacion,
                    INumDetEstPt    = mov == null ? 1 : mov.INumDetEstPt + 1,
                    CNomTerCreacion = request.Terminal
                };


                await context.McmovEstPt.AddAsync(MCMovEstadoPT);

                await context.SaveChangesAsync();

                //Actualizar registro anterior
                mov.SdFecFinEstado      = DateTime.Now;
                mov.VCodUsuModificacion = request.vCodUsuarioCreacion;
                mov.CNomTerModificacion = request.Terminal;
                mov.SdFecModificacion   = DateTime.Now;

                context.McmovEstPt.Update(mov);
                await context.SaveChangesAsync();

                //MovBand
                var maxIdBan = await context.McmovBanPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                              m.INumDetPt == request.iNumDetPT &&
                                                              m.BEstRegistro == true).MaxAsync(b => (int?)b.INumDesBanPt) ?? 0;


                var MCMovBanPT = new McmovBanPt
                {
                    BEstRegistro       = true,
                    INumIdPt           = request.iNumIdPT,
                    INumDetPt          = request.iNumDetPT,
                    SdFecCreacion      = DateTime.Now,
                    VCodUsuCreacion    = request.vCodUsuarioCreacion,
                    INumDesBanPt       = maxIdBan == 0 ? 1 : maxIdBan + 1,
                    CTipBandeja        = "1",
                    CEstBandeja        = "1",
                    ICodTraResponsable = request.ICodTraResponsable,
                    vContenido         = request.Mensaje,
                    SdFecIngreso       = DateTime.Now,
                    CNomTerCreacion    = request.Terminal
                };

                await context.McmovBanPt.AddAsync(MCMovBanPT);

                await context.SaveChangesAsync();

                var maxIdMovInc = await context.McmovIncPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                                 m.INumDetPt == request.iNumDetPT &&
                                                                 m.BEstRegistro == true).MaxAsync(b => (int?)b.INumDetIncPt) ?? 0;

                if (listaMotivos != null)
                {
                    foreach (var item in listaMotivos)
                    {
                        var MCMovIncPT = new McmovIncPT
                        {
                            BEstRegistro         = true,
                            INumIdPt             = request.iNumIdPT,
                            INumDetPt            = request.iNumDetPT,
                            INumDetIncPt         = maxIdMovInc == 0 ? 1 : maxIdMovInc + 1,
                            SdFecCreacion        = DateTime.Now,
                            VCodUsuCreacion      = request.vCodUsuarioCreacion,
                            ICodCatInconveniente = int.Parse(item.Split('|')[1]),
                            ICodMotInconveniente = int.Parse(item.Split('|')[0]),
                            CNomTerCreacion      = request.Terminal
                        };

                        await context.McmovIncPt.AddAsync(MCMovIncPT);

                        await context.SaveChangesAsync();

                        maxIdMovInc += 1;
                    }
                }

                if (!string.IsNullOrEmpty(request.VDescInconveniente))
                {
                    var maxIdMovInc1 = await context.McmovIncPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                                      m.INumDetPt == request.iNumDetPT &&
                                                                      m.BEstRegistro == true).MaxAsync(b => (int?)b.INumDetIncPt) ?? 0;

                    var MCMovIncPT = new McmovIncPT
                    {
                        BEstRegistro         = true,
                        INumIdPt             = request.iNumIdPT,
                        INumDetPt            = request.iNumDetPT,
                        INumDetIncPt         = maxIdMovInc1 == 0 ? 1 : maxIdMovInc1 + 1,
                        SdFecCreacion        = DateTime.Now,
                        VCodUsuCreacion      = request.vCodUsuarioCreacion,
                        ICodCatInconveniente = request.IdCategoria,
                        CNomTerCreacion      = request.Terminal,
                        vDesMotInconveniente = request.VDescInconveniente
                    };

                    await context.McmovIncPt.AddAsync(MCMovIncPT);

                    await context.SaveChangesAsync();
                }

                var McMaePT = await context.McmaePt.Where(x => x.INumIdPt == request.iNumIdPT).AsNoTracking().FirstOrDefaultAsync();

                McMaePT.CEstPt = "I";
                McMaePT.VCodUsuModificacion = request.vCodUsuarioCreacion;
                McMaePT.CNomTerModificacion = request.Terminal;
                McMaePT.SdFecModificacion   = DateTime.Now;

                context.McmaePt.Update(McMaePT);
                await context.SaveChangesAsync();

                if (request.Rutas != null)
                {
                    foreach (var ruta in request.Rutas)
                    {
                        var maxIdAdj = await context.McmaeAdjPt.Where(m => m.INumIdPt == request.iNumIdPT &&
                                                                      m.INumDetPt == request.iNumDetPT &&
                                                                      m.BEstRegistro == true).MaxAsync(b => (int?)b.INumDetAdjT) ?? 0;

                        var adjunto = new McmaeAdjPt
                        {
                            INumIdPt        = request.iNumIdPT,
                            INumDetPt       = request.iNumDetPT,
                            SdFecCreacion   = DateTime.Now,
                            CNomTerCreacion = request.Terminal,
                            INumDetAdjT     = maxIdAdj == 0 ? 1 : maxIdAdj + 1,
                            VRutaAdjunto    = ruta,
                            ITipAdjunto     = 1,
                            BEstRegistro    = true,
                            VCodUsuCreacion = request.vCodUsuarioCreacion
                        };

                        await context.McmaeAdjPt.AddAsync(adjunto);

                        await context.SaveChangesAsync();
                    }
                }

                if (!string.IsNullOrEmpty(request.Email))
                {
                    var mailRequest = new McSendMailRequest
                    {
                        Asunto           = "Se ha registrado una incidencia para el pedido de trabajo " + request.PedidoTrabajo,
                        Texto_Notificar  = !string.IsNullOrEmpty(request.Mensaje)? request.Mensaje: "Se ha registrado una incidencia para el pedido de trabajo " + request.PedidoTrabajo,
                        Cuenta_Notificar = request.Email,
                        Cuentas_Copias   = "",
                        Profile_Correo   = ""
                    };
                    //Descomentar la línea siguiente para enviar correo electrónico al responsable
                    SendMail(mailRequest);
                }

                return(new PedidoTrabajoAccionesResponse
                {
                    Exito = true,
                    Mensaje = "Operacion realizada exitosamente"
                });
            }
            catch (Exception ex)
            {
                return(new PedidoTrabajoAccionesResponse
                {
                    Exito = false,
                    Mensaje = "Ha ocurrido un error inesperado " + ex.Message
                });
            }
        }