public static void SaveInstallationToDB2(ref Installation i, ref ApptBLL appt, string selectedStaff1stName, string staffFilePhath, string iSumXMLfileName) { try { //get ----summary installation xml----- XmlDocument iXmlDoc = CompanyBLL.GetInstallSummanyXMLDoc((short)i.Company.ID, iSumXMLfileName); //------ save End-user --------- only 1 always!? int?endUser_ContDetID; //check user exists on DB // int userIndex = i.EndUsers.FindIndex(endUser => endUser.aspnetUserID.ToString().Equals(endUserASPUserID.ToString(), StringComparison.Ordinal)); int endUserIndex = i.EndUsers.Count - 1; //endUser added is always the last one?? use IndexFinder INSTEAD?? 22/7/16 int?endUser_ID = EndUserBLL.GetPersonIDByASPuserID(i.EndUsers[endUserIndex].aspnetUserID); //only add if it doesnt exist if (endUser_ID == null) { //save endUser contact details to --- DB ---- var _with1 = i.EndUsers[endUserIndex].contactDetail; endUser_ContDetID = ContactDetailsBLL.AddContactDetails(_with1.address, _with1.postCode, _with1.city, _with1.country, _with1.landline, _with1.mobile, _with1.email); //save endUser contact details ID to session _with1.ID = endUser_ContDetID; //save End-user to DB var _with2 = i.EndUsers[endUserIndex]; endUser_ID = EndUserBLL.AddEndUser(_with2.title, _with2.firstName, _with2.lastName, endUser_ContDetID, _with2.aspnetUserID); //save endUser ID to ---- session ----- _with2.ID = endUser_ID; //save USERID to installation xml summary iXmlDoc = AppSettings.AddChild2ISummaryXML(iSumXMLfileName, AppSettings.iuserID, endUser_ID.ToString()); iXmlDoc.Save(iSumXMLfileName); } appt.endUserID = (int)endUser_ID; //------ save appointment ------------ //save appt to ---- DB ---- int?newApptID = ApptBLL.AddAppointment(appt.date, appt.time, appt.endUserID, appt.serviceID, appt.provider, appt.notes); //save apptID to session //source http://stackoverflow.com/questions/1710301/what-is-a-predicate-in-c Predicate <ApptBLL> oscarFinder = (ApptBLL p) => { return(p.endUserID == endUser_ID); }; int apptIndex = i.Appointments.FindLastIndex(oscarFinder); i.Appointments[apptIndex].ID = newApptID; //save USERID to installation xml summary if (newApptID != null || newApptID != 0) { iXmlDoc = AppSettings.AddChild2ISummaryXML(iSumXMLfileName, AppSettings.iApptID, newApptID.ToString()); iXmlDoc.Save(iSumXMLfileName); } //------- save staff daily schedule to ---- session ------------ string minutes = ""; if (appt.time.Minutes == 0) { minutes = "00"; } else { minutes = appt.time.Minutes.ToString(); } int timeINT = (int)Utils.GetNumberInt(appt.time.Hours.ToString() + minutes); //get staff agenda //source: http://stackoverflow.com/questions/1568593/how-to-use-indexof-method-of-listobject //ie: list1.FindIndex(x => x==5); // should return 3, as list1[3] == 5; // given list1 {3, 4, 6, 5, 7, 8}http://www.dotnetperls.com/list-find int empIndex = i.Employees.FindIndex(employee => employee.firstName.Equals(selectedStaff1stName, StringComparison.Ordinal)); var curSelStaffCalendar = i.Employees[empIndex].agenda.staffCalendar; //add booking --- IMPORTANT --> this updates staff's agenda (as BY REF is used) bool addedBooking = AgendaBLL.AddBooking(ref curSelStaffCalendar, (DateTime)appt.date, timeINT); //R if (!addedBooking) //R throw new Exception("<H2>ERROR ADDING BOOKING!</H2>");//throw exc here?it doesnt allow DB save 20/7/16 //------- save staff daily schedule to ---- DB ------------ //get xml from staff daySchedule XmlDocument staffDayScheXML = DayScheduleXML.CreateXMLFromDaySchedule(i.Employees[empIndex], staffFilePhath, (DateTime)appt.date); //add dailySchedule to db int?newDailySchedID = DailySchedule.AddDailySchedule(i.Employees[empIndex].agenda.ID, (DateTime)appt.date, staffDayScheXML); //add ID back to xml DayScheduleXML.Add_ID_2DayScheduleXML(DayScheduleXML.STAFF_DAYSCHEDULEXML_FILENAME, newDailySchedID.ToString()); //i.DailySchedules.Add(newDailySched); //------- SAVE INSTALLATION XML SUMMARY TO DB ------------ int?NumbXmlAdded = CompanyBLL.AddCompanyInstallationSummaryXMLByID((short)i.Company.ID, iXmlDoc); //------- SAVE INSTALLATION XML SUMMARY TO SESSION ------------ i.Company.iSummaryXML = iXmlDoc; } catch (Exception ex) { ExceptionHandling.LogException(ref ex); } }//end SaveInstallationToDB2
public static XmlDocument GetInstallationSummaryXML(Installation i, string fileName) { try { //create XML file XmlDocument xmlDoc = QueryXML.OpenFile(fileName); XDocument xDoc = XDocument.Parse(xmlDoc.OuterXml); //get xml file timestamp var xTimestamp = from key in xDoc.Descendants(AppSettings.iTimestamp) select key.Value; DateTime?xFileTimestamp = Utils.GetDateFromString(xTimestamp.ToList().First()); if (xFileTimestamp == null || DateTime.Compare((DateTime)xFileTimestamp, i.Timestamp) != 0) { xmlDoc = CreateNewInstallSummaryXML(fileName); } //get given installation timestamp DateTime curInstTimestamp = i.Timestamp; //add to xml xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iTimestamp, curInstTimestamp.ToString()); //get company int curInstCoID = (int)i.Company.ID; //add to xml xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iCompanyID, curInstCoID.ToString()); // Loop through all employees int tempStaffID = 0; for (int a = 0; a < i.Employees.Count; a++) { EmployeeBLL employee = i.Employees[a]; //get staff ID tempStaffID = (int)employee.ID; //add to xml xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iEmpID, tempStaffID.ToString(), a); } ////still add Employees parent node if users dont exist this point if (i.Employees.Count == 0) { xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iEmpID, String.Empty, 0, addChild: false); } // Loop through all services int tempServID = 0; for (int b = 0; b < i.Services.Count; b++) { ServicesBLL service = i.Services[b]; //get service ID tempServID = (int)service.ID; //add to xml xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iServID, tempServID.ToString(), b); } ////still add services parent node if users dont exist this point if (i.Services.Count == 0) { xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iServID, String.Empty, 0, addChild: false); } // Loop through all endUsers int tempEndUserID = 0; for (int c = 0; c < i.EndUsers.Count; c++) { EndUserBLL endUser = i.EndUsers[c]; //get endUser ID tempEndUserID = (int)endUser.ID; //add to xml xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iuserID, tempEndUserID.ToString(), c); } //still add EndUser parent node if users dont exist this point if (i.EndUsers.Count == 0) { xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iuserID, String.Empty, 0, addChild: false); } // Loop through all appointments int tempApptID = 0; for (int d = 0; d < i.Appointments.Count; d++) { ApptBLL appt = i.Appointments[d]; //get appt ID tempApptID = (int)appt.ID; //add to xml xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iApptID, tempApptID.ToString(), d); } ////still add appt parent node if users dont exist this point if (i.Appointments.Count == 0) { xmlDoc = AddNode2ISummaryXML(fileName, AppSettings.iApptID, String.Empty, 0, addChild: false); } //return XML file return(xmlDoc); } catch (Exception ex) { ExceptionHandling.LogException(ref ex); return(null); } }//end GetInstallationSummaryXML
/// <summary> /// MUST review 11/7/16 /// </summary> /// <param name="i"></param> /// <param name="company"></param> public static Installation PopulateInstalationObjFromDB(ref Installation i, int?companyID, string iSumXMLfileName) { try { if (i == null) { i = new Installation(); //timestamp i.Timestamp = Utils.GetDatetimeNOW(); } //------ company --------- //get company dataTable var company = CompanyBLL.GetCompanyByID(companyID); //.GetAllCompanies();?? if (company.Count > 0) //==1 //get ----summary installation xml----- { XmlDocument iXmlDoc = CompanyBLL.GetInstallSummanyXMLDoc(companyID, iSumXMLfileName); //get ----company contact Details ----- dataTable int coContactDetID = company.Rows[0].Field <int>(8); var coContactDet = ContactDetailsBLL.GetContactDetailByID(coContactDetID); //populate an instance of contactDetBLL var _with11 = coContactDet.Rows[0]; ContactDetailsBLL coContactBLL = new ContactDetailsBLL(_with11.Field <string>(1), _with11.Field <string>(3), _with11.Field <string>(2), _with11.Field <string>(4), _with11.Field <string>(5), _with11.Field <string>(6), _with11.Field <string>(7)); coContactBLL.ID = _with11.Field <int>(0); //polulate an instance of companyBLL var _with1 = company.Rows[0]; CompanyBLL coBLL = new CompanyBLL(_with1.Field <string>(1), _with1.Field <string>(2), _with1.Field <int?>(3), _with1.Field <string>(4), _with1.Field <DateTime?>(5), _with1.Field <string>(6), _with1.Field <bool?>(9), _with1.Field <string>(10)); coBLL.ID = _with1.Field <int>(0);//same as companyID //add contact details to coBLL coBLL.businessAddress = coContactBLL; //------- SAVE INSTALLATION XML SUMMARY TO SESSION ------------ i.Company.iSummaryXML = iXmlDoc; //foreign keys int clientID = _with1.Field <int>(7); //------ Client --------- //get client dataTable var client = ClientBLL.GetClientByID(clientID);//GetAllClients(); //get ---- client contact ------dataTable int cltContactDetID = client.Rows[0].Field <int>(4); var cltContactDet = ContactDetailsBLL.GetContactDetailByID(cltContactDetID); //populate an instance of contactDetBLL var _with21 = cltContactDet.Rows[0]; ContactDetailsBLL clientContactBLL = new ContactDetailsBLL(_with21.Field <string>(1), _with21.Field <string>(3), _with21.Field <string>(2), _with21.Field <string>(4), _with21.Field <string>(5), _with21.Field <string>(6), _with21.Field <string>(7)); clientContactBLL.ID = _with21.Field <int>(0); //Populate clientBLL var _with2 = client.Rows[0]; ClientBLL clientBLL = new ClientBLL(_with2.Field <string>(1), _with2.Field <string>(2), _with2.Field <string>(3), clientContactBLL, _with2.Field <Guid>(9)); clientBLL.ID = _with2.Field <int>(0); //add client to company coBLL.mainClientContact = clientBLL; //add to installation i.Company = coBLL; //----------------------------------------------end of company--------------------------------------------------------------------- //------------ Employees -------------- List <int> thisCoEmployees = AppSettings.GetIDsList(iSumXmlDoc: iXmlDoc, perform: AppSettings.iEmpID); //loop through all employees registered to this company foreach (int staffID in thisCoEmployees) { //get employee dataTable var employees = EmployeeBLL.GetEmployeeByID(staffID); // Loop through all employees foreach (DataRow employee in employees.Rows) { //get ---- employee agenda ------dataTable short staffAgendaID = employee.Field <short>(8); var staffAgenda = AgendaBLL.GetAgendaByID(staffAgendaID); //populate an instance of agendaBLL var _with41 = staffAgenda.Rows[0]; //System.Diagnostics.Debug.Print("staffAgendaID from employee Table is: " + staffAgendaID.ToString() + "staffAgendaID from AGENDA Table is: " + _with41.Field<short>(0).ToString()); AgendaBLL staffAgendaBLL = new AgendaBLL(staffAgendaID, _with41.Field <bool?>(1), _with41.Field <bool?>(2)); staffAgendaBLL.ID = _with41.Field <short>(0); //get ---- employee contact ------dataTable int staffContDetID = employee.Field <int>(4); var staffContDet = ContactDetailsBLL.GetContactDetailByID(staffContDetID); //populate an instance of contactDetBLL var _with31 = cltContactDet.Rows[0]; ContactDetailsBLL staffContactBLL = new ContactDetailsBLL(_with31.Field <string>(1), _with31.Field <string>(3), _with31.Field <string>(2), _with31.Field <string>(4), _with31.Field <string>(5), _with31.Field <string>(6), _with31.Field <string>(7)); staffContactBLL.ID = _with31.Field <int>(0); //Populate staffBLL var _with3 = employee; EmployeeBLL staffBLL = new EmployeeBLL(_with3.Field <string>(1), _with3.Field <string>(2), _with3.Field <string>(3), staffContactBLL, _with3.Field <string>(6), _with3.Field <string>(7), staffAgendaBLL, _with3.Field <Guid>(9)); staffBLL.ID = _with3.Field <int>(0); //add contact detail & agenda to staff // staffBLL.contactDetail = staffContactBLL;//already added on constructor staffBLL.agenda = staffAgendaBLL; //get ---- DailyShedules foreach agenda ------dataTable var curStaffCalendar = staffBLL.agenda.staffCalendar; List <int> bookingTimes = new List <int>(); //get data stored on db var staffAgendaDailyShedules = DailySchedule.GetDailySchedulesByAgendaID(staffAgendaID); // Loop through each dailySchedule on staff's agenda foreach (DataRow dailySchedule in staffAgendaDailyShedules.Rows) { //create a new DayScheduleBLL DaySchedule daySchedBLL = new DaySchedule(); DateTime date = dailySchedule.Field <DateTime>(2); XDocument xDoc = XDocument.Parse(dailySchedule.Field <System.String>(3)); //loopthrough db xml and get a list of "busy times" bookingTimes = DayScheduleXML.GetTimesFromDayScheduleXML(xDoc); //add appts to daySchedBLL foreach (int time in bookingTimes) { //add appts to daySchedBLL bool added = AgendaBLL.AddBooking(ref curStaffCalendar, date, time); System.Diagnostics.Debug.Print("ADDED?\t " + added.ToString()); } // } //end loop daySchedule //add employee to installation i.Employees.Add(staffBLL); } //// endLoop emploee dataTable } // endLoop through all employees //----------------------------------------------end of employees--------------------------------------------------------------------- //------------ services -------------- List <int> thisCoServices = AppSettings.GetIDsList(iSumXmlDoc: iXmlDoc, perform: AppSettings.iServID); //loop through all employees registered to this company foreach (int serviceID in thisCoServices) { //get services dataTable var services = ServicesBLL.GetServiceByID(serviceID); // Loop through all services foreach (DataRow service in services.Rows) { //Populate serviceBLL var _with4 = service; ServicesBLL serviceBLL = new ServicesBLL(_with4.Field <string>(1), _with4.Field <bool?>(2), _with4.Field <bool?>(3), _with4.Field <string>(4), _with4.Field <byte?>(5), _with4.Field <string>(6), _with4.Field <decimal?>(8)); serviceBLL.ID = _with4.Field <int>(0); //add service to installation i.Services.Add(serviceBLL); } } //----------------------------------------------end of services--------------------------------------------------------------------- //------------ End-Users -------------- List <int> thisCoEndUsers = AppSettings.GetIDsList(iSumXmlDoc: iXmlDoc, perform: AppSettings.iuserID); //loop through all employees registered to this company foreach (int endUserID in thisCoEndUsers) { //get staff dataTable var endUsers = EndUserBLL.GetEndUserByID(endUserID); // Loop through all endUsers foreach (DataRow endUser in endUsers.Rows) { //get ---- endUser contact ------dataTable int endUserContDetID = endUser.Field <int>(4); var endUserContDet = ContactDetailsBLL.GetContactDetailByID(endUserContDetID); //populate an instance of contactDetBLL var _with51 = cltContactDet.Rows[0]; ContactDetailsBLL endUserContactBLL = new ContactDetailsBLL(_with51.Field <string>(1), _with51.Field <string>(3), _with51.Field <string>(2), _with51.Field <string>(4), _with51.Field <string>(5), _with51.Field <string>(6), _with51.Field <string>(7)); endUserContactBLL.ID = _with51.Field <int>(0); //Populate endUserBLL var _with5 = endUser; EndUserBLL endUserBLL = new EndUserBLL(_with5.Field <string>(1), _with5.Field <string>(2), _with5.Field <string>(3), endUserContactBLL, _with5.Field <Guid>(9)); endUserBLL.ID = _with5.Field <int>(0); //add service to installation i.EndUsers.Add(endUserBLL); } } //----------------------------------------------end of End-Users--------------------------------------------------------------------- //------------ Appointments -------------- List <int> thisCoAppts = AppSettings.GetIDsList(iSumXmlDoc: iXmlDoc, perform: AppSettings.iApptID); //loop through all employees registered to this company foreach (int apptID in thisCoAppts) { //get appts dataTable var appts = ApptBLL.GetAppointmentByID(apptID); // Loop through all appts foreach (DataRow appt in appts.Rows) { //Populate apptBLL var _with6 = appt; ApptBLL apptBLL = new ApptBLL(_with6.Field <DateTime>(1), _with6.Field <TimeSpan>(2), _with6.Field <int>(3), _with6.Field <int>(4), _with6.Field <string>(5), _with6.Field <string>(6)); apptBLL.ID = _with6.Field <int>(0); //add appt to installation i.Appointments.Add(apptBLL); } } //----------------------------------------------end of Appointments--------------------------------------------------------------------- } return(i); } catch (Exception ex) { ExceptionHandling.LogException(ref ex); return(null); } }