public async Task<ActionResult> ExportData(string riskySicknessId)
{
var q1 = _productManager.GetAllSicknessRiskySicknesses();
if (!string.IsNullOrWhiteSpace(riskySicknessId))
{
q1 = q1.Where(r => r.RiskySicknessId.Equals(riskySicknessId));
}
var sicknessRiskySicknessesList = await q1.ToListAsync();
/* Join Lists as IENumerable */
var q2 = from srs in sicknessRiskySicknessesList
select new
{
srs.RiskySicknessId,
srs.SicknessMainCategory,
srs.SicknessCategory,
srs.SicknessSubCategory
};
/* Sort Ordering */
q2 = q2.OrderBy(x => x.SicknessMainCategory)
.ThenBy(x => x.SicknessCategory)
.ThenBy(x => x.SicknessSubCategory);
/* Done - return the response as json */
return Json(q2.ToList(), JsonRequestBehavior.AllowGet);
}
[HttpPost]
[ValidateAntiForgeryToken]
[HandleException]
/* param name 'data' must match the object name being passed from client via json */
public async Task<ActionResult> ImportData(SicknessRiskySicknessImport excelImportData)
{
if (excelImportData.ImportType == "purge")
{
/* Group and find distinct RiskySicknessIds, then delete all records that have the same RiskySicknessIds. */
var sicknessRiskySicknessListToPurge = excelImportData.ImportList.GroupBy(x => x.RiskySicknessId).Select(x => x.FirstOrDefault()).ToList();
foreach (var sicknessRiskySickness in sicknessRiskySicknessListToPurge)
{
await _productManager.DeleteSicknessesByRiskGroup(sicknessRiskySickness.RiskySicknessId);
}
}
var rowIndex = 1;
var numOfProcessedRecords = 0;
var missingRiskySicknessIds = new List<string>();
try
{
foreach (var row in excelImportData.ImportList)
{
rowIndex += 1;
var sicknessRiskySickness = Mapper.Map(row, (SicknessRiskySickness)null);
var riskySicknessId = sicknessRiskySickness.RiskySicknessId;
var riskySickness = await _productManager.GetRiskySicknessFirstOrDefault(riskySicknessId);
if (riskySickness != null) // check if the RiskySicknessId field matches a RiskySickness on record.
{
switch (excelImportData.ImportType)
{
case "purge":
await _productManager.CreateSicknessRiskySicknessAsync(sicknessRiskySickness);
numOfProcessedRecords += 1;
break;
case "append":
var sicknessRiskySicknessFromDb =
await _productManager.GetSicknessRiskySicknessByCompositeKey(sicknessRiskySickness);
if (sicknessRiskySicknessFromDb == null) // create new record if such record does not exist
{
await _productManager.CreateSicknessRiskySicknessAsync(sicknessRiskySickness);
numOfProcessedRecords += 1;
}
break;
}
}
else
{
bool containsRiskySicknessId = missingRiskySicknessIds.Any(x => riskySicknessId.Contains(x));
if (!containsRiskySicknessId)
{
missingRiskySicknessIds.Add(riskySicknessId);
}
}
}
}
catch (Exception e)
{
throw new UserFriendlyException($"{rowIndex} nolu satırdaki kayıtta hata oluştu : " + e.Message);
}
if (missingRiskySicknessIds.Count > 0)
{
string missingIds = "";
foreach (var id in missingRiskySicknessIds) { missingIds += ", " + id; }
missingIds = missingIds.Substring(2);
return Json("İçe aktarma kısmen tamamlandı. Toplam <b>" + numOfProcessedRecords + "</b> kayıt için işlem yapıldı. " +
missingIds + " kodlu hastalık grupları tanımlı olmadığı için aktarılamadı.");
}
return Json("İçe aktarma başarıyla tamamlandı. Toplam <b>" + numOfProcessedRecords + "</b> kayıt için işlem yapıldı.");
}