private String getQueryInsertDocument(int index, SolicitudDispersion sd, String fileName, String fileDescription)
        {
            List <String> queries       = new List <string>();
            String        queriesString = "";

            //Generamos el nuevo id del documento
            queries.Add($@"SET @idDoc = (SELECT CONCAT(@idClienteDOCS, IIF(@idLastDoc is null, '00{index}', RIGHT('000' + CAST( (CAST(@idLastDoc as int) + {index})  AS VARCHAR), 3)) ))");

            queries.Add($@"INSERT INTO ARCICTEdg 
                    (dgsX001, dgsLlave, dgsX001c, dgsX003, dgsX004, dgsX006, dgsX007, dgsX009, dgsX301, dgsX302) VALUES
                    ('{sd.IdSucursal}', @idDoc, @idCliente, '{fileName}', '{fileDescription}', 'Evidencia subida desde app', GETDATE(), 0, '{sd.StrUsuario}', GETDATE())");

            foreach (String query in queries)
            {
                queriesString += query + "\n";
            }

            return(queriesString);
        }
        public IActionResult GuardarSolicitud(SolicitudDispersion sd)
        {
            ConexionSQL    conexionSQL    = new ConexionSQL();
            QuerySolicitud querySolicitud = GenerarQueryGuardarSolicitud(conexionSQL, sd);

            if (querySolicitud.StrMensaje != "")
            {
                return(Ok(new { Mensaje = querySolicitud.StrMensaje, Success = false }));
            }

            String[] arrayQuery = new String[1];
            arrayQuery[0] = querySolicitud.StrQuery;
            DataTable[] arrayResult = conexionSQL.EjecutarQueries(arrayQuery);

            if (arrayResult != null)
            {
                if (arrayResult[0].Rows.Count > 0)
                {
                    sd.IdCliente = arrayResult[0].Rows[0]["IdCliente"].ToString();
                    //Save the Byte Array as Image File.
                    saveImage(sd.IdSucursal, sd.IdCliente, sd.StrFotoINEFrontal_B64, sd.StrFotoINEFrontal_nombre);
                    saveImage(sd.IdSucursal, sd.IdCliente, sd.StrFotoINEReverso_B64, sd.StrFotoINEReverso_nombre);
                    saveImage(sd.IdSucursal, sd.IdCliente, sd.StrFotoPerfil_B64, sd.StrFotoPerfil_nombre);
                    saveImage(sd.IdSucursal, sd.IdCliente, sd.StrFotoComprobanteDomicilio_B64, sd.StrFotoComprobanteDomicilio_nombre);

                    return(Ok(new { Mensaje = "Guardado correctamente", Success = true, Resultado = "1" }));
                }
                else
                {
                    return(Ok(new { Mensaje = "No se ha guardado", Success = false }));
                }
            }
            else
            {
                return(Ok(new { Mensaje = "No se pudo guardar", Success = false }));
            }
        }
        private QuerySolicitud GenerarQueryGuardarSolicitud(ConexionSQL conexionSQL, SolicitudDispersion sd)
        {
            List <String> queries = new List <string>();

            //Validamos la curp del cliente
            queries.Add($@"select cteLlave as IdCliente from arcicte where cteX023 like '%{sd.StrCURP}%'");
            DataTable[] arrayResult = conexionSQL.EjecutarQueries(queries.ToArray());

            if (arrayResult != null)
            {
                if (arrayResult[0].Rows.Count > 0)
                {
                    sd.IdCliente = arrayResult[0].Rows[0]["IdCliente"].ToString();
                }
                else if (arrayResult[0].Rows.Count > 1)
                {
                    //Si hay mas de un cliente con el mismo curp entonces no guardamos nada
                    return(new QuerySolicitud("", "Curp duplicada en base de datos"));
                }
            }

            //Validamos que el cliente no tenga algun credito vivo
            queries.Clear();
            queries.Add(
                $@"SELECT 
                    dbo.arcicte.cteX023 as strCurp
                FROM dbo.arcicte 
                INNER JOIN dbo.arciaux ON dbo.arcicte.cteLlave = dbo.arciaux.auxX001 
                WHERE(dbo.arcicte.cteX023 = '{sd.StrCURP}')
                AND dbo.arciaux.auxX013 > 0");
            //Si ya tiene creditos omitimos su registro
            arrayResult = conexionSQL.EjecutarQueries(queries.ToArray());
            if (arrayResult != null)
            {
                if (arrayResult[0].Rows.Count > 0)
                {
                    return(new QuerySolicitud("", "El cliente ya tiene un crédito activo"));
                }
            }

            //Validamos que no tenga otra solicitud activa
            queries.Clear();
            queries.Add($@"select solX004 from arciced where cedX023 = '{sd.StrCURP}' AND (solX004 = '1' OR solX004 = '2' OR solX004 = '3')");
            arrayResult = conexionSQL.EjecutarQueries(queries.ToArray());

            if (arrayResult != null)
            {
                if (arrayResult[0].Rows.Count > 0)
                {
                    //Si ya tiene solicitudes en tramite pues no guardamos otra nueva
                    return(new QuerySolicitud("", "El cliente ya tiene una solicitud en trámite"));
                }
            }

            queries.Clear();
            queries.Add("DECLARE @idGrupo NVARCHAR(50)");
            queries.Add("DECLARE @idCliente NVARCHAR(50)");
            queries.Add("DECLARE @idClienteDOCS NVARCHAR(50)");
            queries.Add("DECLARE @idLastDoc NVARCHAR(50)");
            queries.Add("DECLARE @idDoc NVARCHAR(50)");

            queries.Add("DECLARE @idSolicitudGrupo Integer");
            queries.Add("DECLARE @idCiclo Integer");
            queries.Add("DECLARE @idPagos Integer");
            if (sd.IdCliente == "")
            {
                queries.Add($@"SET @idCliente = (select CONCAT('5', RIGHT('00000' + CAST( (max(grmLlave) + 1) AS VARCHAR), 6)) as consecutivo from ARCIGRM)");
                queries.Add($@"SET @idClienteDOCS = (select CONCAT('5', RIGHT('00000' + CAST( (max(grmLlave) + 1) AS VARCHAR), 6)) as consecutivo from ARCIGRM)");
                queries.Add($@"SET @idGrupo = (select CONCAT('5', RIGHT('00000' + CAST( (max(grmLlave) + 1) AS VARCHAR), 6)) as consecutivo from ARCIGRM)");
                queries.Add($@"SET @idCiclo = '0' ");
                queries.Add($@"SET @idPagos = {sd.IntPlazo} * 2 ");
            }
            else
            {
                queries.Add($@"SET @idCliente = {sd.IdCliente}");
                queries.Add($@"SET @idClienteDOCS = (select RIGHT('000000' + CAST('{sd.IdCliente}' AS VARCHAR), 7))");
                queries.Add($@"SET @idGrupo = (select top 1 cteX041 from arcicte where cteLlave = {sd.IdCliente})");
                queries.Add($@"SET @idCiclo = (select top 1 gruX009 from arcigru where gruLlave = @idGrupo)");
                queries.Add($@"SET @idPagos = {sd.IntPlazo} * 2 ");
            }

            //Generamos el id de cliente con un pad zero 7
            queries.Add("SET @idClienteDOCS = (select RIGHT('000000' + CAST(@idCliente AS VARCHAR), 7))");
            //Obtenemos el ultimo documento registrado
            queries.Add("SET @idLastDoc = (SELECT top 1 SUBSTRING(dgsLlave, 8, 3) from ARCICTEdg WHERE dgsX001c = @idCliente order by dgsX302 desc)");

            queries.Add(getQueryInsertDocument(1, sd, $@"Doc_Digitalizacion/{sd.IdSucursal}/{sd.StrFotoINEFrontal_nombre}", "INE FRONTAL"));
            queries.Add(getQueryInsertDocument(2, sd, $@"Doc_Digitalizacion/{sd.IdSucursal}/{sd.StrFotoINEReverso_nombre}", "INE REVERSO"));
            queries.Add(getQueryInsertDocument(3, sd, $@"Doc_Digitalizacion/{sd.IdSucursal}/{sd.StrFotoPerfil_nombre}", "FOTO PERFIL"));
            queries.Add(getQueryInsertDocument(4, sd, $@"Doc_Digitalizacion/{sd.IdSucursal}/{sd.StrFotoComprobanteDomicilio_nombre}", "COMPROBANTE DOMICILIO"));


            Double montoSolicitado = sd.DblMontoSolicitadoMejoraVivienda + sd.DblMontoSolicitadoEquipandoHogar;

            int tipoSolicitud = (sd.DblMontoSolicitadoMejoraVivienda > 0 && sd.DblMontoSolicitadoEquipandoHogar == 0)
                                    ? 3
                                    : ((sd.DblMontoSolicitadoMejoraVivienda == 0 && sd.DblMontoSolicitadoEquipandoHogar > 0)
                                        ? 4
                                        : 5);

            queries.Add($@"insert into arcigrm
                                (grmX001, grmX002, grmX003, grmX004, grmX005, grmX006, grmX010, grmX012, grmX018, grmX019, grmX025, grmX036, grmX301, grmX302, grmX303, grmX304, grmX020, grmX021, grmX026, grmX022,grmX007,grmX011,grmX075, grmX005c, grmX006c,grmX076,grmX077,grmX078  ) values
                                ('{sd.IdSucursal}', @idGrupo, '{sd.StrNombreCompleto.ToUpper()}' , '1', '{sd.idPromotor}', '{sd.StrPromotor.ToUpper()}', '{montoSolicitado}', '{sd.IntPlazo}', '1', '1', '{sd.StrFechaAlta}', '{montoSolicitado}', '{sd.StrUsuario.ToUpper()}', GETDATE(), '{sd.StrUsuario.ToUpper()}', GETDATE(), 'INDIVIDUAL', '{sd.StrFechaAlta}', '{sd.StrFechaAlta}', '{tipoSolicitud}',@idCiclo,@idPagos,'2', '{sd.IdCordinador}', '{sd.StrCordinador}','{sd.StrReferenciaBancaria}','{sd.StrBanco}','{sd.IntQuedateCasa}')");


            if (sd.DblMontoSolicitadoMejoraVivienda > 0)
            {
                sd.StrProducto = "Mejora tu vivienda";
                queries.Add($@"insert into arciced
                                    (solX001, solX003, solX004, solX005, solX006, cedLlave, cedX003, cedX004, cedX005, cedX006, cedX007, cedX008, cedX009, cedX010, cedX012, cedX013, cedX014, cedX015, cedX016, cedX019, cedX020, cedX021, cedX023, cedX024, cedX025, cedX026, cedX027, cedX028, cedX030, cedX031, cedX033, cedX034, cedX036, cedX037, cedX040, cedX046, cedX047, cedX048, cedX049, cedX054c, cedX054d, cedX301, cedX302, cedX303, cedX304,cedX189,cedX190, cedX197, cedX131,cedX029,cedX011,cedX191,cedX194, cedX120, cedX121, cedX122, cedX123, cedX124, cedX125, cedX132) values
                                    ('{sd.IdSucursal}', '{sd.StrFechaAlta}', '1', 'EN TRAMITE', @idGrupo, @idCliente, '{sd.StrApellidoPaterno.ToUpper()}', '{sd.StrApellidoMaterno.ToUpper()}', '{sd.StrNombre1.ToUpper()}', '{sd.StrNombre2.ToUpper()}', '{sd.StrNombreCompleto.ToUpper()}', '{sd.StrDomicilio.ToUpper()}', '{sd.StrDomicilioNumExt.ToUpper()}', '{sd.StrDomicilioNumInt.ToUpper()}', '{sd.StrDomicilioColonia.ToUpper()}', '{sd.IdDomicilioEstado}', '{sd.StrDomicilioEstado}', '{sd.IdDomicilioMunicipio}', '{sd.StrDomicilioMunicipio}', '{sd.StrDomicilioCodigoPostal}', '{sd.StrTelefono}', '{sd.StrCelular}', '{sd.StrCURP.ToUpper()}', '{sd.StrPais.ToUpper()}', '{sd.StrEstadoNacimiento.ToUpper()}', '{sd.StrNacionalidad.ToUpper()}', '{sd.IdGenero}', '{sd.StrGenero}', '{sd.StrFechaNacimiento}', '{sd.IdEstadoCivil}', '{sd.StrNumeroINE}', '{sd.StrClaveINE}', '{sd.StrEmail.ToLower()}', '{sd.StrOcupacion.ToUpper()}', '{sd.StrActividad}', '{sd.StrNombreConyuge.ToUpper()}', '{sd.StrFechaNacimientoConyuge}', '{sd.StrLugarNacimientoConyuge.ToUpper()}', '{sd.StrOcupacionConyuge.ToUpper()}', '{sd.DblIngresos}', '{sd.DblEgresos}', '{sd.StrUsuario.ToUpper()}', GETDATE(), '{sd.StrUsuario.ToUpper()}', GETDATE(), '{sd.DblMontoSolicitadoMejoraVivienda}','{sd.DblMontoSolicitadoMejoraVivienda}', '{sd.StrProducto}', '{sd.StrCNBV}','1','1','{sd.IntPlazo}', @idPagos, '{sd.StrDomicilio_mejoraVivienda}', '{sd.StrNumExt_mejoraVivienda}', '{sd.StrNumInt_mejoraVivienda}', '{sd.StrColonia_mejoraVivienda}', '{sd.StrMunicipio_mejoraVivienda}', '{sd.StrCodigoPostal_mejoraVivienda}', '{sd.StrActividad}')");
            }

            if (sd.DblMontoSolicitadoEquipandoHogar > 0)
            {
                //sd.StrProducto = "MEJORA HOGAR";
                queries.Add($@"insert into arciced
                                    (solX001, solX003, solX004, solX005, solX006, cedLlave, cedX003, cedX004, cedX005, cedX006, cedX007, cedX008, cedX009, cedX010, cedX012, cedX013, cedX014, cedX015, cedX016, cedX019, cedX020, cedX021, cedX023, cedX024, cedX025, cedX026, cedX027, cedX028, cedX030, cedX031, cedX033, cedX034, cedX036, cedX037, cedX040, cedX046, cedX047, cedX048, cedX049, cedX054c, cedX054d, cedX301, cedX302, cedX303, cedX304,cedX189,cedX190, cedX197, cedX131,cedX029,cedX011,cedX191,cedX194, cedX132) values
                                    ('{sd.IdSucursal}', '{sd.StrFechaAlta}', '1', 'EN TRAMITE', @idGrupo, @idCliente, '{sd.StrApellidoPaterno.ToUpper()}', '{sd.StrApellidoMaterno.ToUpper()}', '{sd.StrNombre1.ToUpper()}', '{sd.StrNombre2.ToUpper()}', '{sd.StrNombreCompleto.ToUpper()}', '{sd.StrDomicilio.ToUpper()}', '{sd.StrDomicilioNumExt.ToUpper()}', '{sd.StrDomicilioNumInt.ToUpper()}', '{sd.StrDomicilioColonia.ToUpper()}', '{sd.IdDomicilioEstado}', '{sd.StrDomicilioEstado}', '{sd.IdDomicilioMunicipio}', '{sd.StrDomicilioMunicipio}', '{sd.StrDomicilioCodigoPostal}', '{sd.StrTelefono}', '{sd.StrCelular}', '{sd.StrCURP.ToUpper()}', '{sd.StrPais.ToUpper()}', '{sd.StrEstadoNacimiento.ToUpper()}', '{sd.StrNacionalidad.ToUpper()}', '{sd.IdGenero}', '{sd.StrGenero}', '{sd.StrFechaNacimiento}', '{sd.IdEstadoCivil}', '{sd.StrNumeroINE}', '{sd.StrClaveINE}', '{sd.StrEmail.ToLower()}', '{sd.StrOcupacion.ToUpper()}', '{sd.StrActividad}', '{sd.StrNombreConyuge.ToUpper()}', '{sd.StrFechaNacimientoConyuge}', '{sd.StrLugarNacimientoConyuge.ToUpper()}', '{sd.StrOcupacionConyuge.ToUpper()}', '{sd.DblIngresos}', '{sd.DblEgresos}', '{sd.StrUsuario.ToUpper()}', GETDATE(), '{sd.StrUsuario.ToUpper()}', GETDATE(), '{sd.DblMontoSolicitadoEquipandoHogar}','{sd.DblMontoSolicitadoEquipandoHogar}', '{sd.StrProducto}', '{sd.StrCNBV}','1','1','{sd.IntPlazo}', @idPagos, '{sd.StrActividad}')");
            }



            // queries.Add("SELECT SCOPE_IDENTITY() as idSolicitud");
            queries.Add("SELECT @idCliente AS IdCliente");


            String queriesString = "";

            foreach (String query in queries)
            {
                queriesString += query + "\n";
            }

            return(new QuerySolicitud(queriesString, ""));
        }