Exemplo n.º 1
0
        public static string SimulaGenerazioneOrdinativo(DataAccess myConn, DataTable Explastview, out Dictionary <int, DataRow> admitted)
        {
            Dictionary <object, int> ex = new Dictionary <object, int>();//idexp, byte

            admitted = new Dictionary <int, DataRow>();
            int         limiteOPIinByte = 184320;
            QueryHelper QHS             = myConn.GetQueryHelper();
            //if (Meta.IsEmpty) return;
            object spexport               = "trasmele_expense_opisiopeplus_ins";
            object ypay                   = myConn.GetSys("esercizio");
            int    dimensioneTotale       = 0;
            int    dimensioneMovCorrente  = 0;
            int    dimensioneMandatoVuoto = 0;
            string Dsingolo               = null;
            string DocMandatoVuoto        = null;

            if (Explastview.Select().Length == 0)
            {
                return(null);
            }

            siopeplus_export SS         = new siopeplus_export(myConn);
            List <DataRow>   Lpagamenti = new List <DataRow>();

            foreach (DataRow rExp in Explastview.Rows)
            {
                if (rExp.RowState != DataRowState.Deleted)
                {
                    Lpagamenti.Add(rExp);
                }
            }

            DataTable T = callSp(myConn, (from r in Lpagamenti select(int) r["idexp"]).ToList());

            if (T == null || !T.Columns.Contains("kind"))
            {
                return("Sono presenti errori nei dati");
            }
            DataRow[] MM = T.Select("(kind='MANDATO')");
            if (MM.Length == 0)
            {
                return("Errore interno");
            }
            var mandatoVuoto = SS.creaMandato(MM[0]);

            mandatoVuoto.dati_a_disposizione_ente_mandato                      = new pagamenti.ctDati_a_disposizione_ente_mandato();
            mandatoVuoto.dati_a_disposizione_ente_mandato.struttura            = MM[0]["dati_codice_struttura"].ToString();
            mandatoVuoto.dati_a_disposizione_ente_mandato.codice_struttura     = MM[0]["dati_codice_struttura"].ToString();
            mandatoVuoto.dati_a_disposizione_ente_mandato.codice_ipa_struttura = MM[0]["dati_codice_ipa_struttura"].ToString();

            DocMandatoVuoto        = mandatoVuoto.toXml(Encoding.GetEncoding("ISO-8859-1"));
            dimensioneMandatoVuoto = DocMandatoVuoto.Length + 50;
            dimensioneTotale       = dimensioneMandatoVuoto;

            var infoBeneficiari = SS.get_listaBeneficiari(T);

            //Sdoppio il ciclo per dare priorità alle righe già salvate

            foreach (var state in new[] { DataRowState.Unchanged, DataRowState.Modified })
            {
                foreach (DataRow rExp in Lpagamenti)
                {
                    if (rExp.RowState != state)
                    {
                        continue;
                    }
                    object idexp = rExp["idexp"];
                    if (rExp["kpay"] == DBNull.Value)
                    {
                        continue;
                    }

                    if (ex.ContainsKey(idexp))
                    {
                        dimensioneMovCorrente = ex[idexp];
                    }
                    else
                    {
                        var infoBeneficiario = infoBeneficiari[(int)idexp];
                        Dsingolo              = infoBeneficiario.toXml(Encoding.GetEncoding("ISO-8859-1"));
                        ex[idexp]             = Dsingolo.Length;
                        dimensioneMovCorrente = Dsingolo.Length;
                    }
                    if (dimensioneTotale + dimensioneMovCorrente <= limiteOPIinByte)
                    {
                        dimensioneTotale = dimensioneTotale + dimensioneMovCorrente;
                    }
                    else
                    {
                        return("Per rispetta la dimensione massima consentita nella trasmissione OPI Siope, ridurre il numero dei pagamenti."
                               + "Diversamente il file sarà scartato perchè supera il limite dei 180 Kb.");
                    }
                    admitted[(int)idexp] = rExp;
                }
            }

            return(null);
        }
Exemplo n.º 2
0
        public static string SimulaGenerazioneOrdinativo(DataAccess myConn, DataTable Inclastview, out Dictionary <int, DataRow> admitted)
        {
            Dictionary <object, int> ex               = new Dictionary <object, int>();//idinc, byte
            int              limiteOPIinByte          = 184320;
            QueryHelper      QHS                      = myConn.GetQueryHelper();
            object           spexport                 = "trasmele_income_opisiopeplus_ins";
            object           ypro                     = myConn.GetSys("esercizio");
            int              dimensioneTotale         = 0;
            int              dimensioneMovCorrente    = 0;
            int              dimensioneReversaleVuota = 0;
            string           Dsingolo                 = null;
            string           DocReversaleVuota        = null;
            siopeplus_export SS           = new siopeplus_export(myConn);
            var              infoVersante = new incassi.reversaleInformazioni_versante();

            admitted = new Dictionary <int, DataRow>();

            if (Inclastview.Select().Length == 0)
            {
                return(null);
            }

            List <DataRow> Lincassi = new List <DataRow>();

            foreach (DataRow rExp in Inclastview.Rows)
            {
                if (rExp.RowState != DataRowState.Deleted)
                {
                    Lincassi.Add(rExp);
                }
            }

            DataTable T = callSp(myConn, (from r in Lincassi select(int) r["idinc"]).ToList());

            if (T == null || !T.Columns.Contains("kind"))
            {
                return("Sono presenti errori nei dati");
            }
            DataRow[] MM = T.Select("(kind='REVERSALE')");
            if (MM.Length == 0)
            {
                return("Errore interno");
            }
            var reversaleVuota = SS.creaReversale(MM[0]);

            reversaleVuota.dati_a_disposizione_ente_reversale                      = new incassi.ctDati_a_disposizione_ente_reversale();
            reversaleVuota.dati_a_disposizione_ente_reversale.struttura            = MM[0]["dati_codice_struttura"].ToString();
            reversaleVuota.dati_a_disposizione_ente_reversale.codice_struttura     = MM[0]["dati_codice_struttura"].ToString();
            reversaleVuota.dati_a_disposizione_ente_reversale.codice_ipa_struttura = MM[0]["dati_codice_ipa_struttura"].ToString();

            DocReversaleVuota        = reversaleVuota.toXml(Encoding.GetEncoding("ISO-8859-1"));
            dimensioneReversaleVuota = DocReversaleVuota.Length + 50;
            dimensioneTotale         = dimensioneReversaleVuota;

            var infoVersanti = SS.get_listaVersanti(T);

            List <int> available = new List <int>();

            foreach (var state in new[] { DataRowState.Unchanged, DataRowState.Modified })
            {
                foreach (DataRow rInc in Lincassi)
                {
                    if (rInc.RowState != state)
                    {
                        continue;
                    }
                    if (rInc["kpro"] == DBNull.Value)
                    {
                        continue;
                    }

                    object idinc = rInc["idinc"];
                    if (ex.ContainsKey(idinc))
                    {
                        dimensioneMovCorrente = ex[idinc];
                    }
                    else
                    {
                        infoVersante = infoVersanti[(int)idinc];
                        Dsingolo     = infoVersante.toXml(Encoding.GetEncoding("ISO-8859-1"));
                        //File.WriteAllText(Path.Combine(Application.StartupPath,idinc.ToString()+"_"+Dsingolo.Length.ToString()),Dsingolo);
                        dimensioneMovCorrente = Dsingolo.Length;
                        ex[idinc]             = Dsingolo.Length;
                    }

                    if (dimensioneTotale + dimensioneMovCorrente > limiteOPIinByte)
                    {
                        return
                            ("Per rispetta la dimensione massima consentita nella trasmissione OPI Siope ridurre il numero degli incassi."
                             + "Diversamente il file sarà scartato perchè supera il limite dei 180 Kb.");
                    }

                    //File.WriteAllText(Path.Combine(Application.StartupPath, idinc.ToString() + "_" + Dsingolo.Length.ToString()),Dsingolo);
                    dimensioneTotale     = dimensioneTotale + dimensioneMovCorrente;
                    admitted[(int)idinc] = rInc;
                }
            }
            //File.WriteAllText(Path.Combine(Application.StartupPath,"reve_test_"+Dsingolo.Length.ToString()),Dsingolo);
            return(null);
        }