Пример #1
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);
        }
        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));
                 */
            }
        }