public override bool IsValid(DataRow R, out string errmess, out string errfield) { if (R["idestimkind"].ToString() == "") { errmess = "Il codice tipo contratto è obbligatorio"; errfield = "idestimkind"; return(false); } if ((R["doc"].ToString() == "") && (R["cigcode"].ToString() != "")) { errmess = "Il documento collegato in presenza di Codice CIG è obbligatorio"; errfield = "doc"; return(false); } object multireg = Conn.DO_READ_VALUE("estimatekind", QHS.CmpEq("idestimkind", R["idestimkind"]), "multireg"); if (multireg == null || multireg == DBNull.Value) { multireg = "N"; } if ((CfgFn.GetNoNullInt32(R["idreg"]) == 0) && (multireg.ToString() != "S")) { errmess = "Il 'Cliente' è obbligatorio"; errfield = "idreg"; return(false); } if (CfgFn.GetNoNullInt32(R["idcurrency"]) == 0) { errmess = "Il campo 'Valuta' è obbligatorio"; errfield = "idcurrency"; return(false); } if ((R["cigcode"].ToString() != "") && (R["cigcode"].ToString().Length != 10)) { errmess = "Il CIG deve avere lunghezza 10."; errfield = "cigcode"; return(false); } if ((R["cigcode"].ToString() != "") && !CfgFn.IsValidString(R["cigcode"].ToString())) { errmess = "Il CIG contiene caratteri non validi.I caratteri ammessi sono solo numeri e lettere"; errfield = "cigcode"; return(false); } if ((R.RowState == DataRowState.Added) && (!RowChange.IsAutoIncrement(R.Table.Columns["nestim"]))) { int NPRESENT = Conn.RUN_SELECT_COUNT("estimate", "(idestimkind=" + QueryCreator.quotedstrvalue(R["idestimkind"], true) + ")AND" + "(yestim=" + QueryCreator.quotedstrvalue(R["yestim"], true) + ")AND" + "(nestim=" + QueryCreator.quotedstrvalue(R["nestim"], true) + ")", true); if (NPRESENT > 0) { errmess = "Esiste già un Contratto attivo con lo stesso numero."; errfield = "nestim"; return(false); } } if (R.Table.DataSet.Tables.Contains("estimatedetail")) { DataTable md = R.Table.DataSet.Tables["estimatedetail"]; if (md.Columns.Contains("idepacc")) { if (R["active"].ToString() != "S") { if (md.Select(QHC.IsNotNull("idepacc")).Length > 0) { errmess = "Operazione non consentita in presenza di accertamenti di budget.\r\n" + "Occorre procedere con l'annullamento dei dettagli del contratto con apposizione della data di annullamento."; errfield = "active"; return(false); } } } } if (!base.IsValid(R, out errmess, out errfield)) { return(false); } return(true); }