private void butGenerateClaims_Click(object sender, EventArgs e) { if (gridMain.SelectedIndices.Count() < 1) { MsgBox.Show(this, "Please select the rows for which you would like to create procedures and claims."); return; } if (!MsgBox.Show(this, MsgBoxButtons.YesNo, "Are you sure you want to generate claims and procedures for all patients and insurance plans?")) { return; } List <long> listPlanNums = new List <long>(); List <long> listPatPlanNums = new List <long>(); List <long> listInsSubNums = new List <long>(); for (int i = 0; i < gridMain.SelectedIndices.Count(); i++) { DataRow rowCur = (DataRow)gridMain.Rows[gridMain.SelectedIndices[i]].Tag; listPlanNums.Add(PIn.Long(rowCur["PlanNum"].ToString())); listPatPlanNums.Add(PIn.Long(rowCur["PatPlanNum"].ToString())); listInsSubNums.Add(PIn.Long(rowCur["InsSubNum"].ToString())); } List <InsPlan> listSelectedInsPlans = InsPlans.GetPlans(listPlanNums); List <PatPlan> listSelectedPatPlans = PatPlans.GetPatPlans(listPatPlanNums); List <InsSub> listSelectedInsSubs = InsSubs.GetMany(listInsSubNums); List <DataRow> rowsSucceeded = new List <DataRow>(); int rowsFailed = 0; List <Benefit> listBenefitsAll = Benefits.Refresh(listSelectedPatPlans, listSelectedInsSubs); for (int i = 0; i < gridMain.SelectedIndices.Count(); i++) { try { DataRow rowCur = (DataRow)gridMain.Rows[gridMain.SelectedIndices[i]].Tag; long patNumCur = PIn.Long(rowCur["PatNum"].ToString()); Patient patCur = Patients.GetPat(patNumCur); PatientNote patNoteCur = PatientNotes.Refresh(patNumCur, patCur.Guarantor); long codeNumCur = PIn.Long(rowCur["AutoCodeNum"].ToString()); long provNumCur = PIn.Long(rowCur["ProvNum"].ToString()); long clinicNumCur = PIn.Long(rowCur["ClinicNum"].ToString()); long insPlanNumCur = PIn.Long(rowCur["PlanNum"].ToString()); long patPlanNumCur = PIn.Long(rowCur["PatPlanNum"].ToString()); long insSubNumCur = PIn.Long(rowCur["InsSubNum"].ToString()); int monthsTreat = PIn.Int(rowCur["MonthsTreat"].ToString()); DateTime dateDue = PIn.Date(rowCur["OrthoAutoNextClaimDate"].ToString()); //for each selected row //create a procedure //Procedures.CreateProcForPat(patNumCur,codeNumCur,"","",ProcStat.C,provNumCur); Procedure proc = Procedures.CreateOrthoAutoProcsForPat(patNumCur, codeNumCur, provNumCur, clinicNumCur, dateDue); InsPlan insPlanCur = InsPlans.GetPlan(insPlanNumCur, listSelectedInsPlans); PatPlan patPlanCur = listSelectedPatPlans.FirstOrDefault(x => x.PatPlanNum == patPlanNumCur); InsSub insSubCur = listSelectedInsSubs.FirstOrDefault(x => x.InsSubNum == insSubNumCur); List <Benefit> benefitList = listBenefitsAll.FindAll(x => x.PatPlanNum == patPlanCur.PatPlanNum || x.PlanNum == insSubCur.PlanNum); //create a claimproc List <ClaimProc> listClaimProcs = new List <ClaimProc>(); Procedures.ComputeEstimates(proc, patNumCur, ref listClaimProcs, true, new List <InsPlan> { insPlanCur }, new List <PatPlan> { patPlanCur }, benefitList, null, null, true, patCur.Age, new List <InsSub> { insSubCur }, isForOrtho: true); //make the feebilled == the insplan feebilled or patplan feebilled double feebilled = patPlanCur.OrthoAutoFeeBilledOverride == -1 ? insPlanCur.OrthoAutoFeeBilled : patPlanCur.OrthoAutoFeeBilledOverride; //create a claim with that claimproc string claimType = ""; switch (patPlanCur.Ordinal) { case 1: claimType = "P"; break; case 2: claimType = "S"; break; } DateTimeOD dateTMonthsRem = new DateTimeOD(PIn.Date(rowCur["DateBanding"].ToString()).AddMonths(PIn.Int(rowCur["MonthsTreat"].ToString())), DateTimeOD.Today); Claims.CreateClaimForOrthoProc(claimType, patPlanCur, insPlanCur, insSubCur, ClaimProcs.GetForProcWithOrdinal(proc.ProcNum, patPlanCur.Ordinal), proc, feebilled, PIn.Date(rowCur["DateBanding"].ToString()), PIn.Int(rowCur["MonthsTreat"].ToString()), ((dateTMonthsRem.YearsDiff * 12) + dateTMonthsRem.MonthsDiff)); PatPlans.IncrementOrthoNextClaimDates(patPlanCur, insPlanCur, monthsTreat, patNoteCur); rowsSucceeded.Add(rowCur); SecurityLogs.MakeLogEntry(Permissions.ProcComplCreate, patCur.PatNum , Lan.g(this, "Automatic ortho procedure and claim generated for") + " " + dateDue.ToShortDateString()); } catch (Exception) { rowsFailed++; } } string message = Lan.g(this, "Done.") + " " + Lan.g(this, "There were") + " " + rowsSucceeded.Count + " " + Lan.g(this, "claim(s) generated and") + " " + rowsFailed + " " + Lan.g(this, "failures") + "."; MessageBox.Show(message); foreach (DataRow row in rowsSucceeded) { _tableOutstandingAutoClaims.Rows.Remove(row); } FillGrid(); }