/// <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); }
/// <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); } }
/// <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> /// 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); }