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)); */ } }
public OSOBA_RESP InsertOsobu(Session session, int EXT_APP_KOD, OSOBA osoba) { Session sesna = session; OSOBA_RESP osobaResp = new OSOBA_RESP(); osoba.ADR_EA = EXT_APP_KOD; try { #region test vyplneni vstupnich hodnot if (osoba.RC_IC != null) { osoba.RC_IC = osoba.RC_IC.Trim(); } if (osoba.JMENO != null) { osoba.JMENO = osoba.JMENO.Trim(); } if (osoba.PRIJMENI != null) { osoba.PRIJMENI = osoba.PRIJMENI.Trim(); } if (string.IsNullOrEmpty(osoba.RC_IC)) // na string.IsNullOrWhiteSpace(osoba.RC_IC) testovat nemusim, //protoze je vyse Trimovan { P_NASTAVENI nast = sesna.GetObjectByKey <P_NASTAVENI>("ICOP"); if ((nast == null) || ((nast != null) && (nast.HODNOTA == "1"))) { osobaResp.result = Result.ERROR; osobaResp.ERRORMESS = "IČ/RČ musí být vyplněno"; return(osobaResp); } } 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 (((osoba.TYP == TypOsoby.F) || (osoba.TYP == TypOsoby.C)) && (string.IsNullOrEmpty(osoba.RC_IC)) && (string.IsNullOrEmpty(osoba.JMENO) || string.IsNullOrEmpty(osoba.PRIJMENI) || (!osoba.DATUM_NAROZENI.HasValue)) ) { throw new Exception("u fyzické osoby musí být vyplněno jméno, příjmení a datum narození"); } if (!string.IsNullOrEmpty(osoba.STAT)) { P_STAT stat = sesna.FindObject <P_STAT>(CriteriaOperator.Parse("Upper(STAT_NAZEV) = ?", osoba.STAT.ToUpper())); if (stat == null) { stat = sesna.FindObject <P_STAT>(CriteriaOperator.Parse("STAT_KOD = ?", osoba.STAT.ToUpper())); } if (stat == null) { throw new Exception(string.Format("stát \"{0}\" není uveden v číselníku států", osoba.STAT)); } else { osoba.STAT = stat.STAT_KOD; } } else { osoba.STAT = null; } if (osoba.ZAHRANICNI_ADRESA != null) { if ((osoba.TYP != TypOsoby.C) && (osoba.TYP != TypOsoby.P)) { throw new Exception(string.Format("Zahraniční adresu lze uvádět pouze pro cizince a právnické osoby.")); } if (String.IsNullOrEmpty(osoba.ZAHRANICNI_ADRESA.STAT)) { throw new Exception(string.Format("U zahraniční adresy musí být uveden stát.")); } if (!String.IsNullOrEmpty(osoba.OBEC_NAZEV) || !String.IsNullOrEmpty(osoba.ULICE_NAZEV) || (osoba.CIS_DOMU != null) || (osoba.CIS_OR != null) || !String.IsNullOrEmpty(osoba.PSC) || !String.IsNullOrEmpty(osoba.STAT) ) { throw new Exception(string.Format("U zahraniční adresy nelze současně uvádět trvalou adresu.")); } P_STAT stat = sesna.FindObject <P_STAT>(CriteriaOperator.Parse("Upper(STAT_NAZEV) = ?", osoba.ZAHRANICNI_ADRESA.STAT.ToUpper())); if (stat == null) { stat = sesna.FindObject <P_STAT>(CriteriaOperator.Parse("STAT_KOD = ?", osoba.ZAHRANICNI_ADRESA.STAT.ToUpper())); } if (stat == null) { throw new Exception(string.Format("Stát \"{0}\" není uveden v číselníku států.", osoba.ZAHRANICNI_ADRESA.STAT)); } } #endregion test vyplneni vstupnich hodnot using (UnitOfWork uow = new UnitOfWork(sesna.DataLayer)) { //dotaz, zda j*z neexistuje if (!string.IsNullOrEmpty(osoba.RC_IC)) { CriteriaOperator criteria = CriteriaOperator.Parse("(ADR_SICO = ? or ADR_ICO = ?)", osoba.RC_IC, osoba.RC_IC); XPCollection <P_ADRESA_ROBRHS> adrExist = new XPCollection <P_ADRESA_ROBRHS>(sesna, criteria); if (adrExist.Count > 0) { #region adresa existuje - muze existovat vice osob se stejnym ADR_SICO #region adresa je vybirana v poradi P_ADRESA_ROBRHS osobaExist = null; int isico = -1; int iico = -1; for (int i = 1; i <= 4; i++) { if (i == 1) { adrExist.Filter = CriteriaOperator.Parse("ADR_EA = ? and ADR_ADRPOPL > -1", EXT_APP_KOD); } if (i == 2) { adrExist.Filter = CriteriaOperator.Parse("ADR_ADRPOPL > -1"); } if (i == 3) { adrExist.Filter = CriteriaOperator.Parse("ADR_EA = ?", EXT_APP_KOD); } if (i == 4) { adrExist.Filter = null; } if (adrExist.Count > 0) { if (adrExist.First(P_ADRESA_ROBRHS => P_ADRESA_ROBRHS.ADR_SICO == osoba.RC_IC).ADR_SICO != null) { isico = 0; } if (adrExist.First(P_ADRESA_ROBRHS => P_ADRESA_ROBRHS.ADR_ICO == osoba.RC_IC).ADR_ICO != null) { iico = 0; } } if (isico > -1 || iico > -1) { break; } } #endregion adresa je vybrana v poradi if (isico > -1 || iico > -1) { osobaExist = isico >= 0 ? adrExist[isico] : adrExist[iico]; if ((adrExist[adrExist.IndexOf(osobaExist)].ADR_SICO == null) && (isico == -1) && (iico >= 0)) { adrExist[iico].ADR_SICO = osoba.RC_IC; adrExist[iico].Save(); } osobaResp.result = Result.OK; osobaResp.status = Status.EXISTS; Utils.copy.CopyDlePersistentAttr <OSOBA_RESP>(osobaExist, osobaResp); Utils.copy.CopyDlePersistentAttr <KONTAKTNI_ADRESA>(osobaExist, osobaResp.KONTAKTNI_ADRESA); osobaResp.RC_IC = osobaExist.ADR_SICO; //0.8 #endregion adresa existuje return(osobaResp); } } } P_ADRESA_ROBRHS adr = new P_ADRESA_ROBRHS(uow); Utils.copy.CopyDlePersistentAttr <P_ADRESA_ROBRHS>(osoba, adr); Utils.copy.CopyDlePersistentAttr <P_ADRESA_ROBRHS>(osoba.KONTAKTNI_ADRESA, adr); if (osoba.ZAHRANICNI_ADRESA != null) { Utils.copy.CopyDlePersistentAttr <P_ADRESA_ROBRHS>(osoba.ZAHRANICNI_ADRESA, adr); } try { uow.CommitChanges(); CriteriaOperator criteria = CriteriaOperator.Parse("ADR_ICO = ?", adr.ADR_ICO); XPCollection <P_ADRESA_ROBRHS> adrInserted = new XPCollection <P_ADRESA_ROBRHS>(sesna, criteria); Utils.copy.CopyDlePersistentAttr <OSOBA_RESP>(adrInserted[0], osobaResp); Utils.copy.CopyDlePersistentAttr <KONTAKTNI_ADRESA>(adrInserted[0], osobaResp.KONTAKTNI_ADRESA); osobaResp.result = Result.OK; osobaResp.status = Status.INSERTED; osobaResp.ADR_ID = adrInserted[0].ADR_ID; osobaResp.RC_IC = adrInserted[0].ADR_SICO; //0.8 return(osobaResp); } catch (Exception exc) { uow.RollbackTransaction(); osobaResp.result = Result.ERROR; if (exc.InnerException == null) { osobaResp.ERRORMESS = exc.Message; } else { osobaResp.ERRORMESS = exc.InnerException.Message; } return(osobaResp); /* * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message)); */ } } //uow } catch (Exception exc) { osobaResp.result = Result.ERROR; if (exc.InnerException == null) { osobaResp.ERRORMESS = exc.Message; } else { osobaResp.ERRORMESS = exc.InnerException.Message; } Util.Util.WriteLog(osobaResp.ERRORMESS + "\n" + exc.StackTrace); return(osobaResp); /* * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message)); */ } }
public STORNO_RESP StornoPredpis(Session session, int EXT_APP_KOD, int PREDPIS_ID, string POZNAMKA) { sesna = session; Resp = new STORNO_RESP(); Resp.STORNO_ID = -1; CriteriaOperator criteria; sesna.DropIdentityMap(); #region test vyplneni vstupnich hodnot, kontroly try { P_PRPL predp = null; ValidateInputParam(EXT_APP_KOD, PREDPIS_ID, ref predp); if (predp == null) { Resp.result = Result.ERROR; Resp.status = Status.NOTEXISTS; Resp.ERRORMESS = "Stornovaný předpis neexistuje."; return(Resp); } string[] sRecord = new string[] { " ", "", "P" }; if ((!sRecord.Contains(predp.PRPL_RECORD))) { Resp.result = Result.ERROR; Resp.status = Status.EXISTS; Resp.ERRORMESS = "Předpis neumožňuje jeho stornování."; return(Resp); } if (predp.PRPL_PR > 0) { Resp.result = Result.ERROR; Resp.status = Status.EXISTS; Resp.ERRORMESS = "Předpis je vymáhán, nelze jej stornovat."; return(Resp); } #endregion test vyplneni vstupnich hodnot #region vzdy odparuji vse od predpisu XPCollection <P_PAROVANI> odparujPredpisy = new XPCollection <P_PAROVANI>(sesna, CriteriaOperator.Parse("((CompoundKey1.PAR_PRPL_ID = ?) or (CompoundKey1.PAR_PLATBA_ID = ?) )", PREDPIS_ID, PREDPIS_ID * -1)); decimal dluh = (predp.PRPL_PREDPIS + predp.PRPL_SANKCE) - (predp.PRPL_SPAROVANO * (Math.Abs(predp.PRPL_PREDPIS + predp.PRPL_SANKCE) / (predp.PRPL_PREDPIS + predp.PRPL_SANKCE))); decimal odparKc = Math.Abs(dluh); if (predp.PRPL_SANKCEDO == DateTime.MinValue) { foreach (var item in odparujPredpisy) { odparKc += item.PAR_SPARKC; } } sesna.Delete(odparujPredpisy); sesna.Save(odparujPredpisy); #endregion vzdy odparuji vse od predpisu DBValue dbv = DBValue.Instance(this.sesna); //otevrene obdobi P_NASTAVENI nast = sesna.GetObjectByKey <P_NASTAVENI>("OTEVR_OBDOBI"); DateTime otevrObd = DateTime.ParseExact("01." + nast.HODNOTA, "d.M.yyyy", null); bool predpUzavren = predp.PRPL_OBDOBIROK > -1; predpUzavren = predpUzavren && ((predp.PRPL_OBDOBIROK < otevrObd.Year) || (((predp.PRPL_OBDOBIROK == otevrObd.Year) && (predp.PRPL_OBDOBIMES < otevrObd.Month)))); bool uzaverkyNedelaji = (dbv.DBSysDate - otevrObd).TotalDays > (365 + 60); DBUtil dbu = new DBUtil(sesna); P_PRPL prIns = null; if ((predp.PRPL_EXPORTOVANO == "ANO") || predpUzavren || uzaverkyNedelaji) { using (MyUnitOfWork uow = new MyUnitOfWork(sesna.DataLayer)) { P_PRPL prOld = uow.FindObject <P_PRPL>(CriteriaOperator.Parse("PRPL_ID = ?", PREDPIS_ID)); prIns = new P_PRPL(uow); prIns.PRPL_ID = dbu.LIZNI_SEQ("PRPL_ID"); prIns.CompoundKey.PRPL_POPLATEK = prOld.CompoundKey.PRPL_POPLATEK; prIns.CompoundKey.PRPL_PER = prOld.CompoundKey.PRPL_PER; prIns.CompoundKey.PRPL_ICO = prOld.CompoundKey.PRPL_ICO; prIns.CompoundKey.PRPL_DOPLKOD = prOld.CompoundKey.PRPL_DOPLKOD; prIns.PRPL_RECORD = prOld.PRPL_RECORD; prIns.PRPL_ROK = dbv.DBSysDate.Year; prIns.PRPL_PORPER = prOld.PRPL_PORPER; prIns.PRPL_VS = prOld.PRPL_VS; prIns.PRPL_EA = EXT_APP_KOD; prIns.PRPL_PREDPIS = prOld.PRPL_PREDPIS * -1; prIns.PRPL_SANKCE = prOld.PRPL_SANKCE * -1; prIns.PRPL_EXPFIN = prOld.PRPL_EXPFIN; prIns.PRPL_VYSTUP = prOld.PRPL_VYSTUP; prIns.PRPL_TISK = prOld.PRPL_TISK; prIns.PRPL_VYSTAVENO = dbv.DBSysDate; if (prOld.PRPL_SPLATNO > dbv.DBSysDate) { prIns.PRPL_SPLATNO = prOld.PRPL_SPLATNO; } else { prIns.PRPL_SPLATNO = dbv.DBSysDate; } prIns.PRPL_EXPFIN = prOld.PRPL_EXPFIN; prIns.PRPL_EXPORTOVANO = "NE"; prIns.PRPL_UCETMESIC = prIns.PRPL_VYSTAVENO.Month; prIns.PRPL_UCETROK = prIns.PRPL_VYSTAVENO.Year; prIns.PRPL_EXPSIPO = prOld.PRPL_EXPSIPO; prIns.PRPL_POZNAMKA = POZNAMKA.SubstrLeft(110); prIns.PRPL_SS = prOld.PRPL_SS; P_C_TYPDANE typdane = uow.GetObjectByKey <P_C_TYPDANE>(prOld.PRPL_TYPDANE.TYPDANE_KOD); if (typdane != null) { prIns.PRPL_TYPDANE = typdane; } else { typdane = uow.GetObjectByKey <P_C_TYPDANE>((short)5); prIns.PRPL_TYPDANE = typdane; } if ((prOld.P_PRPL_DPH != null) && (prOld.P_PRPL_DPH.Count > 0)) { prIns.PRPL_UZP = dbv.DBSysDate; } prIns.PRPL_EA = EXT_APP_KOD; prIns.PRPL_EXTDOKLAD = prOld.PRPL_EXTDOKLAD; if ((prOld.P_PRPL_DPH != null) && (prOld.P_PRPL_DPH.Count > 0)) { P_PRPL_DPH dph; foreach (var item in prOld.P_PRPL_DPH) { dph = new P_PRPL_DPH(uow); dph.DPH_KAT = item.DPH_KAT; dph.DPH_SAZBA = item.DPH_SAZBA; dph.DPH_KC = item.DPH_KC * -1; dph.DPH_POZNAMKA = item.DPH_POZNAMKA; dph.DPH_ZAKLAD = item.DPH_ZAKLAD * -1; dph.DPH_ZAOKR = item.DPH_ZAOKR * -1; dph.DPH_DAN = item.DPH_DAN * -1; prIns.P_PRPL_DPH.Add(dph); } } uow.CommitTransaction(); P_PAROVANI par = new P_PAROVANI(sesna); decimal priparujKc = 0; if (Math.Abs(prIns.PRPL_PREDPIS + prIns.PRPL_SANKCE) <= Math.Abs(odparKc)) { priparujKc = Math.Abs(prIns.PRPL_PREDPIS + prIns.PRPL_SANKCE); } if (Math.Abs(prIns.PRPL_PREDPIS + prIns.PRPL_SANKCE) > Math.Abs(odparKc)) { priparujKc = Math.Abs(odparKc); } if (priparujKc != 0) { if ((prIns.PRPL_PREDPIS + prIns.PRPL_SANKCE) < 0) { par.CompoundKey1.PAR_PRPL_ID = prIns.PRPL_ID; par.CompoundKey1.PAR_PLATBA_ID = prOld.PRPL_ID * -1; } if ((prIns.PRPL_PREDPIS + prIns.PRPL_SANKCE) > 0) { par.CompoundKey1.PAR_PRPL_ID = prOld.PRPL_ID; par.CompoundKey1.PAR_PLATBA_ID = prIns.PRPL_ID * -1; } par.PAR_SPARKC = priparujKc; par.PAR_VYTVRUCNE = "ANO"; par.PAR_DATE = dbv.DBSysDateTime.ToString("yyMMddHHmmss"); par.Save(); } } //end using } if (prIns != null) { Resp.STORNO_ID = prIns.PRPL_ID; } else { predp.PRPL_RECORD = "S"; predp.PRPL_EA = EXT_APP_KOD; predp.LASTUPDATE = dbv.DBSysDateTime; predp.LOGIN = String.Format("PoplWS({0})", EXT_APP_KOD); predp.Save(); Resp.STORNO_ID = predp.PRPL_ID; } Resp.result = Result.OK; Resp.status = Status.INSERTED; try // { Util.Util.WriteLog(string.Format("pozadavek na export do ucta: EXPFIN={0}, PREDPIS_ID={1}, {2} Kč", prIns.PRPL_EXPFIN, prIns.PRPL_ID, prIns.PRPL_PREDPIS + prIns.PRPL_SANKCE)); if (prIns.PRPL_EXPFIN == "ANO") { dbu.PredpisExport((int)prIns.CompoundKey.PRPL_POPLATEK, prIns.CompoundKey.PRPL_PER, (int)prIns.PRPL_UCETMESIC, (int)prIns.PRPL_UCETROK, prIns.PRPL_ID); } } catch (Exception exc) { } 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); /* * throw new Exception(String.Format("chyba \n {0}", exc.InnerException.Message)); */ } }
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)); */ } }