/*======================================================================*/
        private void ValidateInputParam(int EXT_APP_KOD, int PREDPIS_ID, ref P_PRPL prpl)
        {
            if (EXT_APP_KOD == null)
            {
                throw new Exception("kód externí aplikace není zadán");
            }
            P_EXTAPP EA = sesna.GetObjectByKey <P_EXTAPP>(EXT_APP_KOD);

            if (EA == null)
            {
                throw new Exception("chybný kód externí aplikace");
            }

            if (PREDPIS_ID == 0)
            {
                throw new Exception("údaj PREDPIS_ID není zadán");
            }

            prpl = sesna.FindObject <P_PRPL>(CriteriaOperator.Parse("PRPL_ID = ?", PREDPIS_ID));
            if (prpl == null)
            {
                this.Resp.status = Status.NOTEXISTS;
                this.Resp.result = Result.ERROR;
                { throw new Exception("neexistující předpis"); }
            }

            //zda je pristup na poplatek
            KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);

            if (!kp.EAexist())
            {
                throw new Exception("chybný kód externí aplikace");
            }
            if (!kp.existPravoNadPoplatkem(prpl.CompoundKey.PRPL_POPLATEK))
            {
                throw new Exception("k pohledávce neexistuje oprávnění");
            }

            #region kontrola prava nad poplatkem
            PravoNadPoplatkem pnp = null;
            try
            {
                pnp = new PravoNadPoplatkem(sesna);
            }
            catch (Exception)
            {
                throw new Exception("kontrola přístup. práv uživatele nad daty Příjmové agendy skončila chybou");
            }
            //pro predpisy je povoleno vkladani
            if (!pnp.PravoExist((int)prpl.CompoundKey.PRPL_POPLATEK, PravoNadPoplatkem.PrtabTable.PRPL, PravoNadPoplatkem.SQLPerm.INSERT))
            {
                throw new Exception("PoplWS - nedostatečná oprávnění pro vkládání předpisů.");
            }
            #endregion kontrola prava nad poplatkem
        }
Esempio n. 2
0
        /// <summary>
        /// seznam plateb k predpisu
        /// predpis KC - je ponizeny o pripadny zaporny predpis či zápornou platbu. Jsou tedy vráceny i předpisy s nulovou částkou -
        ///    jde vlastně o stornovaný předpis.
        /// KC platby = PLATBA_SPAROVANO - pouze priparovana cast platby k predpisu
        /// </summary>
        /// <param name="session"></param>
        /// <param name="PREDPIS_ID"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <returns></returns>
        internal UHRADA_PREDPISU_RESP dej_PlatbyKPredpisu(Session session, int EXT_APP_KOD, int PREDPIS_ID)
        {
            Session sesna = session;
            UHRADA_PREDPISU_RESP plResp = new UHRADA_PREDPISU_RESP();

            plResp.status = Status.NOTEXISTS;

            #region kontrola vsupnich udaju
            try
            {
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                P_PRPL pr = sesna.GetObjectByKey <P_PRPL>(PREDPIS_ID);
                if (pr == null)
                {
                    plResp.status = Status.NOTEXISTS;
                }

                decimal uhrazenoKc = 0;
                decimal prKc       = 0;
                Util.Util.DejKCReduk(ref prKc, ref uhrazenoKc, pr.USER_PREDPIS, pr.PRPL_SPAROVANO, pr.PRPL_SPAROVANO_MINUSEM);
                plResp.PREDPIS_KC          = prKc;
                plResp.PREDPIS_KC_UHRAZENO = uhrazenoKc;

                if (plResp.PREDPIS_KC < 0)
                {
                    throw new Exception("nejedná se o předpis pohledávky");
                }

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(pr.CompoundKey.PRPL_POPLATEK))
                {
                    throw new Exception("k pohledávce neexistuje oprávnění");
                }


                #region kontrola prava nad predpisy
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístp. práv uživatele nad daty Příjmové agendy skončila chybou");
                }


                if (!pnp.PravoExist((int)pr.CompoundKey.PRPL_POPLATEK, PravoNadPoplatkem.PrtabTable.PLATBA, PravoNadPoplatkem.SQLPerm.SELECT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro čtení úhrad předpisů.");
                }

                #endregion kontrola prava nad predpisy
            }
            catch (Exception exc)
            {
                plResp.result     = Result.ERROR;
                plResp.PREDPIS_KC = 0;

                if (exc.InnerException == null)
                {
                    plResp.ERRORMESS = exc.Message;
                }
                else
                {
                    plResp.ERRORMESS = exc.InnerException.Message;
                }
                return(plResp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
            #endregion kontrola vsupnich udaju

            XPCollection <P_PAROVANI> par = new XPCollection <P_PAROVANI>(sesna, CriteriaOperator.Parse("CompoundKey1.PAR_PRPL_ID = ? and CompoundKey1.PAR_PLATBA_ID > 0", PREDPIS_ID)); //32006

            foreach (var parovani in par)
            {
                P_PLATBA pPlatba = sesna.GetObjectByKey <P_PLATBA>(parovani.CompoundKey1.PAR_PLATBA_ID);
                PLATBA   platba  = new PLATBA();
                Utils.copy.CopyDlePersistentAttr <PLATBA>(pPlatba, platba);
                platba.PLATBA_PLKC = parovani.PAR_SPARKC;
                plResp.UHRADY.Add(platba);
            }

            plResp.result = Result.OK;
            plResp.status = Status.EXISTS;
            return(plResp);
        }
Esempio n. 3
0
        /// <summary>
        /// Pokud je volano s poslednim cislem davky, jsou vytovrena nova data za nove platby.
        /// Pokud je volano s mensim cislem davky, nez je posledni cislo davky, tak jsou znovu zaslana puvodni
        /// data, plus jsou pridany nove platby.
        /// Je udrzovan seznam pouze naposled predanych plateb, proto lze takto ziskat pouze posledni predane platby,
        /// ktere se nepodarilo zpracovat na klientovi. Nelze ziskat stav minus jedna.
        ///
        /// je provadene kontrola na povolene poplatky - jsou vraceny pouze platby na povolene poplatky
        ///
        /// prvni volani ma cislo davky -1  => jsou predany vsechny dosud nepradane platby
        /// </summary>
        /// <param name="session"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <param name="Davka"></param>
        /// <returns></returns>
        public UHRADY_NEW_RESP DejUhrady(Session session, int EXT_APP_KOD, string Davka)
        {
            /*
             * Guid g = Guid.NewGuid();
             * string davka = g.ToString();
             *
             *    Guid.NewGuid().ToString() => 36 characters (Hyphenated)
             *    outputs: 12345678-1234-1234-1234-123456789abc
             *
             *    Guid.NewGuid().ToString("D") => 36 characters (Hyphenated, same as ToString())
             *    outputs: 12345678-1234-1234-1234-123456789abc
             *
             *    Guid.NewGuid().ToString("N") => 32 characters (Digits only)
             *    outputs: 12345678123412341234123456789abc
             */
            Session sesna = session;

            UHRADY_NEW_RESP plResp = new UHRADY_NEW_RESP();

            plResp.status = Status.NOTEXISTS;
            plResp.DAVKA  = Davka;
            KONTROLA_POPLATKU kp = null;
            int EAbit;
            int oldDavka;
            int callDavka;

            object obj = null;

            #region kontrola vsupnich udaju
            try
            {
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                //zda je pristup na poplatek
                kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }

                obj = sesna.ExecuteScalar("select value from P_EXTAPP where ID = " + EXT_APP_KOD.ToString());
                if (obj != null)
                {
                    EAbit = (int)obj;
                }
                else
                {
                    throw new Exception("chybný kód externí aplikace");
                }


                if (!Int32.TryParse(Davka, out callDavka)) //nanplni callDavka
                {
                    throw new Exception("chybné číslo dávky");
                }
            }
            catch (Exception exc)
            {
                plResp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    plResp.ERRORMES = exc.Message;
                }
                else
                {
                    plResp.ERRORMES = exc.InnerException.Message;
                }
                return(plResp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
            #endregion kontrola vstupnich udaju

            //   platby, uvazuji pouze platby plusove i minusove,
            //   zaporne predpisy neuvazuji, predpisy obsluhuje ext. aplikace a proto by o nich mela vedet


            obj = sesna.ExecuteScalar("select MAX(DAVKA) poslDavka from P_GEO_ODBERPL where EA = " + EXT_APP_KOD.ToString());
            if (obj != null)
            {
                oldDavka = (int)obj;
            }
            else
            {
                oldDavka = -1;
            }

            VytvorDavku zpracujDavku;
            if ((oldDavka == callDavka)) // || (callDavka == -1))
            {
                zpracujDavku = new VytvorDavku(NovaData);
            }
            else
            {
                zpracujDavku = new VytvorDavku(StaraData);
            }

            int newDavka = -1;
            try
            {
                sesna.ExplicitBeginTransaction();
                zpracujDavku(oldDavka, callDavka, EXT_APP_KOD, EAbit, sesna, out newDavka);
                sesna.ExplicitCommitTransaction();

/*          string predatDavku = string.Empty;
 *        if (zpracujDavku == NovaData)
 *        {
 *          if (newDavka > callDavka)
 *            predatDavku = " DAVKA > " + callDavka.ToString();
 *          else
 *            predatDavku = "1 = 2";
 *        }
 *
 *        if (zpracujDavku == StaraData)
 *        {
 *          predatDavku = " DAVKA > " + callDavka.ToString();
 *        }
 */
                if (callDavka == -1)
                {
                    oldDavka = -1;
                }

                if (newDavka > callDavka)
                {
                    //vyberu a poslu data
                    StringBuilder cmd = new StringBuilder();
                    cmd.Append("select SUM(KC) PLATBA_PLKC, PLATBA_ID, PLATBA_VS, PLATBA_PLDATE, PLATBA_NAUCETDNE, ");
                    cmd.Append(" PLATBA_SS, PLATBA_BANKSPOJ, PLATBA_BANKU, PLATBA_PLATCE, PLATBA_DOKLAD, PLATBA_POKLDOK, ");
                    cmd.Append(" PLATBA_POZNAMKA ");
                    cmd.Append("from P_PLATBA, P_GEO_ODBERPL ");
                    cmd.Append(" where EA = " + EXT_APP_KOD.ToString());
                    cmd.Append("   and DAVKA > " + callDavka.ToString());
                    cmd.Append("   and PLATBA_ID = PLID   ");
                    cmd.Append("   and exists (select 1 from P_PRPL, P_EXTAPP_POPL eap where PRID = PRPL_ID ");
                    cmd.Append("               and eap.ID = " + EXT_APP_KOD.ToString());
                    cmd.Append("               and eap.POPLATEK = PRPL_POPLATEK) ");
                    cmd.Append("  group by PLATBA_ID, PLATBA_VS, PLATBA_PLDATE, PLATBA_NAUCETDNE, ");
                    cmd.Append("      PLATBA_SS, PLATBA_BANKSPOJ, PLATBA_BANKU, PLATBA_PLATCE, PLATBA_DOKLAD, PLATBA_POKLDOK, ");
                    cmd.Append("      PLATBA_POZNAMKA");

                    SelectedData resultSet = sesna.ExecuteQueryWithMetadata(cmd.ToString());

                    foreach (var row in resultSet.ResultSet[1].Rows) //.ResultSet[1] obsahuje vlastni data
                    {
                        PLATBA platba = new PLATBA();
                        resultSet.ResultSet[1].Rows[0].copyToObject <PLATBA>(resultSet, platba);
                        plResp.UHRADY.Add(platba);
                    }
                }

                plResp.result = Result.OK;
                plResp.DAVKA  = newDavka.ToString();

                if (plResp.UHRADY.Count() > 0)
                {
                    plResp.status = Status.EXISTS;
                }
                else
                {
                    plResp.status = Status.NOTEXISTS;
                }

                return(plResp);
            } //try
            catch (SqlExecutionErrorException exc) //XPO exception
            // catch (Exception)
            {
                sesna.ExplicitRollbackTransaction();
                plResp.result = Result.ERROR;
                if (exc.InnerException == null)
                {
                    plResp.ERRORMES = exc.Message;
                }
                else
                {
                    plResp.ERRORMES = exc.InnerException.Message;
                }

                return(plResp);
            }

            /*
             #region nahraj novou davku
             *  start transaction
             *     --vycistim tabulku
             *      delete from P_GEO_PAR where ZPRACOVAT = EAbit
             *
             *
             *     --odmazu stara data. Jsou uspesne predana, protoze je volano s poslednim cislem davky
             *      delete from P_GEO_ODBERPL where EA =
             *                        and DAVKA < oldDavka
             *
             *      --vlozim nova data
             *      insert into P_GEO_ODBERPL (DAVKA, EA, PRID, PLID, KC)
             *        select MAX(ID) DAVKA, EA, PRID, PLID, sum(KC) from P_GEO_PAR a
             *          where (PRID > 0 and PLID > 0)      --kladna platba k predpisu
             *            and ZPRACOVAT ...
             *            and ID > oldDavka
             *      group by PRID, PLID
             *
             *     select MAX(ID) newDavka from P_GEO_ODBERPL where EA =
             *
             *     --odnastaveni EAbitu
             *     update P_GEO_PAR set ZPRACOVAT =
             *        where ID <= newDavka
             * commit transaction
             *
             *
             #end region nahraj novou davku
             *
             #region dej znovu data
             *  start transaction
             *
             *      --vlozim nova data od minuleho pozadavku
             *      insert into P_GEO_ODBERPL (DAVKA, EA, PRID, PLID, KC)
             *        select MAX(ID) DAVKA, EA, PRID, PLID, sum(KC) from P_GEO_PAR a
             *          where (PRID > 0 and PLID > 0)      --kladna platba k predpisu
             *            and ZPRACOVAT ...
             *            and ID > poslDavka
             *      group by PRID, PLID
             *
             *     select MAX(ID) newDavka from P_GEO_ODBERPL where EA =
             *
             *     if newDavka = poslDavka
             *          then   nejsou nove platby a proto koncim
             *
             *     --data z posledniho neuspesneho dotazu pridam do noveho dotazu
             *     update P_GEO_ODBERPL set DAVKA = newDavka where DAVKA = poslDavka
             *
             *     --odnastaveni EAbitu
             *     update P_GEO_PAR set ZPRACOVAT =
             *        where ID <= newDavka
             *
             *  commit transaction
             *
             #endregion dej znovu data
             *
             *
             *   --vyberu a poslu data
             *      select SUM(KC) KC, PLATBA_ID, PLATBA_VS, ...  from P_PLATBA, P_GEO_ODBERPL
             *        where EA =
             *          and PLATBA_ID = PLID
             *          and exists (select 1 from P_PRPL, P_EXTAPP_POPL eap where PRID = PRPL_ID
             *                        and eap.ID = EA ..
             *                        and eap.POPLATEK = PRPL_POPLATEK)
             *
             *
             *
             *      //MSSQL where ZPRACOVAT | 2 - 2 = 0   //je nastaven jen druhy bit
             *                            ZPRACOVAT = 2   //je nastaven jen druhy bit
             *      //MSSQ  where PRPL_PR & 8 = 8 //je nastaven 4. bit
             *      //MSSQ  nastaveni 3. bitu    set PRPL_PR = (PRPL_PR | 4)
             *      //MSSQL odnastaveni 4 bitu   set PRPL_PR = ( PRPL_PR  | 8 ) - 8
             *      //ORACLE where bitand(PRPL_PR, 8) = 8 //je nastaven 4. bit
             *      //ORACLE where PRPL_PR - bitand(PRPL_PR, 4) = 0 //je nastaven jen treti bit
             *                                          PRPL_PR = 4 //je nastaven jen treti bit
             *      //ORACLE bitove or    PRPL_PR - bitand(PRPL_PR, 4)
             *      //ORACLE nastaveni 3.bitu    set PRPL_PR = PRPL_PR - bitand(PRPL_PR, 4) + 4
             *      //ORACLE odnastaveni 4 bitu  set PRPL_PR = PRPL_PR - bitand(PRPL_PR, 8)
             */
        }
        /// <summary>
        /// vraci pouze hodnotu PLATCE_ID, datumy platnosti ...
        /// OSOBA_ID, KCROK, KCSPLATKA, POSLSPLATKA vraci hodnotu nula
        /// metoda je urcena pro stare pripady, kdy ext. agenda zna VS a potrebuje zjistit PLATCE_ID, aby mohla
        /// pridavat predpisy
        /// </summary>
        /// <param name="sesna"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <param name="inParams"></param>
        /// <returns></returns>
        public PLATCE_RESP DejPlatce(Session sesna, int EXT_APP_KOD, GET_PLATCE_PARAMS inParams)
        {
            PLATCE_RESP Resp = new PLATCE_RESP();

            Resp.status = Status.NOTEXISTS;

            sesna.DropIdentityMap();

            int popl;

            try
            {
                #region kontrola vyberovych parametru
                if (string.IsNullOrWhiteSpace(inParams.VS))
                {
                    throw new Exception("Výběrová podmínka není zadána.");
                }

                popl = decimal.ToInt16(inParams.POPLATEK);

                #endregion kontrola vyberovych parametru


                #region kontrola prava na poplatek
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(popl))
                {
                    throw new Exception("Ext. aplikace nemá oprávnění k typu pohledávky.");
                }
                #endregion kontrola prava na poplatek

                #region kontrola prava na cteni platce
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístp. práv uživatele nad daty Příjmové agendy skončila chybou");
                }


                if (!pnp.PravoExist(popl, PravoNadPoplatkem.PrtabTable.RGP, PravoNadPoplatkem.SQLPerm.SELECT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro čtení plátce.");
                }

                #endregion kontrola prava nad platce


                CriteriaOperator criteria;
                criteria = CriteriaOperator.Parse("CompoundKey1.LIKEVS_POPLATEK = ? and LIKEVS_VS = ?", inParams.POPLATEK, inParams.VS);
                XPCollection <P_LIKEVS> vsExist = new XPCollection <P_LIKEVS>(sesna, criteria);
                XPCollection <P_RGP>    plce;
                if (vsExist.Count > 0)
                {
                    criteria = CriteriaOperator.Parse("CompoundKey1.RGP_POPLATEK=? and RGP_PORVS=?",
                                                      vsExist[0].CompoundKey1.LIKEVS_POPLATEK,
                                                      vsExist[0].LIKEVS_PORVS);
                    plce = new XPCollection <P_RGP>(sesna, criteria, new SortProperty("RGP_ID", SortingDirection.Ascending)); //order by, sort
                    if (plce.Count == 0)
                    {
                        Resp.status    = Status.NOTEXISTS;
                        Resp.ERRORMESS = "Plátce neexistuje.";
                        return(Resp);
                    }
                }
                else
                {
                    Resp.status    = Status.NOTEXISTS;
                    Resp.ERRORMESS = "VS neexistuje.";
                    return(Resp);
                }

                Utils.copy.CopyDlePersistentAttr <PLATCE_RESP>(plce[0], Resp);

                Resp.RGP_ID                = plce[0].RGP_ID;
                Resp.OSOBA_ID              = 0;
                Resp.RGP_KCROK             = 0;
                Resp.RGP_KCSPLATKA         = 0;
                Resp.RGP_POSLSPLATKA       = 0;
                Resp.RGP_POPLATEK          = plce[0].CompoundKey1.RGP_POPLATEK;
                Resp.RGP_PER               = plce[0].CompoundKey1.RGP_PER;
                Resp.RGP_DOPLKOD           = plce[0].CompoundKey1.RGP_DOPLKOD;
                Resp.EXPORTOVAT_DO_FINANCI = (SouhlasAnoNe)Enum.Parse(typeof(SouhlasAnoNe), plce[0].RGP_EXPUCTO);

                Resp.result = Result.OK;
                Resp.status = Status.EXISTS;
                return(Resp);
            }
            catch (Exception exc)
            {
                Resp.result = Result.ERROR;
                Resp.status = Status.ERROR;

                if (exc.InnerException == null)
                {
                    Resp.ERRORMESS = exc.Message;
                }
                else
                {
                    Resp.ERRORMESS = exc.InnerException.Message;
                }
                return(Resp);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// vraci seznam kladných nenulových předpisů dle poplatku a osoby_id
        /// částka predpisu je částka snížená o přípárování zápornou částí (CASTKA = PREDPIS + SANKCE - SPAROVANO_MINUSEM
        ///  => seznam neobsahuje předpisy, které byly celé uhrazeny jen zápornymi předpisy
        /// </summary>
        /// <param name="session"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <param name="predpis"></param>
        /// <returns></returns>
        internal PREDPISY_RESP DejPredpisy(Session session, int EXT_APP_KOD, int osobaId, int poplKod)
        {
            Session       sesna = session;
            PREDPISY_RESP resp  = new PREDPISY_RESP();

            resp.status = Status.NOTEXISTS;

            CriteriaOperator criteria;

            sesna.DropIdentityMap();

            #region kontrola vstupnich udaju
            try
            {
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("Chybný kód externí aplikace.");
                }
                if (!kp.existPravoNadPoplatkem(poplKod))
                {
                    throw new Exception("K pohledávce neexistuje oprávnění.");
                }

                if (osobaId <= 0)
                {
                    throw new Exception("Osoba musí být zadána.");
                }

                #region kontrola prava na cteni predpisu
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístp. práv uživatele nad daty Příjmové agendy skončila chybou");
                }

                if (!pnp.PravoExist(poplKod, PravoNadPoplatkem.PrtabTable.PRPL, PravoNadPoplatkem.SQLPerm.SELECT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro čtení předpisů.");
                }

                #endregion kontrola prava nad predpisy
            }
            catch (Exception exc)
            {
                resp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    resp.ERRORMESS = exc.Message;
                }
                else
                {
                    resp.ERRORMESS = exc.InnerException.Message;
                }
                return(resp);
            }
            #endregion kontrola vstupnich udaju

            try
            {
                criteria = CriteriaOperator.Parse("ADR_ID = ?", osobaId);
                XPCollection <P_ADRESA_ROBRHS> osoba = new XPCollection <P_ADRESA_ROBRHS>(sesna, criteria);
                string adrIco;
                if (osoba.Count == 1)
                {
                    adrIco = osoba.First().ADR_ICO;
                }
                else
                {
                    resp.result    = Result.OK;
                    resp.status    = Status.NOTEXISTS;
                    resp.ERRORMESS = string.Format("Osoba {0} neexistuje", osobaId);
                    return(resp);
                }

                int roku;
                if (!int.TryParse(System.Configuration.ConfigurationManager.AppSettings["DejPredpisy_HistRoku"], out roku))
                {
                    roku = 1;
                }
                DateTime predpisyOdRoku = new DateTime(DateTime.Now.AddYears(-1 * roku).Year, 1, 1);
                criteria = CriteriaOperator.Parse("CompoundKey.PRPL_ICO = ? and CompoundKey.PRPL_POPLATEK = ? " +
                                                  " and PRPL_RECORD in (' ', 'P') and  " +
                                                  " (PRPL_VYSTAVENO > ? or PRPL_PREDPIS + PRPL_SANKCE - PRPL_SPAROVANO > 0)",
                                                  adrIco, poplKod, predpisyOdRoku);
                XPCollection <P_PRPL> prpls = new XPCollection <P_PRPL>(sesna, criteria);
                foreach (var item in prpls)
                {
                    if (item.USER_PREDPIS - item.PRPL_SPAROVANO_MINUSEM <= 0)
                    {
                        continue;
                    }

                    if (item.PRPL_PREDPIS < 0)
                    {
                        continue;
                    }

                    C_NAZPOPL nazpopl = sesna.GetObjectByKey <C_NAZPOPL>((decimal)poplKod);
                    if (nazpopl != null)
                    {
                        resp.BANKOVNI_SPOJENI.SMER_KOD_BANKY = nazpopl.NAZPOPL_PRIJBANKA;
                        resp.BANKOVNI_SPOJENI.CISLO_UCTU     = nazpopl.NAZPOPL_PRIJUCET;
                        resp.BANKOVNI_SPOJENI.IBAN           = nazpopl.NAZPOPL_IBAN;
                    }

                    //zkopiruji
                    PREDPISBaseUhr predpis = new PREDPISBaseUhr();
                    Utils.copy.CopyDlePersistentAttr <PREDPISBaseUhr>(item, predpis);
                    predpis.PRPL_TYPDANE   = item.PRPL_TYPDANE.TYPDANE_KOD;
                    predpis.TYP_NAZEV      = item.PRPL_TYPDANE.TYPDANE_NAZEV;
                    predpis.POPLATEK_KOD   = (int)nazpopl.NAZPOPL_POPLATEK;
                    predpis.POPLATEK_NAZEV = nazpopl.C_NAZPOPL_NAZEV;
                    predpis.PRPL_VS        = item.PRPL_VS;

                    decimal uhrazenoKc = 0, prKc = 0;
                    Util.Util.DejKCReduk(ref prKc, ref uhrazenoKc, item.USER_PREDPIS, item.PRPL_SPAROVANO, item.PRPL_SPAROVANO_MINUSEM);
                    predpis.PRPL_PREDPIS = prKc;
                    predpis.KC_UHRAZENO  = uhrazenoKc;

                    foreach (var itemDPH in item.P_PRPL_DPH)
                    {
                        RADEK_DPH      dph = new RADEK_DPH();
                        DPHRozpisPredp tmp = new DPHRozpisPredp();
                        Utils.copy.CopyDlePersistentAttr <DPHRozpisPredp>(itemDPH, tmp);
                        Utils.copy.CopyDlePersistentAttr <RADEK_DPH>(tmp, dph);

                        predpis.RADKY_DPH.Add(dph);
                    }
                    resp.PREDPISY.Add(predpis);
                }


                resp.result = Result.OK;
                if (resp.PREDPISY.Count > 0)
                {
                    resp.status = Status.EXISTS;
                }

                return(resp);
            }
            catch (Exception exc)
            {
                resp.result = Result.ERROR;
                resp.status = Status.ERROR;

                resp.ERRORMESS = "Chyba při získávání seznamu předpisů.";
                Util.Util.WriteLog(exc.Message + "\n\n" + exc.InnerException);
                return(resp);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// pro zapnuti odberu uplateb je potreba rucni zapis do tabulek P_GEO_ODBER, P_EXTAPP.
        /// Tabulka P_GEO_ODBERPL obsahuje data cekajici na predani
        ///
        /// select, insert, update, delete on  P_GEO_ODBERPL
        /// select, insert, update, delete on  P_GEO_PAR
        ///
        /// Pokud je volano s poslednim cislem davky, jsou vytovrena nova data za nove platby.
        /// Pokud je volano s mensim cislem davky, nez je posledni cislo davky, tak jsou znovu zaslana puvodni
        /// data, plus jsou pridany nove platby.
        /// Je udrzovan seznam pouze naposled predanych plateb, proto lze takto ziskat pouze posledni predane platby,
        /// ktere se nepodarilo zpracovat na klientovi. Nelze ziskat stav minus jedna.
        ///
        /// je provadene kontrola na povolene poplatky - jsou vraceny pouze platby na povolene poplatky
        ///
        /// prvni volani ma cislo davky -1  => jsou predany vsechny dosud nepradane platby
        /// </summary>
        /// <param name="session"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <param name="Davka"></param>
        /// <returns></returns>
        public UHRADY_NEW_RESP DejUhrady(Session session, int EXT_APP_KOD, string Davka, int NevracetPlatbyEA)
        {
            Session sesna = session;

            UHRADY_NEW_RESP plResp = new UHRADY_NEW_RESP();

            plResp.status = Status.NOTEXISTS;
            plResp.DAVKA  = Davka;
            KONTROLA_POPLATKU kp = null;
            int EAbit;
            int oldDavka;
            int callDavka;

            object obj = null;

            #region kontrola vsupnich udaju a nastaveni odberu

            try
            {
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                //zda je pristup na poplatek
                kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }

                obj = sesna.ExecuteScalar("select value from P_EXTAPP where ID = " + EXT_APP_KOD.ToString());
                if (obj != null)
                {
                    EAbit = Convert.ToInt32(obj);
                }
                else
                {
                    throw new Exception("chybný kód externí aplikace");
                }

                if (!Int32.TryParse(Davka, out callDavka)) //naplni callDavka
                {
                    throw new Exception("chybné číslo dávky");
                }
            }
            catch (Exception exc)
            {
                plResp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    plResp.ERRORMESS = exc.Message;
                }
                else
                {
                    plResp.ERRORMESS = exc.InnerException.Message;
                }
                return(plResp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
            #endregion kontrola vstupnich udaju a nastaveni odberu


            obj = sesna.ExecuteScalar("select MAX(DAVKA) poslDavka from P_GEO_ODBERPL where EA = " + EXT_APP_KOD.ToString());
            if (obj != null)
            {
                oldDavka = Convert.ToInt32(obj);
            }
            else
            {
                oldDavka = -1;
            }

            if (callDavka == -1)
            {
                oldDavka = -1;
            }

            VytvorDavku zpracujDavku = new VytvorDavku(NovaData);
            int         newDavka     = -1;
            try
            {
                sesna.ExplicitBeginTransaction();
                zpracujDavku(oldDavka, callDavka, EXT_APP_KOD, EAbit, sesna, out newDavka);
                sesna.ExplicitCommitTransaction();

                if (newDavka > callDavka)
                {
                    //vyberu a poslu data
                    StringBuilder cmd = new StringBuilder();
                    cmd.Append("select SUM(KC) PLATBA_PLKC, PLATBA_ID, PLATBA_VS, PLATBA_PLDATE, PLATBA_NAUCETDNE, ");
                    cmd.Append(" PLATBA_SS, PLATBA_BANKSPOJ, PLATBA_BANKU, PLATBA_PLATCE, PLATBA_DOKLAD, PLATBA_POKLDOK, ");
                    cmd.Append(" PLATBA_POZNAMKA ");
                    cmd.Append("from P_PLATBA, P_GEO_ODBERPL ");
                    cmd.Append(" where EA = " + EXT_APP_KOD.ToString());
                    cmd.Append("   and DAVKA > " + callDavka.ToString());
                    cmd.Append("   and PLATBA_ID = PLID   ");
                    if (NevracetPlatbyEA == 0) //nechci platby vlozene EA
                    {
                        cmd.Append("   and PLATBA_EA <> " + EXT_APP_KOD.ToString());
                    }
                    cmd.Append("   and exists (select 1 from P_PRPL, P_EXTAPP_POPL eap where PRID = PRPL_ID ");
                    cmd.Append("               and eap.ID = " + EXT_APP_KOD.ToString());
                    cmd.Append("               and eap.POPLATEK = PRPL_POPLATEK) ");
                    cmd.Append("  group by PLATBA_ID, PLATBA_VS, PLATBA_PLDATE, PLATBA_NAUCETDNE, ");
                    cmd.Append("      PLATBA_SS, PLATBA_BANKSPOJ, PLATBA_BANKU, PLATBA_PLATCE, PLATBA_DOKLAD, PLATBA_POKLDOK, ");
                    cmd.Append("      PLATBA_POZNAMKA");
                    cmd.Append(" having SUM(KC) <> 0");
                    cmd.Append("    order by PLATBA_PLDATE"); //na prani Zdenala 2.2.18

                    SelectedData resultSet = sesna.ExecuteQueryWithMetadata(cmd.ToString());

                    try
                    {
                        foreach (var row in resultSet.ResultSet[1].Rows)
                        {
                            PLATBA platba = new PLATBA();
                            row.copyToObject <PLATBA>(resultSet, platba);
                            plResp.UHRADY.Add(platba);
                        }
                    }
                    catch (Exception exc)
                    {
                        sesna.ExplicitRollbackTransaction();
                        plResp.result = Result.ERROR;
                        if (exc.InnerException == null)
                        {
                            plResp.ERRORMESS = exc.Message;
                        }
                        else
                        {
                            plResp.ERRORMESS = exc.InnerException.Message;
                        }

                        return(plResp);
                    }
                }

                plResp.result = Result.OK;
                plResp.DAVKA  = newDavka.ToString();

                if (plResp.UHRADY.Count() > 0)
                {
                    plResp.status = Status.EXISTS;
                }
                else
                {
                    plResp.status = Status.NOTEXISTS;
                }

                return(plResp);
            } //try
            catch (SqlExecutionErrorException exc)
            {
                sesna.ExplicitRollbackTransaction();
                plResp.result = Result.ERROR;
                if (exc.InnerException == null)
                {
                    plResp.ERRORMESS = exc.Message;
                }
                else
                {
                    plResp.ERRORMESS = exc.InnerException.Message;
                }

                return(plResp);
            }
        }
        public UHRADY_RESP InsertUhraduPredpisu(Session session, int EXT_APP_KOD, int PREDPIS_ID, decimal KC, DateTime DATUM_UHRADY, string ZAPLATIL, string DOKLAD, int SS)
        {
            Session     sesna  = session;
            UHRADY_RESP plResp = new UHRADY_RESP();

            plResp.status = Status.NOTEXISTS;
            P_PRPL prpl;

            #region kontrola vsupnich udaju
            try
            {
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                if (PREDPIS_ID == null)
                {
                    throw new Exception("PREDPIS_ID není zadán");
                }

                prpl = sesna.FindObject <P_PRPL>(CriteriaOperator.Parse("PRPL_ID = ? and PRPL_PREDPIS + PRPL_SANKCE > 0", PREDPIS_ID));
                if (prpl == null)
                {
                    plResp.status = Status.NOTEXISTS;
                    plResp.result = Result.ERROR;
                    { throw new Exception("neexistující předpis"); }
                }

                if (KC <= 0)
                {
                    throw new Exception("nelze vložit zápornou platbu");
                }

                P_NASTAVENI nast     = sesna.GetObjectByKey <P_NASTAVENI>("OTEVR_OBDOBI");
                string      obd      = "01." + nast.HODNOTA;
                DateTime    otevrObd = DateTime.ParseExact(obd, "d.M.yyyy", null);
                if (DATUM_UHRADY < otevrObd)
                {
                    throw new Exception("datum úhrady není v otevřeném období");
                }


                //zda je pristup na poplatek
                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(prpl.CompoundKey.PRPL_POPLATEK))
                {
                    throw new Exception("k pohledávce neexistuje oprávnění");
                }

                #region kontrola prava nad poplatkem
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístp. práv uživatele nad daty Příjmové agendy skončila chybou");
                }

                //pro platby je povoleno vkladani
                if (!pnp.PravoExist((int)prpl.CompoundKey.PRPL_POPLATEK, PravoNadPoplatkem.PrtabTable.PLATBA, PravoNadPoplatkem.SQLPerm.INSERT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro vkládání plateb.");
                }

                #endregion kontrola prava nad poplatkem
            }
            catch (Exception exc)
            {
                plResp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    plResp.ERRORMESS = exc.Message;
                }
                else
                {
                    plResp.ERRORMESS = exc.InnerException.Message;
                }
                return(plResp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
            #endregion kontrola vstupnich udaju

            decimal prNesparovano = (prpl.PRPL_PREDPIS + prpl.PRPL_SANKCE) - prpl.PRPL_SPAROVANO;
            try
            {
                using (UnitOfWork uow = new UnitOfWork(sesna.DataLayer))
                {
                    DBUtil dbu = new DBUtil(sesna);

                    P_PLATBA plIns = new P_PLATBA(uow);
                    plIns.PLATBA_ID        = dbu.LIZNI_SEQ("PLATBA_ID");
                    plIns.PLATBA_VS        = prpl.PRPL_VS;
                    plIns.PLATBA_PLDATE    = DATUM_UHRADY;
                    plIns.PLATBA_NAUCETDNE = plIns.PLATBA_PLDATE;
                    plIns.PLATBA_PLKC      = KC;
                    plIns.PLATBA_PLATCE    = ZAPLATIL.SubstrLeft(30);
                    if (!string.IsNullOrWhiteSpace(DOKLAD))
                    {
                        plIns.PLATBA_DOKLAD = DOKLAD.SubstrLeft(30);
                    }
                    plIns.PLATBA_UCETMESIC = plIns.PLATBA_PLDATE.Month;
                    plIns.PLATBA_UCETROK   = plIns.PLATBA_PLDATE.Year;
                    plIns.PLATBA_RECORD    = " ";
                    plIns.PLATBA_SS        = SS;
                    DBValue dbv = DBValue.Instance(sesna);
                    plIns.LOGIN         = dbv.DBUserName;
                    plIns.LASTUPDATE    = dbv.DBSysDateTime;
                    plIns.ENTRYLOGIN    = plIns.LOGIN;
                    plIns.ENTRYDATE     = plIns.LASTUPDATE;
                    plIns.PLATBA_EA     = EXT_APP_KOD;
                    plIns.PLATBA_INTOZN = "0";

                    decimal prKc = prpl.PRPL_PREDPIS + prpl.PRPL_SANKCE;
                    if ((prKc > 0) && (KC > 0) && (prNesparovano > 0)) //kladna platba s kladnym predpisem
                    {
                        P_PAROVANI parovaniIns = new P_PAROVANI(uow);
                        parovaniIns.CompoundKey1.PAR_PRPL_ID   = prpl.PRPL_ID;
                        parovaniIns.CompoundKey1.PAR_PLATBA_ID = plIns.PLATBA_ID;

                        if (prNesparovano == KC)
                        {
                            parovaniIns.PAR_SPARKC = KC;
                        }
                        if (Math.Abs(prNesparovano) < Math.Abs(KC))
                        {
                            parovaniIns.PAR_SPARKC = prNesparovano;
                        }
                        if (Math.Abs(prNesparovano) > Math.Abs(KC))
                        {
                            parovaniIns.PAR_SPARKC = KC;
                        }

                        parovaniIns.PAR_VYTVRUCNE = "NE";
                        parovaniIns.PAR_DATE      = dbv.DBSysDateTime.ToString("yyMMddHHmmss");

                        uow.ExecuteNonQuery(String.Format(
                                                "insert into P_PR_AKT (PRA_PRPL_ID, PRA_PR, PRA_TYP) values ({0}, {1}, '{2}')",
                                                prpl.PRPL_ID, plIns.PLATBA_ID, "+"));
                    }
                    uow.CommitChanges();

                    plResp.result = Result.OK;
                    plResp.status = Status.INSERTED;

                    return(plResp);
                } //uow
            }     //try

            catch (Exception exc)
            {
                plResp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    plResp.ERRORMESS = exc.Message;
                }
                else
                {
                    plResp.ERRORMESS = exc.InnerException.Message;
                }
                return(plResp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
        }
Esempio n. 8
0
        public PESPLEMENA_RESP DejPsiSeznamPlemen(Session sesna, int EXT_APP_KOD)
        {
            PESPLEMENA_RESP Resp = new PESPLEMENA_RESP();

            sesna.DropIdentityMap();

            try
            {
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }
                P_EXTAPP EA = sesna.GetObjectByKey <P_EXTAPP>(EXT_APP_KOD);
                if (EA == null)
                {
                    throw new Exception("chybný kód externí aplikace");
                }


                int popl = Convert.ToInt16(sesna.ExecuteScalar(string.Format("SELECT KONF_POPLATEK FROM PES_KONFIG")));

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(popl))
                {
                    throw new Exception("Ext. aplikace nemá oprávnění k typu pohledávky.");
                }


                XPCollection <C_PES_PLEMENO> plemena = new XPCollection <C_PES_PLEMENO>(sesna, CriteriaOperator.Parse("1 = 1"), new SortProperty("C_PES_PLEMENO_NAZEV", SortingDirection.Ascending));
                if (plemena != null)
                {
                    Resp.PLEMENA = new List <PLEMENO>();
                }
                foreach (C_PES_PLEMENO item in plemena)
                {
                    PLEMENO pl = new PLEMENO();
                    pl.KOD   = item.C_PES_PLEMENO_KOD;
                    pl.NAZEV = item.C_PES_PLEMENO_NAZEV;
                    Resp.PLEMENA.Add(pl);
                }

                Resp.result = Result.OK;
                Resp.status = Status.EXISTS;
                return(Resp);
            }
            catch (Exception exc)
            {
                Resp.result = Result.ERROR;


                if (exc.InnerException == null)
                {
                    Resp.ERRORMESS = exc.Message;
                }
                else
                {
                    Resp.ERRORMESS = exc.InnerException.Message;
                }

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
                return(Resp);
            }
        }
Esempio n. 9
0
        public DEJPSY_RESP DejPsiSeznam(Session sesna, int EXT_APP_KOD, GET_PES_PARAMS inParams)
        {
            DEJPSY_RESP Resp = new DEJPSY_RESP();

            sesna.DropIdentityMap();

            try
            {
                #region kontrola vyberovych parametru
                if (((inParams.PES_ZNAMKA == null) &&
                     string.IsNullOrWhiteSpace(inParams.PES_JMENO) &&
                     (inParams.PES_PLEMENO_KOD == null) &&
                     string.IsNullOrWhiteSpace(inParams.POPLATNIK_PRIJMENI) &&
                     string.IsNullOrWhiteSpace(inParams.POPLATNIK_FIRMA) &&
                     string.IsNullOrWhiteSpace(inParams.POPLATNIK_ULICE) &&
                     (inParams.POPLATNIK_CP == null) &&
                     string.IsNullOrWhiteSpace(inParams.PES_TETOVANI) &&
                     string.IsNullOrWhiteSpace(inParams.PES_CIP) &&
                     string.IsNullOrWhiteSpace(inParams.PES_ZNAMKA_CIP)
                     )
                    )
                {
                    { throw new Exception("výběrová podmínka není zadána"); }
                }


                #endregion kontrola vyberovych parametru

                #region kontrola prava na poplatek
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }
                P_EXTAPP EA = sesna.GetObjectByKey <P_EXTAPP>(EXT_APP_KOD);
                if (EA == null)
                {
                    throw new Exception("chybný kód externí aplikace");
                }


                int popl = Convert.ToInt16(sesna.ExecuteScalar(string.Format("SELECT KONF_POPLATEK FROM PES_KONFIG")));

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(popl))
                {
                    throw new Exception("Ext. aplikace nemá oprávnění k typu pohledávky.");
                }
                #endregion kontrola prava na poplatek

                #region kontrola prava nad predpisy, platce,
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístp. práv uživatele nad daty Příjmové agendy skončila chybou");
                }


                if (!pnp.PravoExist(popl, PravoNadPoplatkem.PrtabTable.PRPL, PravoNadPoplatkem.SQLPerm.SELECT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro čtení předpisů.");
                }
                if (!pnp.PravoExist(popl, PravoNadPoplatkem.PrtabTable.RGP, PravoNadPoplatkem.SQLPerm.SELECT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro čtení plátců.");
                }

                #endregion kontrola prava nad predpisy

                #region SQL select
                DBVal         dbv  = new DBVal(sesna);
                IDBValFactory idbv = dbv.CreateDBV();

                DateTime rDate = DateTime.Now;

                StringBuilder cmd = new StringBuilder();
                cmd.Append("select ");
                cmd.Append("  (select sum(PRPL_PREDPIS + PRPL_SANKCE - PRPL_SPAROVANO) from P_PRPL b ");
                cmd.Append("          where b.PRPL_ICO = a.RGP_ICO ");
                cmd.Append("            and b.PRPL_POPLATEK = a.RGP_POPLATEK ");
                cmd.Append("            and b.PRPL_PREDPIS + b.PRPL_SANKCE > 0  ");
                cmd.Append("            and b.PRPL_SPLATNO < " + idbv.getParamText("DNESEK"));
                cmd.Append("            and b.PRPL_RECORD in (' ','P')) DLUH, ");
                cmd.Append(" PES_MAJITEL_ICO, PES_ID, PES_CIS_PRIZNANI, PES_JMENO, PES_POPIS,");
                cmd.Append(" PES_ZNAMKA, PES_CIP, PES_NAROZEN, PES_DRZEN_OD, PES_POPL_OD, PES_POPL_DO,");
                cmd.Append(" PES_SLEVA_OD, PES_SLEVA_DO, PES_ZMENA_OD, PES_OCKOVAN, PES_UCEL, PES_SAZPOPL_SAZBA,");
                cmd.Append(" PES_POHLAVI, PES_OSVOBOZEN, PES_DRZEN_DO, PES_MAJITEL_PERIODA, PES_POZNAMKA, PES_TET,");
                cmd.Append(" PES_CIP2, PES_ZNAMKA_VYD, PES_BARVA, PES_SLEVAC_OD, PES_SLEVAC_DO, PES_SLEVAC_KC,");
                cmd.Append(" PES_UQ_ID,");
                cmd.Append(" C_PES_PLEMENO_NAZEV, C_PES_BARVA_NAZEV, ");
                cmd.Append(" ADR_ICO, ADR_TYP, ADR_NAZEV1, ADR_NAZEV2, ADR_ICZUJ, ADR_ICZUJ_NAZEV,");
                cmd.Append(" ADR_KODCOB, ADR_KODCOB_NAZEV, ADR_KODUL, ADR_KODUL_NAZEV, ADR_CIS_DOMU, ADR_CIS_OR,");
                cmd.Append(" ADR_ZNAK_CO, ADR_PSC, ADR_KNAZEV1, ADR_KNAZEV2, ADR_KICZUJ, ADR_KICZUJ_NAZEV,");
                cmd.Append(" ADR_KKODCOB, ADR_KKODCOB_NAZEV, ADR_KKODUL, ADR_KKODUL_NAZEV, ADR_KCIS_DOMU, ADR_KCIS_OR,");
                cmd.Append(" ADR_KZNAK_CO, ADR_KPSC, ADR_SIPO, ADR_ZMENAROB,");
                cmd.Append(" ADR_JMENO, ADR_KJMENO, ADR_PRIJMENI, ADR_KPRIJMENI, ADR_TITUL_PRED, ADR_KTITUL_PRED,");
                cmd.Append(" ADR_TITUL_ZA, ADR_KTITUL_ZA, ADR_ADRPOPL, ADR_ICO_OPROS, ADR_OPROS_ROZH, ADR_DATNAR,");
                cmd.Append(" ADR_ZMENAROB_ZPRAC, ADR_POSTA, ADR_kPOSTA, ADR_TELEFON, ADR_EMAIL, ADR_PLATCEDPH,");
                cmd.Append(" ADR_DIC, ADR_ISIR, ADR_IDDS, ADR_PAS, ADR_STAT, ADR_ID,");
                cmd.Append(" ADR_DADRESA, ADR_EA");
                cmd.Append("  from P_RGP a, P_ADRESA_ROBRHS, PES_MAJITEL, PES_PES ");
                cmd.Append("     LEFT OUTER JOIN C_PES_PLEMENO on (PES_PLEMENO = C_PES_PLEMENO_KOD) ");
                cmd.Append("     LEFT OUTER JOIN C_PES_BARVA on (PES_BARVA = C_PES_BARVA_KOD) ");
                cmd.Append(" where RGP_ICO = PES_MAJITEL_ICO ");
                cmd.Append("   and PES_MAJITEL_ICO = ADR_ICO  ");
                cmd.Append("   and MAJITEL_AKTIVNI = 'A' ");
                cmd.Append("   and PES_MAJITEL_ICO = MAJITEL_ICO ");
                cmd.Append("   and PES_MAJITEL_PERIODA = MAJITEL_PERIODA ");


                cmd.Append("   and PES_POPL_OD <= " + idbv.getParamText("DNESEK"));
                cmd.Append("   and (PES_POPL_DO is null or PES_POPL_DO >= " + idbv.getParamText("DNESEK") + ")");
                cmd.Append("   and RGP_POPLATEK = " + idbv.getParamText("POPL"));
                #endregion SQL select

                List <string> pNames = new List <string>();
                pNames.Add("DNESEK");
                pNames.Add("POPL");

                List <object> pValues = new List <object>();
                pValues.Add(rDate.Date); //DNESEK
                pValues.Add(popl);       //POPL

                #region odstraneni wildcarts [%, _]
                if (!string.IsNullOrWhiteSpace(inParams.PES_JMENO))
                {
                    inParams.PES_JMENO = inParams.PES_JMENO.Replace("%", string.Empty);
                    inParams.PES_JMENO = inParams.PES_JMENO.Replace("_", string.Empty);
                }
                if (!string.IsNullOrWhiteSpace(inParams.POPLATNIK_PRIJMENI))
                {
                    inParams.POPLATNIK_PRIJMENI = inParams.POPLATNIK_PRIJMENI.Replace("%", string.Empty);
                    inParams.POPLATNIK_PRIJMENI = inParams.POPLATNIK_PRIJMENI.Replace("_", string.Empty);
                }
                if (!string.IsNullOrWhiteSpace(inParams.POPLATNIK_FIRMA))
                {
                    inParams.POPLATNIK_FIRMA = inParams.POPLATNIK_FIRMA.Replace("%", string.Empty);
                    inParams.POPLATNIK_FIRMA = inParams.POPLATNIK_FIRMA.Replace("_", string.Empty);
                }
                if (!string.IsNullOrWhiteSpace(inParams.POPLATNIK_ULICE))
                {
                    inParams.POPLATNIK_ULICE = inParams.POPLATNIK_ULICE.Replace("%", string.Empty);
                    inParams.POPLATNIK_ULICE = inParams.POPLATNIK_ULICE.Replace("_", string.Empty);
                }
                #endregion odstraneni wildcarts

                #region where podminky
                if (inParams.PES_ZNAMKA != null)
                {
                    cmd.Append(" and PES_ZNAMKA = " + inParams.PES_ZNAMKA.ToString());
                }
                if (!string.IsNullOrWhiteSpace(inParams.PES_JMENO))
                {
                    if (inParams.PES_JMENO.Any(c => char.IsLower(c)))
                    {
                        if (inParams.PES_JMENO.Length >= 5)
                        {
                            cmd.Append(" and PES_JMENO like '" + inParams.PES_JMENO + "%'");
                        }
                        else
                        {
                            cmd.Append(" and PES_JMENO = '" + inParams.PES_JMENO + "'");
                        }
                    }
                    else
                    {
                        if (inParams.PES_JMENO.Length >= 5)
                        {
                            cmd.Append(" and UPPER(PES_JMENO) like '" + inParams.PES_JMENO + "%'");
                        }
                        else
                        {
                            cmd.Append(" and UPPER(PES_JMENO) = '" + inParams.PES_JMENO + "'");
                        }
                    }
                }

                if (inParams.PES_PLEMENO_KOD != null)
                {
                    cmd.Append(" and PES_PLEMENO = " + inParams.PES_PLEMENO_KOD.ToString());
                }

                if (!string.IsNullOrWhiteSpace(inParams.POPLATNIK_PRIJMENI))
                {
                    if (inParams.POPLATNIK_PRIJMENI.Any(c => char.IsLower(c)))
                    {
                        if (inParams.POPLATNIK_PRIJMENI.Length >= 5)
                        {
                            cmd.Append(" and ADR_PRIJMENI like '" + inParams.POPLATNIK_PRIJMENI + "%'");
                        }
                        else
                        {
                            cmd.Append(" and ADR_PRIJMENI = '" + inParams.POPLATNIK_PRIJMENI + "'");
                        }
                    }
                    else
                    {
                        if (inParams.POPLATNIK_PRIJMENI.Length >= 5)
                        {
                            cmd.Append(" and UPPER(ADR_PRIJMENI) like '" + inParams.POPLATNIK_PRIJMENI + "%'");
                        }
                        else
                        {
                            cmd.Append(" and UPPER(ADR_PRIJMENI) = '" + inParams.POPLATNIK_PRIJMENI + "'");
                        }
                    }
                }
                if (!string.IsNullOrWhiteSpace(inParams.POPLATNIK_FIRMA))
                {
                    if (inParams.POPLATNIK_FIRMA.Any(c => char.IsLower(c)))
                    {
                        if (inParams.POPLATNIK_FIRMA.Length >= 5)
                        {
                            cmd.Append(" and ADR_NAZEV1 like '" + inParams.POPLATNIK_FIRMA + "%'");
                        }
                        else
                        {
                            cmd.Append(" and ADR_NAZEV1 = '" + inParams.POPLATNIK_FIRMA + "'");
                        }
                    }
                    else
                    {
                        if (inParams.POPLATNIK_FIRMA.Length >= 5)
                        {
                            cmd.Append(" and UPPER(ADR_NAZEV1) like '" + inParams.POPLATNIK_FIRMA + "%'");
                        }
                        else
                        {
                            cmd.Append(" and UPPER(ADR_NAZEV1) = '" + inParams.POPLATNIK_FIRMA + "'");
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(inParams.POPLATNIK_ULICE))
                {
                    if (inParams.POPLATNIK_ULICE.Any(c => char.IsLower(c)))
                    {
                        if (inParams.POPLATNIK_ULICE.Length >= 5)
                        {
                            cmd.Append(" and ADR_KODUL_NAZEV like '" + inParams.POPLATNIK_ULICE + "%'");
                        }
                        else
                        {
                            cmd.Append(" and ADR_KODUL_NAZEV = '" + inParams.POPLATNIK_ULICE + "'");
                        }
                    }
                    else
                    {
                        if (inParams.POPLATNIK_ULICE.Length >= 5)
                        {
                            cmd.Append(" and UPPER(ADR_KODUL_NAZEV) like '" + inParams.POPLATNIK_ULICE + "%'");
                        }
                        else
                        {
                            cmd.Append(" and UPPER(ADR_KODUL_NAZEV) = '" + inParams.POPLATNIK_ULICE + "'");
                        }
                    }
                }

                if (inParams.POPLATNIK_CP != null)
                {
                    cmd.Append(" and ADR_CIS_DOMU = " + inParams.POPLATNIK_CP.ToString());
                }

                if (!string.IsNullOrWhiteSpace(inParams.PES_ZNAMKA_CIP))
                {
                    cmd.Append(" and PES_CIP = '" + inParams.PES_ZNAMKA_CIP + "'");
                }

                if (!string.IsNullOrWhiteSpace(inParams.PES_TETOVANI))
                {
                    cmd.Append(" and PES_TET = '" + inParams.PES_TETOVANI + "'");
                }

                if (!string.IsNullOrWhiteSpace(inParams.PES_CIP))
                {
                    cmd.Append(" and PES_CIP2 = '" + inParams.PES_CIP + "'");
                }

                #endregion SQL podminky

                SelectedData resultSet = sesna.ExecuteQueryWithMetadata(cmd.ToString(), pNames.ToArray(), pValues.ToArray());


                string     ico = string.Empty;
                PES        pes;
                PLATCE_PSA psiPlatce = null;
                if (resultSet.ResultSet[1].Rows.Count() > 0)
                {
                    Resp.PLATCI = new List <PLATCE_PSA>();
                }

                foreach (var row in resultSet.ResultSet[1].Rows)
                {
                    if (ico != row.ValByName(resultSet, "ADR_ICO").ToString())
                    {
                        psiPlatce       = new PLATCE_PSA();
                        psiPlatce.OSOBA = new OSOBA();
                        row.copyToObject <OSOBA>(resultSet, psiPlatce.OSOBA);
                        row.copyToObject <KONTAKTNI_ADRESA>(resultSet, psiPlatce.OSOBA.KONTAKTNI_ADRESA);
                        object dluh = row.ValByName(resultSet, "DLUH") ?? (object)0;
                        psiPlatce.DLUH = Convert.ToDecimal(dluh) != 0;
                        Resp.PLATCI.Add(psiPlatce);

                        ico           = row.ValByName(resultSet, "ADR_ICO").ToString();
                        psiPlatce.PSI = new List <PES>();
                    }

                    pes = new PES();
                    row.copyToObject <PES>(resultSet, pes);

                    pes.PLEMENO = (string)row.ValByName(resultSet, "C_PES_PLEMENO_NAZEV");
                    pes.BARVA   = (string)row.ValByName(resultSet, "C_PES_BARVA_NAZEV");
                    psiPlatce.PSI.Add(pes);
                }

                Resp.result = Result.OK;
                if ((psiPlatce != null) && (psiPlatce.PSI.Count() > 0))
                {
                    Resp.status = Status.EXISTS;
                }
                else
                {
                    Resp.status = Status.NOTEXISTS;
                }

                return(Resp);
            }
            catch (Exception exc)
            {
                Resp.result = Result.ERROR;
                Resp.status = Status.ERROR; //0.27



                if (exc.InnerException == null)
                {
                    Resp.ERRORMESS = exc.Message;
                }
                else
                {
                    Resp.ERRORMESS = exc.InnerException.Message;
                }

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
                return(Resp);
            }
        }
Esempio n. 10
0
        public PREDPIS_RESP InsertPredpis(Session session, int EXT_APP_KOD, PREDPIS predpis, bool nastavitKCdleDPH)
        {
            Session          sesna = session;
            PREDPIS_RESP     Resp  = new PREDPIS_RESP();
            CriteriaOperator criteria;

            //Session sesna = predpis.sesna;

            sesna.DropIdentityMap();

            predpis.PRPL_ID    = 0;
            predpis.PRPL_EXTVS = null;
            predpis.PRPL_EA    = EXT_APP_KOD;

            try
            {
                #region test  vyplneni vstupnich hodnot

                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }
                P_EXTAPP EA = sesna.GetObjectByKey <P_EXTAPP>(EXT_APP_KOD);
                if (EA == null)
                {
                    throw new Exception("chybný kód externí aplikace");
                }



                if (predpis.PLATCE_ID == 0)
                {
                    throw new Exception("údaj PLATCE_ID není zadán");
                }

                if (predpis.PRPL_PREDPIS == 0)
                {
                    throw new Exception("údaj KC není zadán");
                }

                if (predpis.PRPL_VYSTAVENO == DateTime.MinValue)
                {
                    throw new Exception("údaj VYSTAVENO_DNE není zadán");
                }

                if ((predpis.RADKY_DPH.Count > 0) && (predpis.PRPL_UZP == null))
                {
                    throw new Exception("údaj DATUM_UZP není zadán");
                }

                if (predpis.RADKY_DPH.Count > 0)
                {
                    P_NASTAVENI nast     = sesna.GetObjectByKey <P_NASTAVENI>("OTEVR_UZP");
                    string      s        = nast.HODNOTA.Substring(1, nast.HODNOTA.IndexOf('|') - 1);
                    DateTime    otevrUZP = DateTime.ParseExact(s, "d.M.yyyy", null);
                    otevrUZP = new DateTime(otevrUZP.Year, otevrUZP.Month, 1);
                    if (predpis.PRPL_UZP < otevrUZP)
                    {
                        throw new Exception("DATUM_UZP není v otevřeném období UZP");
                    }
                }

                //otevrene obdobi
                {
                    P_NASTAVENI nast     = sesna.GetObjectByKey <P_NASTAVENI>("OTEVR_OBDOBI");
                    string      obd      = "01." + nast.HODNOTA;
                    DateTime    otevrObd = DateTime.ParseExact(obd, "d.M.yyyy", null);
                    if (predpis.PRPL_VYSTAVENO < otevrObd)
                    {
                        throw new Exception("datum vystavení není v otevřeném období");
                    }
                }

                //v minulosti
                {
                    DBValue dbv = DBValue.Instance(sesna);
                    if (predpis.PRPL_VYSTAVENO < dbv.DBSysDate)
                    {
                        throw new Exception("datum vystavení nemůže být v minulosti");
                    }
                }

                #endregion test  vyplneni vstupnich hodnot

                #region test, zda existuje v P_RGP, dohledani zbytku klice
                XPQuery <P_RGP>      Qplce = sesna.Query <P_RGP>();
                XPCollection <P_RGP> plces = new XPCollection <P_RGP>(sesna, false); //loadingEnabled = false;
                P_RGP[] rgps = Qplce.Where(a => a.RGP_ID == predpis.PLATCE_ID).ToArray <P_RGP>();
                plces.AddRange(rgps);

                if (plces.Count == 0)
                {
                    throw new Exception(String.Format(@"poplatník s ID {0} neexistuje", predpis.PLATCE_ID));
                }

                #endregion test, zda existuje v P_RGP, dohledani zbytku klice


                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(plces[0].CompoundKey1.RGP_POPLATEK))
                {
                    throw new Exception("k pohledávce neexistuje oprávnění");
                }

                #region kontrola prava nad poplatkem
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístp. práv uživatele nad daty Příjmové agendy skončila chybou");
                }
                //pro predpisy je povoleno vkladani
                if (!pnp.PravoExist((int)plces[0].CompoundKey1.RGP_POPLATEK, PravoNadPoplatkem.PrtabTable.PRPL, PravoNadPoplatkem.SQLPerm.INSERT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění");
                }
                #endregion kontrola prava nad poplatkem

                P_RGP plce = plces[0];
                predpis.PRPL_PORPER = predpis.PRPL_PORPER == 0 ? 1 : predpis.PRPL_PORPER;

                DBUtil   dbu = new DBUtil(sesna);
                C_EVPOPL evp = dbu.GetEvpopl(plce.CompoundKey1.RGP_POPLATEK, plce.CompoundKey1.RGP_PER);
                if (evp == null)
                {
                    throw new Exception("nepovolená kombinace poplatek / perioda");
                }

                //datum splatnosti
                if (predpis.PRPL_SPLATNO == DateTime.MinValue)
                {
                    predpis.PRPL_SPLATNO = dbu.GetDatumSplatnosti(predpis.PRPL_VYSTAVENO, evp, (short)predpis.PRPL_PORPER);
                }

                if ((predpis.PRPL_VYSTAVENO > predpis.PRPL_SPLATNO) && (evp.EVPOPL_SPLT_VYST != "A"))
                {
                    throw new Exception("datum splatnosti nemůže být starší než datum vystavení");
                }

                //pocet period
                if (evp.CompoundKey1.EVPOPL_PER.PERIODA_POC < predpis.PRPL_PORPER)
                {
                    throw new Exception(String.Format("nepovolené pořadí periody \"{0}\", max. pořadí pro periodu \"{1}\" = {2}", predpis.PRPL_PORPER, plce.CompoundKey1.RGP_PER, evp.CompoundKey1.EVPOPL_PER.PERIODA_POC));
                }

                using (MyUnitOfWork uow = new MyUnitOfWork(sesna.DataLayer))
                {
                    P_PRPL prIns = new P_PRPL(uow);
                    Utils.copy.CopyDlePersistentAttr <P_PRPL>(predpis, prIns);

                    prIns.PRPL_ID = dbu.LIZNI_SEQ("PRPL_ID");
                    prIns.CompoundKey.PRPL_POPLATEK = plce.CompoundKey1.RGP_POPLATEK;
                    prIns.CompoundKey.PRPL_PER      = plce.CompoundKey1.RGP_PER;
                    prIns.CompoundKey.PRPL_ICO      = plce.CompoundKey1.RGP_ICO;
                    prIns.CompoundKey.PRPL_DOPLKOD  = plce.CompoundKey1.RGP_DOPLKOD;
                    prIns.PRPL_ROK    = predpis.PRPL_ROK == 0 ? predpis.PRPL_VYSTAVENO.Year : predpis.PRPL_ROK;
                    prIns.PRPL_PORPER = predpis.PRPL_PORPER == 0 ? 1 : predpis.PRPL_PORPER;
                    prIns.PRPL_SS     = predpis.PRPL_SS ?? evp.EVPOPL_SS;

                    if (predpis.EXPORTOVAT_DO_FINANCI == null)
                    {
                        prIns.PRPL_EXPFIN = plce.RGP_EXPUCTO;
                    }
                    else
                    {
                        prIns.PRPL_EXPFIN = predpis.EXPORTOVAT_DO_FINANCI.ToString();
                    }
                    P_C_TYPDANE typdane = uow.GetObjectByKey <P_C_TYPDANE>(predpis.PRPL_TYPDANE);
                    if (typdane != null)
                    {
                        prIns.PRPL_TYPDANE = typdane;
                    }
                    else
                    {
                        typdane            = uow.GetObjectByKey <P_C_TYPDANE>((short)5);
                        prIns.PRPL_TYPDANE = typdane;
                    }

                    prIns.PRPL_RECORD = dbu.GetRecordFromTypDane(prIns.PRPL_TYPDANE.TYPDANE_KOD);

                    if (prIns.PRPL_RECORD == "-1")
                    {
                        throw new Exception(String.Format(@"chybný typ daně {0}", prIns.PRPL_TYPDANE));
                    }

                    if (prIns.PRPL_RECORD == "P")
                    {
                        prIns.PRPL_SANKCE  = prIns.PRPL_PREDPIS;
                        prIns.PRPL_PREDPIS = 0;
                    }
                    ;

                    prIns.PRPL_VS = plce.VS;

                    prIns.PRPL_PORSANKCE   = 0m;
                    prIns.PRPL_PROCSANKCE  = plce.RGP_PROCSANKCE;
                    prIns.PRPL_VYSTUP      = plce.RGP_VYSTUP;
                    prIns.PRPL_TISK        = "NE";
                    prIns.PRPL_EXPORTOVANO = "NE";
                    prIns.PRPL_UCETMESIC   = predpis.PRPL_VYSTAVENO.Month;
                    prIns.PRPL_UCETROK     = predpis.PRPL_VYSTAVENO.Year;
                    prIns.PRPL_OBDOBIMES   = -1;
                    prIns.PRPL_OBDOBIROK   = -1;
                    prIns.PRPL_TYPSANKCE   = plce.RGP_TYPSANKCE;
                    prIns.PRPL_PEVNACASTKA = plce.RGP_PEVNACASTKA;
                    prIns.PRPL_NASOBEK     = plce.RGP_NASOBEK;
                    prIns.PRPL_PERNAS      = plce.RGP_PERNAS;
                    prIns.PRPL_STAVSANKCE  = " ";
                    prIns.PRPL_SPAROVANO   = 0m;
                    prIns.PRPL_EXPSIPO     = "NE";
                    prIns.PRPL_VYMAHAT     = predpis.PRPL_VYMAHAT == null ? "N" : predpis.PRPL_VYMAHAT;
                    prIns.PRPL_VYMAHANO    = "N";
                    prIns.PRPL_PR          = 0;
                    DBValue dbv = DBValue.Instance(sesna);
                    prIns.LOGIN      = dbv.DBUserName;
                    prIns.LASTUPDATE = dbv.DBSysDateTime;
                    prIns.ENTRYLOGIN = prIns.ENTRYLOGIN;
                    prIns.ENTRYDATE  = prIns.LASTUPDATE;
                    if (!prIns.PRPL_OLDVS.HasValue)
                    {
                        prIns.PRPL_OLDVS = plce.RGP_OLDVS;
                    }

                    #region DPH - zkontrolovani celkove castky, zaokrouhleni
                    decimal          SumaRadkuDPH = predpis.PRPL_PREDPIS;
                    List <DPHRozpis> radkyDph     = new List <DPHRozpis>();
                    if (predpis.RADKY_DPH.Count > 0)
                    {
                        DPHRozpis dpr;
                        foreach (RADEK_DPH item in predpis.RADKY_DPH)
                        {
                            if (item.ZAKLAD == 0)
                            {
                                continue;
                            }
                            dpr = new DPHRozpis();
                            Utils.copy.CopyDlePersistentAttr(item, dpr);
                            dpr.DAN = item.ZAKLAD * ((item.SAZBA ?? 0) / 100);
                            dpr.KC  = dpr.ZAKLAD + dpr.DAN;
                            radkyDph.Add(dpr);
                        }

                        DPHZaokrouhleni dphZaokr = new DPHZaokrouhleni();
                        dphZaokr.DPHZaokrouhli(radkyDph, prIns.CompoundKey.PRPL_POPLATEK, sesna);

                        SumaRadkuDPH = 0;
                        foreach (var item in radkyDph)
                        {
                            SumaRadkuDPH += item.KC + item.ZAOKROUHLENI;
                        }

                        if (nastavitKCdleDPH)
                        {
                            predpis.PRPL_PREDPIS = SumaRadkuDPH;
                        }
                        else
                        {
                            if (SumaRadkuDPH != predpis.PRPL_PREDPIS)
                            {
                                throw new Exception(String.Format("nesouhlasí částka předpisu {0} \n s rozpisem DPH {1}",
                                                                  predpis.PRPL_PREDPIS, SumaRadkuDPH));
                            }
                        }
                    }
                    #endregion DPH - zkontrolovani celkove castky, zaokrouhleni

                    //povkladam radkyDph
                    foreach (var item in radkyDph)
                    {
                        P_PRPL_DPH     dphr = new P_PRPL_DPH(uow);
                        DPHRozpisPredp tmp  = new DPHRozpisPredp();
                        Utils.copy.CopyDlePersistentAttr <DPHRozpisPredp>(item, tmp);
                        Utils.copy.CopyDlePersistentAttr <P_PRPL_DPH>(tmp, dphr);
                        prIns.P_PRPL_DPH.Add(dphr);
                    }

                    uow.CommitTransaction();

                    Utils.copy.CopyDlePersistentAttr <PREDPIS_RESP>(predpis, Resp);
                    Resp.result = Result.OK;
                    Resp.status = Status.INSERTED;
                    Utils.copy.CopyDlePersistentAttr <PREDPIS_RESP>(prIns, Resp);
                    Resp.PRPL_TYPDANE = prIns.PRPL_TYPDANE.TYPDANE_KOD;
                    switch (prIns.PRPL_EXPFIN)
                    {
                    case "ANO":
                        Resp.EXPORTOVAT_DO_FINANCI = SouhlasAnoNe.ANO;
                        break;

                    default:
                        Resp.EXPORTOVAT_DO_FINANCI = SouhlasAnoNe.NE;
                        break;
                    }

                    foreach (var item in prIns.P_PRPL_DPH)
                    {
                        RADEK_DPH      respDphRow = new RADEK_DPH();
                        DPHRozpisPredp tmp        = new DPHRozpisPredp();
                        Utils.copy.CopyDlePersistentAttr <DPHRozpisPredp>(item, tmp);
                        Utils.copy.CopyDlePersistentAttr <RADEK_DPH>(tmp, respDphRow);
                        Resp.RADKY_DPH.Add(respDphRow);
                    }

                    try
                    {
                        if (prIns.PRPL_EXPFIN == "ANO")
                        {
                            dbu.PredpisExport((int)prIns.CompoundKey.PRPL_POPLATEK, prIns.CompoundKey.PRPL_PER,
                                              (int)Resp.PRPL_UCETMESIC, (int)Resp.PRPL_UCETROK,
                                              Resp.PRPL_ID);
                        }
                    }
                    catch (Exception exc)
                    {
                    }

                    return(Resp);
                } //uow
            }
            catch (Exception exc)
            {
                Resp.result = Result.ERROR;


                if (exc.InnerException == null)
                {
                    Resp.ERRORMESS = exc.Message;
                }
                else
                {
                    Resp.ERRORMESS = exc.InnerException.Message;
                }

                Util.Util.WriteLog(Resp.ERRORMESS + "\n" + exc.StackTrace);

                return(Resp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
        }
        /// <summary>
        /// uhrady za VS
        /// </summary>
        /// <param name="session"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <param name="VS"></param>
        /// <returns></returns>
        public UHRADY_RESP DejUhrady(Session session, int EXT_APP_KOD, string VS)
        {
            Session     sesna  = session;
            UHRADY_RESP plResp = new UHRADY_RESP();

            plResp.status = Status.NOTEXISTS;

            #region kontrola vsupnich udaju
            try
            {
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                if (string.IsNullOrEmpty(VS))
                {
                    throw new Exception("VS není zadán");
                }

                P_LIKEVS likevs = sesna.FindObject <P_LIKEVS>(CriteriaOperator.Parse("LIKEVS_VS = ?", VS));
                if (likevs == null)
                {
                    plResp.status = Status.NOTEXISTS;
                    plResp.result = Result.OK;
                    return(plResp);
                }


                //zda je pristup na poplatek
                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(likevs.CompoundKey1.LIKEVS_POPLATEK))
                {
                    throw new Exception("k pohledávce neexistuje oprávnění");
                }
            }
            catch (Exception exc)
            {
                plResp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    plResp.ERRORMESS = exc.Message;
                }
                else
                {
                    plResp.ERRORMESS = exc.InnerException.Message;
                }
                return(plResp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
            #endregion kontrola vstupnich udaju

            //setridim vzestupne dle PLATBA_ID
            XPCollection <P_PLATBA> platby = new XPCollection <P_PLATBA>(sesna, CriteriaOperator.Parse("PLATBA_VS = ?", VS), new SortProperty("PLATBA_ID", SortingDirection.Ascending));
            foreach (var item in platby)
            {
                PLATBA pl = new PLATBA();
                Utils.copy.CopyDlePersistentAttr <PLATBA>(item, pl);
                plResp.UHRADY.Add(pl);
            }

            plResp.result = Result.OK;
            if (platby.Count > 0) //0.27
            {
                plResp.status = Status.EXISTS;
            }

            return(plResp);
        }
Esempio n. 12
0
        public PLATCE_RESP InsertPlatce(Session sesna, int EXT_APP_KOD, PLATCE platce, P_RGP rgp, bool nastavitKCdleDPH)
        {
            PLATCE_RESP      Resp = new PLATCE_RESP();
            CriteriaOperator criteria;

            platce.RGP_EA = EXT_APP_KOD;

            Type sesnaType      = null;
            Type unitOfWorkType = null;

            bool commituj = false;

            if (sesna is DevExpress.Xpo.Session)
            {
                commituj  = (sesna == null) ? true : (!sesna.InTransaction);
                sesnaType = typeof(DevExpress.Xpo.Session);
            }
            if (sesna is DevExpress.Xpo.UnitOfWork)
            {
                commituj       = false;
                unitOfWorkType = typeof(DevExpress.Xpo.UnitOfWork);
            }



            try
            {
                #region kontrola v pripade transakce - nejak musim vratit vysledek, k tomu se pouzije objekt rgp
                if (((sesna.InTransaction) && (rgp == null)) ||
                    ((sesna is DevExpress.Xpo.UnitOfWork) && (rgp == null)))
                {
                    string thisNamespace  = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace;
                    string thisMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                    throw new Exception(string.Format("Proměnná \"rgp\" ve volání metody {0}.{1} není inicializována.", thisNamespace, thisMethodName));
                }
                #endregion kontrola v pripade transakce

                #region kontrola ext.aplikace
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }
                P_EXTAPP EA = sesna.GetObjectByKey <P_EXTAPP>(EXT_APP_KOD);
                if (EA == null)
                {
                    throw new Exception("chybný kód externí aplikace");
                }

                if ((int)platce.RGP_POPLATEK == 0)
                {
                    throw new Exception("kód poplatku není zadán");
                }

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(platce.RGP_POPLATEK))
                {
                    throw new Exception("Ext. aplikace nemá oprávnění k typu pohledávky.");
                }
                #endregion kontrola ext.apliace

                #region kontrola prava nad poplatkem
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception e)
                {
                    throw new Exception("kontrola přístup. práv uživatele nad daty Příjmové agendy skončila chybou" + "\n" + e.Message);
                }

                //pro platce je povoleno vkladani
                if (!pnp.PravoExist((int)platce.RGP_POPLATEK, PravoNadPoplatkem.PrtabTable.RGP, PravoNadPoplatkem.SQLPerm.INSERT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění");
                }

                #endregion kontrola prava nad poplatkem

                #region test, zda adresa existuje v P_ADRESA_ROBRHS, dohledani ADR_ICO
                criteria = CriteriaOperator.Parse("ADR_ID = ?", platce.OSOBA_ID);
                XPCollection <P_ADRESA_ROBRHS> adr = new XPCollection <P_ADRESA_ROBRHS>(sesna, criteria);

                if (adr.Count != 1)
                {
                    Resp.result    = Result.ERROR;
                    Resp.ERRORMESS = String.Format(@"osoba ID={0} neexistuje", platce.OSOBA_ID);
                    return(Resp);
                }
                platce.RGP_ICO = adr[0].ADR_ICO;
                #endregion test, zda adresa existuje

                #region DOPLKOD - nastaveni pokud je null, TRIM, odstraneni nasobnych mezer
                if (platce.RGP_DOPLKOD == null)
                {
                    platce.RGP_DOPLKOD = " ";
                }
                else
                {
                    platce.RGP_DOPLKOD = platce.RGP_DOPLKOD.Trim();
                }

                if (platce.RGP_DOPLKOD == String.Empty)
                {
                    platce.RGP_DOPLKOD = " ";
                }
                while (platce.RGP_DOPLKOD.IndexOf("  ") >= 0)
                {
                    platce.RGP_DOPLKOD = platce.RGP_DOPLKOD.Replace("  ", " ");
                }
                #endregion DOPLKODU - nastaveni, pokud je null, TRIM, odstraneni nasobnych mezer

                #region test zda neexists v P_RGP
                DBUtil   dbu = new DBUtil(sesna);
                C_EVPOPL evp = dbu.GetEvpopl(platce.RGP_POPLATEK, platce.RGP_PER);
                criteria = CriteriaOperator.Parse("CompoundKey1.RGP_POPLATEK = ?" +
                                                  " and CompoundKey1.RGP_ICO = ?" +
                                                  " and CompoundKey1.RGP_DOPLKOD = ?",
                                                  platce.RGP_POPLATEK, platce.RGP_ICO, platce.RGP_DOPLKOD);
                XPCollection <P_RGP> plceExist = new XPCollection <P_RGP>(sesna, criteria);

                foreach (P_RGP item in plceExist)
                {
                    if (item.CompoundKey1.RGP_PER == platce.RGP_PER)
                    {
                        Resp.result = Result.OK;
                        Resp.status = Status.EXISTS;
                        Utils.copy.CopyDlePersistentAttr <PLATCE_RESP>(plceExist[0], Resp);
                        Resp.RGP_POPLATEK = plceExist[0].CompoundKey1.RGP_POPLATEK;
                        Resp.RGP_PER      = plceExist[0].CompoundKey1.RGP_PER;
                        Resp.RGP_DOPLKOD  = plceExist[0].CompoundKey1.RGP_DOPLKOD;
                        Resp.OSOBA_ID     = platce.OSOBA_ID;

                        Resp.RGP_ID = plceExist[0].RGP_ID;
                        Resp.VS     = DejVS(sesna, evp, plceExist[0].RGP_PORVS); //0.35
                        return(Resp);
                    }
                }

                if (plceExist.Count > 0)
                {
                    platce.RGP_PORVS = plceExist[0].RGP_PORVS;
                    Resp.VS          = DejVS(sesna, evp, plceExist[0].RGP_PORVS); //0.35
                }

                #endregion test zda exists v P_RGP

                nastavitKCdleDPH = nastavitKCdleDPH && platce.RADKY_DPH.Count > 0;
                if (((int)platce.RGP_KCROK == 0) && nastavitKCdleDPH && (platce.RADKY_DPH.Count > 0))
                {
                    platce.RGP_KCROK = 1;
                }

                #region vypocet splatky
                short   pocSplatek = 0; short periodicita = 0;
                decimal kcSplatka = 0, poslSplatka = 0;
                dbu.GetRgpSplatky(platce.RGP_KCROK, platce.RGP_PER, ref kcSplatka, ref poslSplatka, ref pocSplatek, ref periodicita);
                if (periodicita != 365)
                {
                    if ((int)platce.RGP_KCROK == 0)
                    {
                        throw new Exception(String.Format(@"částka není zadána (KC_ZAROK)"));
                    }

                    if (poslSplatka == 0)
                    {
                        throw new Exception(String.Format(@"Nelze určit výši splátky pro roční výši předpisu {0} Kč", platce.RGP_KCROK));
                    }
                }
                platce.RGP_KCSPLATKA   = kcSplatka;
                platce.RGP_POSLSPLATKA = poslSplatka;

                #endregion vypocet splatky

                #region vypocet splatek DPH, zaokrouhleni DPH
                List <DPHRozpis> dphSplatka     = new List <DPHRozpis>();
                List <DPHRozpis> dphPoslSplatka = new List <DPHRozpis>();
                if (platce.RADKY_DPH.Count > 0)
                {
                    //rozpocitam radky DPH na splatky a posledni splatku
                    DPHRozpis dpr;
                    foreach (RADEK_DPH item in platce.RADKY_DPH)
                    {
                        if (item.ZAKLAD == 0)
                        {
                            continue;
                        }
                        dpr = new DPHRozpis();
                        Utils.copy.CopyDlePersistentAttr(item, dpr);
                        dpr.ZAKLAD = item.ZAKLAD / pocSplatek;
                        dpr.DAN    = item.ZAKLAD * ((item.SAZBA ?? 0) / 100);
                        dpr.KC     = dpr.ZAKLAD + dpr.DAN;
                        dphSplatka.Add(dpr);

                        dpr = new DPHRozpis();
                        Utils.copy.CopyDlePersistentAttr(item, dpr);
                        decimal splatka = item.ZAKLAD / pocSplatek;
                        dpr.ZAKLAD = item.ZAKLAD - (splatka * (pocSplatek - 1));
                        dpr.DAN    = item.ZAKLAD * ((item.SAZBA ?? 0) / 100);
                        dpr.KC     = dpr.ZAKLAD + dpr.DAN;
                        dphPoslSplatka.Add(dpr);
                    }
                    DPHZaokrouhleni dphZaokr = new DPHZaokrouhleni();
                    dphZaokr.DPHZaokrouhli(dphSplatka, platce.RGP_POPLATEK, sesna);
                    dphZaokr.DPHZaokrouhli(dphPoslSplatka, platce.RGP_POPLATEK, sesna);

                    //sectu vsechny radky DPH a vytvorim do posledni splatky radek dorovnani
                    decimal sumDphRowsSplatka = 0, sumDphRowsPoslSplatka = 0, diff = 0;
                    foreach (DPHRozpis item in dphSplatka)
                    {
                        sumDphRowsSplatka += item.KC + item.ZAOKROUHLENI;
                    }
                    foreach (DPHRozpis item in dphPoslSplatka)
                    {
                        sumDphRowsPoslSplatka += item.KC + item.ZAOKROUHLENI;
                    }

                    //0.19
                    sumDphRowsSplatka     = Utils.Mathm.ZaokrouhliDouble(sumDphRowsSplatka, 2);
                    sumDphRowsPoslSplatka = Utils.Mathm.ZaokrouhliDouble(sumDphRowsPoslSplatka, 2);

                    platce.RGP_KCSPLATKA   = sumDphRowsSplatka;
                    platce.RGP_POSLSPLATKA = sumDphRowsPoslSplatka;

                    diff = 0;
                    if (!nastavitKCdleDPH)  //0.19 - do 0.19 nebyla podminka
                    {
                        diff = platce.RGP_KCROK - (sumDphRowsSplatka * (pocSplatek - 1)) - sumDphRowsPoslSplatka;
                    }
                    diff = Utils.Mathm.ZaokrouhliDouble(diff, 2);
                    if (diff != 0)
                    {
                        dpr          = new DPHRozpis();
                        dpr.KAT      = 'R';
                        dpr.ZAKLAD   = diff;
                        dpr.KC       = diff;
                        dpr.SAZBA    = null;
                        dpr.POZNAMKA = "dorovnání";
                        dphPoslSplatka.Add(dpr);
                        sumDphRowsPoslSplatka += diff;
                        platce.RGP_POSLSPLATKA = sumDphRowsPoslSplatka; //0.20
                    }

                    //0.9 kontrola splatky a posledni splatky
                    #region kontrola splatky, posledni splatky
                    if (nastavitKCdleDPH)
                    {
                        platce.RGP_KCSPLATKA   = sumDphRowsSplatka;
                        platce.RGP_POSLSPLATKA = sumDphRowsPoslSplatka;
                        platce.RGP_KCROK       = (sumDphRowsSplatka * (pocSplatek - 1)) + sumDphRowsPoslSplatka;
                    }
                    else
                    {
                        if (platce.RGP_KCROK != (sumDphRowsSplatka * (pocSplatek - 1)) + sumDphRowsPoslSplatka)
                        {
                            throw new Exception(string.Format("Nesouhlasí celková výše Kč ({0}) s rozpisem DPH ({1}).",
                                                              platce.RGP_KCROK, (sumDphRowsSplatka * (pocSplatek - 1)) + sumDphRowsPoslSplatka));
                        }

                        if (sumDphRowsSplatka != platce.RGP_KCSPLATKA)
                        {
                            throw new Exception(string.Format("Nesouhlasí výše splátky ({0}) s rozpisem DPH splátky ({1}).",
                                                              platce.RGP_KCSPLATKA, sumDphRowsSplatka));
                        }

                        if (sumDphRowsPoslSplatka != platce.RGP_POSLSPLATKA)
                        {
                            throw new Exception(string.Format("Nesouhlasí výše poslední splátky ({0}) s rozpisem DPH poslední splátky ({1}).",
                                                              platce.RGP_POSLSPLATKA, sumDphRowsPoslSplatka));
                        }
                    }
                    #endregion kontrola splatky, posledni splatky
                }
                #endregion vypocet splatek DPH, zaokrouhledni DPH

                #region perioda existuje pro poplatek

                if (evp == null)
                {
                    Resp.result = Result.ERROR;

                    Resp.ERRORMESS = "nepovolená kombinace poplatek / perioda";
                    return(Resp);
                }
                #endregion perioda existuje pro poplatek

                #region pouziti vkladaneho VS
                if (!string.IsNullOrEmpty(platce.VS))
                {
                    int porvs;
                    if (!korektniVS(sesna, platce, evp, out porvs))
                    {
                        Resp.result    = Result.ERROR; //0.16
                        Resp.ERRORMESS = string.Format("chybný VS {0}", platce.VS);
                        return(Resp);
                    }
                    platce.RGP_PORVS = porvs;
                }
                #endregion pouziti vkladaneho VS

                {
                    if ((sesna.GetType().BaseType == sesnaType) && (!sesna.InTransaction))
                    {
                        sesna.BeginTransaction();
                    }
                    try
                    {
                        XPCollection <P_RGP> plceInserted;
                        if (rgp == null)
                        {
                            rgp = new P_RGP(sesna);
                        }
                        Utils.copy.CopyDlePersistentAttr <P_RGP>(platce, rgp);

                        rgp.CompoundKey1.RGP_POPLATEK = platce.RGP_POPLATEK;
                        rgp.CompoundKey1.RGP_PER      = platce.RGP_PER;
                        rgp.CompoundKey1.RGP_DOPLKOD  = platce.RGP_DOPLKOD;
                        rgp.CompoundKey1.RGP_ICO      = platce.RGP_ICO;
                        rgp.Save();


                        //povkladam rozpis dane
                        foreach (DPHRozpis item in dphSplatka)
                        {
                            P_RGP_DPHSPL rd = new P_RGP_DPHSPL(sesna);
                            Utils.copy.CopyDlePersistentAttr <P_RGP_DPHSPL>(item, rd);
                            rgp.P_RGP_DPHSPL.Add(rd);
                            rd.Save();
                        }
                        foreach (DPHRozpis item in dphPoslSplatka)
                        {
                            P_RGP_DPHPSPL rd  = new P_RGP_DPHPSPL(sesna);
                            DPHRozpisTmp  tmp = new DPHRozpisTmp();
                            Utils.copy.CopyDlePersistentAttr <DPHRozpisTmp>(item, tmp);
                            Utils.copy.CopyDlePersistentAttr <P_RGP_DPHPSPL>(tmp, rd);
                            rgp.P_RGP_DPHPSPL.Add(rd);
                            rd.Save();
                        }

                        if (commituj && (sesna.InTransaction))
                        {
                            sesna.CommitTransaction();
                        }

                        Utils.copy.CopyDlePersistentAttr <PLATCE_RESP>(rgp, Resp);

                        Resp.result       = Result.OK;
                        Resp.status       = Status.INSERTED;
                        Resp.RGP_POPLATEK = rgp.CompoundKey1.RGP_POPLATEK;
                        Resp.RGP_PER      = rgp.CompoundKey1.RGP_PER;
                        Resp.RGP_DOPLKOD  = rgp.CompoundKey1.RGP_DOPLKOD;
                        Resp.OSOBA_ID     = platce.OSOBA_ID;
                        Resp.RGP_ID       = rgp.RGP_ID;
                        if (Resp.VS == null)
                        {
                            Resp.VS = DejVS(sesna, evp, plceExist[0].RGP_PORVS); //0.35
                        }
                        switch (rgp.RGP_EXPUCTO)
                        {
                        case "ANO":
                            Resp.EXPORTOVAT_DO_FINANCI = SouhlasAnoNe.ANO;
                            break;

                        default:
                            Resp.EXPORTOVAT_DO_FINANCI = SouhlasAnoNe.NE;
                            break;
                        }

                        return(Resp);
                    }
                    catch (Exception exc)
                    {
                        if (sesna.InTransaction)
                        {
                            sesna.RollbackTransaction();
                        }

                        Resp.result = Result.ERROR;

                        if (exc.InnerException == null)
                        {
                            Resp.ERRORMESS = exc.Message;
                        }
                        else
                        {
                            Resp.ERRORMESS = exc.InnerException.Message;
                        }
                        return(Resp);

                        /*
                         * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                         */
                    }
                }  //using (MyUnitOfWork
            }

            catch (Exception exc)
            {
                Resp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    Resp.ERRORMESS = exc.Message;
                }
                else
                {
                    Resp.ERRORMESS = exc.InnerException.Message;
                }

                Util.Util.WriteLog(Resp.ERRORMESS + exc.StackTrace);

                return(Resp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }
        }
        /// <summary>
        /// popis vazby je v PoplWS- Výměna dat za komOdpad.*
        /// metoda je urcena pro data představující slevy. K exportu je urcena  je určena metoda DejPlatceZaKO.
        /// Vyexportovanou davku je potreba do 30 dnu naimportovat, jinak je původni export odstranen a je potreba
        /// export provést znovu.
        ///
        /// uziv. musi mit select, insert, update, delete on P_ODPADY_EULEVY
        ///
        /// </summary>
        /// <param name="sesna"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <param name="inParams"></param>
        /// pokud je inParams.VS ="*" jsou vráceni všichni poplatníci
        /// <returns></returns>
        public POPLATNIK_SLEVA_RESP PlatceSlevaKO(Session sesna, int EXT_APP_KOD, POPLATNIK_SLEVA inParams)
        {
            POPLATNIK_SLEVA_RESP Resp = new POPLATNIK_SLEVA_RESP();

            Resp.status = Status.ERROR;
            Resp.result = Result.ERROR;

            sesna.DropIdentityMap();

            string  poplKO = string.Empty;
            decimal popl;

            try
            {
                #region kontrola vyberovych parametru

                if (string.IsNullOrWhiteSpace(inParams.PERIODA))
                {
                    throw new Exception("Výběrová podmínka PERIODA není zadána.");
                }
                if (string.IsNullOrWhiteSpace(inParams.DAVKA_ID))
                {
                    throw new Exception("Výběrová podmínka DAVKA_ID není zadána.");
                }
                if (inParams.POPLATEK == null)
                {
                    throw new Exception("Výběrová podmínka POPLATEK není zadán.");
                }

                #endregion kontrola vyberovych parametru


                #region kontrola prava na poplatek
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }

                popl = decimal.ToInt16(inParams.POPLATEK);
                if (!kp.existPravoNadPoplatkem(popl))
                { //throw new Exception("k typu pohledávky neexistuje oprávnění");
                    throw new Exception("Ext. aplikace nemá oprávnění k typu pohledávky.");
                }
                #endregion kontrola prava na poplatek

                #region kontrola prava na vkladani predpisu
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístup. práv uživatele nad daty Příjmové agendy skončila chybou");
                }

                //pro platce je povoleno prohlizeni
                if (!pnp.PravoExist(Decimal.ToInt16(popl), PravoNadPoplatkem.PrtabTable.PRPL, PravoNadPoplatkem.SQLPerm.INSERT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro vkládání předpisů.");
                }

                #endregion kontrola prava na vkladani predpisu

                DBUtil dbu        = new DBUtil(sesna);
                bool   jeToPoplKO = dbu.IsPoplKO(inParams.POPLATEK, out poplKO);
                #region pouze poplatek za KO
                if (!jeToPoplKO)
                {
                    throw new Exception(string.Format("Kontrola přístup. práv skončila chybou - ({0}) nejedná se o poplatek za kom. odpad.", inParams.POPLATEK));
                }
                #endregion pouze poplatek za KO

                #region perioda opdovida spravnemu poplatku
                string poplDlePer = dbu.getPoplzPerKod(inParams.PERIODA, poplKO);
                if (poplDlePer != popl.ToString())
                {
                    throw new Exception(string.Format("Kontrola přístup. práv skončila chybou. \n Perioda \"{0}\" neodpovídá poplatku \"{1}\".", inParams.PERIODA, popl));
                }

                #endregion perioda opdovida spravnemu poplatku

                #region davka je max. 30 dni od exportu
                P_ODPADY_EULEVY ulevy = sesna.FindObject <P_ODPADY_EULEVY>(CriteriaOperator.Parse("DAVKA = ? and ZPRAC = 'E' ", inParams.DAVKA_ID));
                if (ulevy == null)
                {
                    throw new Exception(string.Format("Exportovaná dávka \"{0}\" není platnou dávkou  pro import.", inParams.DAVKA_ID));
                }

                int stariDat = int.MinValue;
                int.TryParse(System.Web.Configuration.WebConfigurationManager.AppSettings["KOExpDatExpiraceDni"], out stariDat); //pri neuspechu je stariDat=0

                DBValue dbv = DBValue.Instance(sesna);
                if (ulevy.ENTRYDATE <= dbv.DBSysDate.AddDays(stariDat * -1))
                {
                    throw new Exception(string.Format("Importovaná data jsou starší než povolených {0} dní od data exportu.", stariDat));
                }
                #endregion davka je max. 30 dni od exportu


                if (inParams.SLEVA != null && inParams.SLEVA.Count() > 0)
                {
                    if (!UtilDataKO.smazStarouDavkuSlev(sesna, EXT_APP_KOD, inParams.DAVKA_ID, inParams.PERIODA, ref Resp))
                    {
                        return(Resp);
                    }

                    Resp.result = Result.OK;
                    Resp.status = Status.EXISTS;
                    UtilDataKO.ulozSlevyDoDB(sesna, EXT_APP_KOD, inParams, ref Resp);
                }
                else
                {
                    Resp.result    = Result.ERROR;
                    Resp.status    = Status.NOTEXISTS;
                    Resp.ERRORMESS = "Pro import slev nebyla zaslána žádná sleva.";
                }

                return(Resp);
            }
            catch (Exception exc)
            {
                Resp.result = Result.ERROR;
                Resp.status = Status.ERROR;

                if (exc.InnerException == null)
                {
                    Resp.ERRORMESS = exc.Message;
                }
                else
                {
                    Resp.ERRORMESS = exc.InnerException.Message;
                }
                //
                //  throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                //
                return(Resp);
            }
        }
        /// </summary>
        /// <param name="sesna"></param>
        /// <param name="EXT_APP_KOD"></param>
        /// <param name="inParams"></param>
        /// pokud neni inParams.VS uvedeny (string.IsNullOrEmpty()) jsou vráceni všichni poplatníci
        /// <returns></returns>
        public PLATCI_RESP DejPlatceKO(Session sesna, int EXT_APP_KOD, GET_PLATCE_PARAMS inParams)
        {
            PLATCI_RESP Resp = new PLATCI_RESP();

            Resp.status = Status.ERROR;
            Resp.result = Result.ERROR;

            sesna.DropIdentityMap();

            int           popl;
            StringBuilder cmd = new StringBuilder();

            string VSlog = null;

            try
            {
                #region kontrola vyberovych parametru
                if (string.IsNullOrWhiteSpace(inParams.PERIODA))
                {
                    throw new Exception("Výběrová podmínka PERIODA není zadána.");
                }

                popl = decimal.ToInt16(inParams.POPLATEK);

                #endregion kontrola vyberovych parametru


                #region kontrola prava aplikace na poplatek
                if (EXT_APP_KOD == null)
                {
                    throw new Exception("kód externí aplikace není zadán");
                }

                KONTROLA_POPLATKU kp = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace");
                }
                if (!kp.existPravoNadPoplatkem(popl))
                {
                    throw new Exception("Ext. aplikace nemá oprávnění k typu pohledávky.");
                }
                #endregion kontrola prava aplikace na poplatek

                #region kontrola prava na cteni platce
                PravoNadPoplatkem pnp = null;
                try
                {
                    pnp = new PravoNadPoplatkem(sesna);
                }
                catch (Exception)
                {
                    throw new Exception("kontrola přístup. práv uživatele nad daty Příjmové agendy skončila chybou");
                }

                if (!pnp.PravoExist(popl, PravoNadPoplatkem.PrtabTable.RGP, PravoNadPoplatkem.SQLPerm.SELECT))
                {
                    throw new Exception("PoplWS - nedostatečná oprávnění pro čtení plátce.");
                }

                #endregion kontrola prava na cteni platce


                DBUtil dbu = new DBUtil(sesna);
                #region perioda s rocni periodicitou
                C_EVPOPL evp = dbu.GetEvpopl(popl, inParams.PERIODA);
                if (evp.CompoundKey1.EVPOPL_PER.PERIODA_POC != 1)
                {
                    throw new Exception(string.Format("Kontrola přístup. práv skončila chybou. \n Perioda \"{0}\" musí mít periodicitu = \"1\".", inParams.PERIODA));
                }
                #endregion perioda s rocni periodicitou

                string poplKO;
                bool   jeToPoplKO = dbu.IsPoplKO(inParams.POPLATEK, out poplKO);

                #region pouze poplatek za KO
                if (!jeToPoplKO)
                {
                    throw new Exception(string.Format("Kontrola přístup. práv skončila chybou - ({0}) nejedná se o poplatek za kom. odpad.", inParams.POPLATEK));
                }

                #endregion pouze poplatek za KO

                #region perioda opdovida spravnemu poplatku
                string poplDlePer = dbu.getPoplzPerKod(inParams.PERIODA, poplKO);
                if (poplDlePer != popl.ToString())
                {
                    throw new Exception(string.Format("Kontrola přístup. práv skončila chybou. \n Perioda \"{0}\" neodpovídá poplatku \"{1}\".", inParams.PERIODA, popl));
                }

                #endregion perioda opdovida spravnemu poplatku


#if !DEBUG   //region pouze pro periodicitu s jednou periodou za rok
                #region pouze pro periodicitu s jednou periodou za rok
                C_PERIODA per = sesna.FindObject <C_PERIODA>(CriteriaOperator.Parse("PERIODA_PERIODA = ?", inParams.PERIODA));
                try
                {
                    if ((per != null) && (per.PERIODA_POC != 1))
                    {
                        throw new Exception(string.Format("Data za kom. odpad lze získat pouze za periodu s roční periodicitou."));
                    }
                }
                catch (Exception e)
                {
                    throw new Exception(string.Format("Kontrola periodicity. \n {0}", e.Message));
                }

                #endregion pouze pro periodicitu s jednou periodou za rok
#endif //DEBUG

                PLATCE2 platce = null;


                bool   dataSmazana = false;
                string message;
                UtilDataKO.smazStarouDavku(sesna, EXT_APP_KOD, inParams.PERIODA, out dataSmazana, ref Resp);
                if (!dataSmazana)
                {
                    return(Resp);
                }


                DBVal         dbv  = new DBVal(sesna);
                IDBValFactory idbv = dbv.CreateDBV();

                cmd.Append("select distinct bl.LIKEVS_VS POPL_VS, b.ADR_NAZEV1 POPL_NAZEV, al.LIKEVS_VS ZAST_VS, a.ADR_NAZEV1 ZAST_NAZEV,");
                cmd.Append("  a.ADR_DATNAR ZAST_DATNAR, b.ADR_DATNAR POPL_DATNAR, bl.LIKEVS_POHL, a.ADR_ICZUJ_NAZEV,");
                if (idbv.Database == typeof(MSSQL))
                {
                    cmd.Append("     dbo.P_ADRESA_ULICE(a.ADR_KODCOB_NAZEV, a.ADR_KODUL_NAZEV, a.ADR_CIS_DOMU, a.ADR_CIS_OR, a.ADR_ZNAK_CO) ZAST_ADR,");
                    cmd.Append("     dbo.P_ADRESA_ULICE(b.ADR_KODCOB_NAZEV, b.ADR_KODUL_NAZEV, b.ADR_CIS_DOMU, b.ADR_CIS_OR, b.ADR_ZNAK_CO) POPL_ADR,");
                }
                else
                {
                    cmd.Append("     P_ADRESA_ULICE(a.ADR_KODCOB_NAZEV, a.ADR_KODUL_NAZEV, a.ADR_CIS_DOMU, a.ADR_CIS_OR, a.ADR_ZNAK_CO) ZAST_ADR,");
                    cmd.Append("     P_ADRESA_ULICE(b.ADR_KODCOB_NAZEV, b.ADR_KODUL_NAZEV, b.ADR_CIS_DOMU, b.ADR_CIS_OR, b.ADR_ZNAK_CO) POPL_ADR,");
                }
                cmd.Append(" RGP_KCROK POPL_KC, RGP_POPLATEK, RGP_PER ");
                cmd.Append("from P_ADRESA_ROBRHS a, P_LIKEVS al, P_ODPADY_MAJITEL, P_ODPADY_BYDLIC,");
                cmd.Append("  P_ADRESA_ROBRHS b, P_LIKEVS bl, P_RGP");
                cmd.Append(" where a.ADR_ICO = al.LIKEVS_ICO");
                //cmd.Append("	  and al.LIKEVS_POPLATEK = (select KONF_POPLATEK from P_ODPADY_KONFIG)");
                cmd.Append("	  and al.LIKEVS_POPLATEK = "+ popl.ToString());
                cmd.Append("	  and al.LIKEVS_ICO = MAJITEL_ICO");
                cmd.Append("	  and MAJITEL_OBJEKT_BYT = BYDLICI_OBJEKT_BYT");
                cmd.Append("	  and BYDLICI_OBJEKT_BYT > -1");
                cmd.Append("	  and BYDLICI_DATUM_OD < "+ idbv.getParamText("KONEC_ROKU"));
                cmd.Append("      and (BYDLICI_DATUM_DO >= " + idbv.getParamText("ZACATEK_ROKU") + " or BYDLICI_DATUM_DO is null)");
                cmd.Append("	  and BYDLICI_OSVOBOZEN = 'N' ");
                cmd.Append("	  and b.ADR_ICO = bl.LIKEVS_ICO");
                //cmd.Append("	  and bl.LIKEVS_POPLATEK = (select KONF_POPLATEK from P_ODPADY_KONFIG)");
                cmd.Append("	  and bl.LIKEVS_POPLATEK = "+ popl.ToString());
                cmd.Append("	  and bl.LIKEVS_POPLATEK = RGP_POPLATEK");
                cmd.Append("	  and bl.LIKEVS_PORVS = RGP_PORVS");
                cmd.Append("	  and RGP_KCROK > 0");
                cmd.Append("	  and bl.LIKEVS_ICO = BYDLICI_ICO");
                cmd.Append("	  and RGP_PER = MAJITEL_PERIODA");
                cmd.Append("	  and BYDLICI_PERIODA = MAJITEL_PERIODA");
                if (!string.IsNullOrEmpty(inParams.VS) && (inParams.VS != "*"))
                {
                    cmd.Append("	  and bl.LIKEVS_VS = '"+ inParams.VS + "'");
                }
                cmd.Append("      and BYDLICI_PERIODA = '" + inParams.PERIODA + "'");
                cmd.Append("UNION ");
                cmd.Append("select distinct al.LIKEVS_VS POPL_VS, a.ADR_NAZEV1 POPL_NAZEV, al.LIKEVS_VS ZAST_VS, a.ADR_NAZEV1 ZAST_NAZEV,");
                cmd.Append("  a.ADR_DATNAR ZAST_DATNAR, a.ADR_DATNAR POPL_DATNAR, al.LIKEVS_POHL, a.ADR_ICZUJ_NAZEV,");
                if (idbv.Database == typeof(MSSQL))
                {
                    cmd.Append("     dbo.P_ADRESA_ULICE(a.ADR_KODCOB_NAZEV, a.ADR_KODUL_NAZEV, a.ADR_CIS_DOMU, a.ADR_CIS_OR, a.ADR_ZNAK_CO) ZAST_ADR,");
                    cmd.Append("     dbo.P_ADRESA_ULICE(a.ADR_KODCOB_NAZEV, a.ADR_KODUL_NAZEV, a.ADR_CIS_DOMU, a.ADR_CIS_OR, a.ADR_ZNAK_CO) POPL_ADR,");
                }
                else
                {
                    cmd.Append("     P_ADRESA_ULICE(a.ADR_KODCOB_NAZEV, a.ADR_KODUL_NAZEV, a.ADR_CIS_DOMU, a.ADR_CIS_OR, a.ADR_ZNAK_CO) ZAST_ADR,");
                    cmd.Append("     P_ADRESA_ULICE(a.ADR_KODCOB_NAZEV, a.ADR_KODUL_NAZEV, a.ADR_CIS_DOMU, a.ADR_CIS_OR, a.ADR_ZNAK_CO) POPL_ADR,");
                }
                cmd.Append(" RGP_KCROK POPL_KC, RGP_POPLATEK, RGP_PER ");
                cmd.Append("from P_ADRESA_ROBRHS a, P_LIKEVS al, P_ODPADY_BYDLIC, P_RGP");
                cmd.Append("   where a.ADR_ICO = al.LIKEVS_ICO");
                //cmd.Append("	  and al.LIKEVS_POPLATEK = (select KONF_POPLATEK from P_ODPADY_KONFIG)");
                cmd.Append("	  and al.LIKEVS_POPLATEK = "+ popl.ToString());
                cmd.Append("	  and al.LIKEVS_ICO = BYDLICI_ICO");
                cmd.Append("	  and BYDLICI_OBJEKT_BYT = -1 ");
                cmd.Append("	  and BYDLICI_DATUM_OD < "+ idbv.getParamText("KONEC_ROKU"));
                cmd.Append("      and (BYDLICI_DATUM_DO >= " + idbv.getParamText("ZACATEK_ROKU") + " or BYDLICI_DATUM_DO is null)");
                cmd.Append("	  and BYDLICI_OSVOBOZEN = 'N' ");
                cmd.Append("      and BYDLICI_PERIODA = '" + inParams.PERIODA + "'");
                cmd.Append("	  and al.LIKEVS_POPLATEK = RGP_POPLATEK");
                cmd.Append("	  and al.LIKEVS_PORVS = RGP_PORVS");
                cmd.Append("	  and RGP_PER = BYDLICI_PERIODA");
                if (!string.IsNullOrEmpty(inParams.VS) && (inParams.VS != "*"))
                {
                    cmd.Append("	  and al.LIKEVS_VS = '"+ inParams.VS + "'");
                }
                cmd.Append("	  and RGP_KCROK > 0");
                cmd.Append(" order by 3");

                List <string> paramNames = new List <string>();
                paramNames.Add("ZACATEK_ROKU");
                paramNames.Add("KONEC_ROKU");

                int           rok         = Convert.ToInt16(dbv.DBSysDate.ToString("yyyy"));
                DateTime      zacRoku     = new DateTime(rok, 1, 31).Date;
                DateTime      konRoku     = new DateTime(rok, 12, 31).Date;
                List <object> paramValues = new List <object>();
                paramValues.Add(zacRoku);     //ZACATEK_ROKU
                paramValues.Add(konRoku);     //KONEC_ROKU

                SelectedData resultSet = sesna.ExecuteQueryWithMetadata(cmd.ToString(), paramNames.ToArray(), paramValues.ToArray());

                Resp.RGP_POPLATEK = inParams.POPLATEK;
                Resp.RGP_PER      = inParams.PERIODA;
                int stariDat = int.MinValue;
                int.TryParse(System.Web.Configuration.WebConfigurationManager.AppSettings["KOExpDatExpiraceDni"], out stariDat);
                Resp.PLATNOST_DNI = stariDat;
                foreach (var row in resultSet.ResultSet[1].Rows)
                {
                    platce           = new PLATCE2();
                    platce.POPLATNIK = new POPLATNIK();
                    platce.ZASTUPCE  = new ZASTUPCE();

                    VSlog = (string)row.ValByName(resultSet, "POPL_VS");
                    if (row.ValByName(resultSet, "POPL_KC") != null)
                    {
                        platce.POPLATNIK.RGP_KCROK = Convert.ToDecimal(row.ValByName(resultSet, "POPL_KC"));
                    }
                    if (row.ValByName(resultSet, "POPL_DATNAR") != null)
                    {
                        platce.POPLATNIK.ROK_NAROZENI = Convert.ToInt16(((DateTime)row.ValByName(resultSet, "POPL_DATNAR")).ToString("yyyy"));
                    }
                    platce.POPLATNIK.VS     = (string)row.ValByName(resultSet, "POPL_VS");
                    platce.POPLATNIK.NAZEV  = (string)row.ValByName(resultSet, "POPL_NAZEV");
                    platce.POPLATNIK.ADRESA = (string)row.ValByName(resultSet, "POPL_ADR");
                    if (!string.IsNullOrEmpty((string)row.ValByName(resultSet, "ADR_ICZUJ_NAZEV")))
                    {
                        platce.POPLATNIK.ADRESA = platce.POPLATNIK.ADRESA + ", " + (string)row.ValByName(resultSet, "ADR_ICZUJ_NAZEV");
                    }
                    platce.POPLATNIK.LIKEVS_DLUH = Convert.ToInt16(row.ValByName(resultSet, "LIKEVS_POHL")) > 0 ? 1 : 0;

                    if (row.ValByName(resultSet, "ZAST_DATNAR") != null)
                    {
                        platce.ZASTUPCE.ROK_NAROZENI = Convert.ToInt16(((DateTime)row.ValByName(resultSet, "ZAST_DATNAR")).ToString("yyyy"));
                    }
                    platce.ZASTUPCE.VS       = (string)row.ValByName(resultSet, "ZAST_VS");
                    platce.ZASTUPCE.NAZEV    = (string)row.ValByName(resultSet, "ZAST_NAZEV");
                    platce.ZASTUPCE.ADRESA   = (string)row.ValByName(resultSet, "ZAST_ADR");
                    platce.POPLATNIK.PERIODA = (string)row.ValByName(resultSet, "RGP_PER");
                    platce.ZASTUPCE.PERIODA  = platce.POPLATNIK.PERIODA;

                    Resp.PLATCI.Add(platce);
                }



                Resp.result = Result.OK;
                if ((platce != null) && (Resp.PLATCI.Count() > 0))
                {
                    Resp.status = Status.EXISTS;
                    UtilDataKO.ulozDavkuDoDB(sesna, EXT_APP_KOD, ref Resp);
                }
                else
                {
                    Resp.status = Status.NOTEXISTS;
                }

                return(Resp);
            }
            catch (Exception exc)
            {
                Resp.result = Result.ERROR;
                Resp.status = Status.ERROR;

                if (exc.InnerException == null)
                {
                    Resp.ERRORMESS = VSlog + "\n" + exc.Message;
                }
                else
                {
                    Resp.ERRORMESS = VSlog + "\n" + exc.InnerException.Message;
                }

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
#if DEBUG
                if (cmd.Capacity > 0)
                {
                    Resp.ERRORMESS = Resp.ERRORMESS + "\n" + cmd.ToString();
                    //throw new Exception("SQL uloženo do Clipboardu. " + cmd.ToString());
                }
#endif
                return(Resp);
            }
        }
        public POPLATKY_RESP dejSeznam()
        {
            POPLATKY_RESP     poplResp = new POPLATKY_RESP();
            KONTROLA_POPLATKU kp       = new KONTROLA_POPLATKU(sesna, EXT_APP_KOD);

            try
            {
                if (!kp.EAexist())
                {
                    throw new Exception("chybný kód externí aplikace / neexistuji poplatky s povoleným přístupem");
                }
            }
            catch (Exception exc)
            {
                poplResp.result = Result.ERROR;

                if (exc.InnerException == null)
                {
                    poplResp.ERRORMESS = exc.Message;
                }
                else
                {
                    poplResp.ERRORMESS = exc.InnerException.Message;
                }
                return(poplResp);

                /*
                 * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message));
                 */
            }

            XPCollection <C_NAZPOPL> xpoPoplatky = new XPCollection <C_NAZPOPL>(sesna);

            foreach (var item in xpoPoplatky)
            {
                if (!kp.existPravoNadPoplatkem(item.NAZPOPL_POPLATEK))
                {
                    continue;
                }

                POPLATEK popl = new POPLATEK();
                popl.KOD     = (int)item.NAZPOPL_POPLATEK;
                popl.NAZEV   = item.C_NAZPOPL_NAZEV;
                popl.PERIODA = new List <PERIODA>();

                foreach (var itemPer in item.C_EVPOPL)
                {
                    if ((itemPer.EVPOPL_FROMDATE <= dbValue.DBSysDate) &&
                        (itemPer.EVPOPL_TODATE >= dbValue.DBSysDate))
                    {
                        PERIODA perioda = new PERIODA();
                        perioda.KOD         = itemPer.CompoundKey1.EVPOPL_PER.PERIODA_PERIODA;
                        perioda.NAZEV       = itemPer.CompoundKey1.EVPOPL_PER.PERIODA_NAZEV;
                        perioda.PERIODICITA = (int)itemPer.CompoundKey1.EVPOPL_PER.PERIODA_POC;
                        popl.PERIODA.Add(perioda);
                    }
                }

                poplResp.poplatky.Add(popl);
            }

            poplResp.result = Result.OK;
            poplResp.status = Status.EXISTS;
            return(poplResp);
        }