public WorkPackageReport(WorkPackageReportViewModel viewModel, int wpId)
 {
     this.WorkPackageId       = wpId;
     this.ProblemsAnticipated = viewModel.ProblemsAnticipated;
     this.ProblemsThisPeriod  = viewModel.ProblemsAnticipated;
     this.WorkPlanned         = viewModel.WorkPlanned;
     this.WorkAccomplished    = viewModel.WorkAccomplished;
     this.StartDate           = viewModel.StartDate;
     this.EndDate             = viewModel.EndDate;
     this.ReportDate          = viewModel.ReportDate;
     this.Comment             = viewModel.Comment;
     this.LastUpdatedBy       = System.Environment.UserName;
     this.LastUpdatedTime     = DateTime.Now;
 }
        public async Task <ActionResult <WorkPackageReport> > PostWorkPackageReport(WorkPackageReportViewModel workPackageReportViewModel)
        {
            try
            {
                int wpId = (await _workPackageRepository.GetAll())
                           .FirstOrDefault(w => w.WorkPackageCode.Equals(workPackageReportViewModel.WorkPackageCode))
                           .WorkPackageId;
                await _workPackageReportRepository.Add(new WorkPackageReport(workPackageReportViewModel, wpId));

                var thisReport = (await _workPackageReportRepository.GetAll()).OrderByDescending(x => x.LastUpdatedTime).FirstOrDefault();

                foreach (WorkPackageReportDetailsViewModel details in workPackageReportViewModel.Details)
                {
                    WorkPackageReportDetails wpReportDetails = new WorkPackageReportDetails();
                    wpReportDetails.LabourGradeId                   = details.LabourGradeId;
                    wpReportDetails.WorkPackageReportId             = thisReport.WorkPackageReportId;
                    wpReportDetails.LabourGradeName                 = details.LabourGradeName;
                    wpReportDetails.ResponsibleEngineerBudgetInDays = details.ReBudgetDay;
                    wpReportDetails.TotalDays = details.TotalDays;
                    wpReportDetails.ReEstimateAtCompletion = details.ReEAC;
                    wpReportDetails.ReEstimateToCompletion = details.ReETC;
                    wpReportDetails.VariancePercent        = details.Variance;
                    wpReportDetails.CompletionPercent      = details.Complete;
                    wpReportDetails.LastUpdatedBy          = Environment.UserName;
                    wpReportDetails.LastUpdatedTime        = DateTime.Now;

                    await _workPackageReportDetailsRepository.Add(wpReportDetails);

                    //await _workPackageReportDetailsRepository.Add(new WorkPackageReportDetails(details, wpId));
                }

                return(Ok(200));
            }
            catch (NullReferenceException e)
            {
                return(Ok(new Exception("Null pointer: WorkPackageview's wp code might not exist in database. " +
                                        "Cannot get ID for wp code.")));
            }
            catch (Exception e)
            {
                return(Ok(new Exception("Failed to add, something went wrong: " + e.ToString())));
            }
        }