using System; using System.Linq; using System.Security; using System.Text; using System.Web.Services; using System.Web.UI; using System.Web.UI.WebControls; using BeWo.Service.Plugins; using BS.Shared.DataContracts; using BS.Shared.Services; using BeWo.Data; using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceImplementations; using BS.Shared; using BS.Shared.Extensions; using System.Collections.Generic; namespace Host { public partial class ServiceRecordPage : Page//, ICallbackEventHandler { //protected bool IsCreateAllowed //{ // get { return rights != null && rights.Contains(UserRightType.ServiceRecordView_Create); } //} //protected bool CurrentSCHasGoals { get; set; } //private List rights; //private Dictionary> ziele = new Dictionary>(); //private string GetCallbackReference(Control control) //{ // return Page.ClientScript.GetCallbackEventReference(control, "arg", "callback", "context"); //} //private string SaveTabStateCallbackRaiseEvent(string argument) //{ // Session["CurrentlySelectedTab"] = argument; // return argument; //} //protected void Page_Load(object sender, EventArgs e) //{ // try // { // if (!SessionFacade.IsUserLoggedIn()) // throw new SecurityException("Anmeldung erforderlich!"); // var cm = Page.ClientScript; // var cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", ""); // var callbackScript = "function CallServer(arg, context) {" + cbReference + "; }"; // cm.RegisterClientScriptBlock(GetType(), "CallServer", callbackScript, true); // rights = SessionFacade.LoggedInUser.UserGroups.SelectMany(ug => ug.Rights.Select(r => r.RightType)).ToList(); // bt_create.DataBind(); // if (IsPostBack) return; // var SelectedSupportConcept = "-1"; // if (Session["SelectedSupportConcept"] != null) // { // SelectedSupportConcept = Session["SelectedSupportConcept"].ToString(); // } // var operationsService = new OperationsServiceImp(); // // Browserinformationen speichern // var brauser = Page.Request.Browser; // var brauserInfoDC = new BeWoMobilBrowserInfoDC // { // Type = brauser.Type, // Name = brauser.Browser, // BrowserVersion = brauser.Version, // Platform = brauser.Platform, // Tenant = SessionFacade.Tenant // }; // operationsService.InsertBeWoMobilBrowserInfo(brauserInfoDC); // // ------------------------ // var customers = SessionFacade.LoggedInUser.Employee.Employee2CustomerList.Select(ec => ec.Customer).ToList(); // var supportConcepts = DAOFactory.SearchDAO.GetAllActiveSupportConceptsByCustomers(customers.Select(s => s.Oid.Value).ToList()); // //if (!rights.Contains(UserRightType.ServiceRecord_AllowCreateServiceRecordsForAllClients)) // // supportConcepts = supportConcepts.Where(s => customers.Contains(s.Customer)).ToList(); // if(!rights.Contains(UserRightType.ServiceRecordView_View)) // supportConcepts.Clear(); // foreach (var sc in supportConcepts.OrderBy(sc => sc.Customer.Person.LastName)) // foreach (var cb in sc.CostBearer2SupportConceptList) // { // var li = new ListItem(sc.Customer.Person.LastName // + ", " // + sc.Customer.Person.FirstName[0] // + ". " // + (cb.StartDate.HasValue ? cb.StartDate.Value.ToShortDateString().Remove(6, 2) + "-" : string.Empty) // + (cb.EndDate.HasValue ? cb.EndDate.Value.ToShortDateString().Remove(6, 2) : string.Empty) // + " " // + cb.CostBearer.Organisation.Name, cb.Oid.ToString()); // combo_supportconcepts.Items.Add(li); // } // combo_supportconcepts.Items.Insert(0, new ListItem(string.Empty, "-1")); // combo_supportconcepts.SelectedValue = SelectedSupportConcept; // var serviceCategories = operationsService.GetAllServiceCategories(); // combo_serviceCategories.Items.AddRange(serviceCategories // .Select(c => new ListItem(c.Name, c.ServiceCategoryOid.ToString())).ToArray()); // combo_serviceDescriptions.Items.AddRange(operationsService.GetAllServiceDescriptions() // .Where(sd => sd.Category.ServiceCategoryOid.Equals(serviceCategories[0].ServiceCategoryOid)) // .Select(sd => new ListItem(sd.Name, sd.ServiceDescriptionOid.ToString())).ToArray()); // tb_date.Text = DateTime.Now.ToShortDateString(); // if (!SelectedSupportConcept.Equals("-1")) // { // RefreshEntryList(); // } // //var allCustomers = DAOFactory.GenericDAO.GetAllActive(); // //foreach (var li in allCustomers.Select(customer => new ListItem(customer.Person.FirstNameLastName, customer.Oid.ToString()))) // //{ // // CustomerDropdownList.Items.Add(li); // //} // //CustomerDropdownList.Items.Insert(0, new ListItem(string.Empty, "-1")); // //CustomerDropdownList.SelectedIndex = 0; // } // catch (Exception ex) // { // lbl_error.Text = "Es ist leider ein Fehler aufgetreten: " + ex.Message; // } //} //protected void bt_create_Click(object sender, EventArgs e) //{ // if (rights != null && !rights.Contains(UserRightType.ServiceRecordView_Create)) return; // lbl_error.Text = string.Empty; // lbl_success.Text = string.Empty; // int startHours, startMinutes, endHours, endMinutes, durationMinutes; // DateTime date; // if (combo_supportconcepts.SelectedValue.Equals("-1")) // { // lbl_error.Text = "Bitte wählen Sie einen Hilfeplan aus"; // return; // } // if (!DateTime.TryParse(tb_date.Text, out date)) // { // lbl_error.Text = "Bitte geben Sie ein gültiges Datum an"; // return; // } // var cb2sc = DAOFactory.GenericDAO.LoadByID(long.Parse(combo_supportconcepts.SelectedValue)); // var sd = DAOFactory.GenericDAO.LoadByID(long.Parse(combo_serviceDescriptions.SelectedValue)); // var actualMinuteIntervall = MapperFactory.CostRatePeriodDC_CostRatePeriod // .MapToNewDCs(cb2sc.CostBearer.CostRatePeriods) // .GetCurrentlyValidRateValue(CostRatePeriodType.MinutesIntervall) ?? 0m; // var ausgewaehlteZiele = (IList) Session["AusgewaehlteZiele"]; // var sr = new ServiceRecord // { // Notice = tb_notice.Text, // SupportConcept = cb2sc.SupportConcept, // Customer = cb2sc.SupportConcept.Customer, // CostBearer2SupportConcept = cb2sc, // CostBearer2SupportConceptOid=cb2sc.Oid, // Employee = SessionFacade.LoggedInUser.Employee, // ServiceDescription = sd, // InsTs = DateTime.Now, // InsUser = SessionFacade.LoggedInUser.LoginName, // IP = Request.UserHostAddress, // ValueList = ausgewaehlteZiele // }; // bool durationParsedSuccessfully = Int32.TryParse(tb_duration.Value, out durationMinutes); // bool startParsedSuccessfully = TryParseTime(tb_start.Value, out startHours, out startMinutes); // bool endParsedSuccessfully = TryParseTime(tb_stop.Value, out endHours, out endMinutes); // if (!durationParsedSuccessfully || durationMinutes == 0) // { // // keine Dauer angegeben... start & stop // if (startParsedSuccessfully && endParsedSuccessfully) // { // var start = date.AddHours(startHours).AddMinutes(startMinutes); // var stop = date.AddHours(endHours).AddMinutes(endMinutes); // if (start > stop) // { // lbl_error.Text = "Die Startzeit muss vor der Endzeit liegen"; // return; // } // sr.Start = start; // sr.End = stop; // var duration = (int)(stop - start).TotalMinutes; // if (sr.CostBearer2SupportConcept != null) // { // var calc = PluginLoader.FindClass(sr.CostBearer2SupportConcept.CostBearer.ID) ?? Calculations.GetInstance(sr.CostBearer2SupportConcept.CostBearer.ID); // duration = calc.GetRoundedDuration((int) actualMinuteIntervall, duration); // } // sr.RoundedDuration = duration; // } // else // { // lbl_error.Text = "Bitte geben Sie eine gültige Dauer (in Minuten) oder Start und Endzeit an (HH:MM oder HHMM)."; // return; // } // } // else // { // // Dauer angegeben // if (sr.CostBearer2SupportConcept != null) // { // var calc = PluginLoader.FindClass(sr.CostBearer2SupportConcept.CostBearer.ID) ?? Calculations.GetInstance(sr.CostBearer2SupportConcept.CostBearer.ID); // durationMinutes = calc.GetRoundedDuration((int)actualMinuteIntervall, durationMinutes); // } // sr.RoundedDuration = durationMinutes; // if (startParsedSuccessfully && (startHours > 0 || startMinutes > 0)) // { // // Dauer und Start angegeben // sr.Start = date.AddHours(startHours).AddMinutes(startMinutes); // } // else // { // // nur Dauer, kein Start angegeben // sr.Start = date.AddSeconds(1); // } // sr.End = sr.Start.Value.AddMinutes(durationMinutes); // } // var mandator = new OperationsServiceImp().GetMandatorEntity(); // //List rights = SessionFacade.LoggedInUser.UserGroups.SelectMany(ug => ug.Rights.Select(r => r.RightType)).ToList(); // if (!rights.Contains(UserRightType.ServiceRecord_AllowEditAfterMaxDaysInNextMonth) && mandator.MaxDaysEditServiceRecordsAllowed.HasValue && mandator.MaxDaysEditServiceRecordsAllowed.Value > 0) // { // var dt = date.AddMonths(1); // dt = dt.AddDays(mandator.MaxDaysEditServiceRecordsAllowed.Value); // if (DateTime.Now >= dt) // { // lbl_error.Text = "Sie können keine neuen Leistungen für den " + date.ToShortDateString() + " dokumentieren, da bereits der " + mandator.MaxDaysEditServiceRecordsAllowed + ". des nachfolgenden Monats überschritten ist."; // return; // } // } // if (mandator.IsServiceRecordNoticeMandatory && string.IsNullOrEmpty(sr.Notice)) // { // lbl_error.Text = "Bitte dokumentieren Sie die erbrachte Leistung (Notiz)"; // return; // } // DAOFactory.GenericDAO.Insert(sr); // tb_start.Value = tb_stop.Value = tb_notice.Text = tb_duration.Value = string.Empty; // tb_date.Text = DateTime.Now.ToShortDateString(); // lbl_success.Text = "Die Leistung wurde erfolgreich gebucht"; // RefreshEntryList(); //} //protected void combo_serviceCategories_SelectedIndexChanged(object sender, EventArgs e) //{ // lbl_success.Text = string.Empty; // var operationsService = new OperationsServiceImp(); // combo_serviceDescriptions.Items.Clear(); // combo_serviceDescriptions.Items.AddRange(operationsService.GetAllServiceDescriptions() // .Where(sd => sd.Category.ServiceCategoryOid.ToString().Equals(combo_serviceCategories.SelectedValue)) // .Select(sd => new ListItem(sd.Name, sd.ServiceDescriptionOid.ToString())).ToArray()); //} //protected void combo_supportconcepts_SelectedIndexChanged(object sender, EventArgs e) //{ // lbl_success.Text = string.Empty; // Session.Remove("AusgewaehlteZiele"); // RefreshEntryList(); //} //private void RefreshEntryList() //{ // lb_entries.DataSource = null; // if (!combo_supportconcepts.SelectedValue.Equals("-1")) // { // var oid = long.Parse(combo_supportconcepts.SelectedValue); // var list = DAOFactory.SearchDAO.FindServiceRecords(null, oid); // var filteredList = new List(); // var groupOids = new Dictionary(); // foreach (var item in list) // { // if (item.CostBearer2SupportConceptOid != oid) continue; // if (!item.GroupOid.HasValue || !groupOids.ContainsKey(item.GroupOid.Value)) // filteredList.Add(item); // if (item.GroupOid.HasValue && !groupOids.ContainsKey(item.GroupOid.Value)) // groupOids.Add(item.GroupOid.Value, true); // } // filteredList.Sort((x, y) => y.Start.Value.CompareTo(x.Start.Value)); // lb_entries.DataSource = filteredList; // var sc = DAOFactory.GenericDAO.GetByID(oid); // if (sc != null) // { // if (sc.SupportConcept.ValueList.Count > 0) // CurrentSCHasGoals = true; // var children = sc.SupportConcept.ValueList.Where(vl => vl.Entry.Type == ValueListEntryType.SupportConceptGoalCategoryType || vl.Entry.Type == ValueListEntryType.SupportConceptGoalType || vl.Entry.Type == ValueListEntryType.SupportConceptIndividualGoalType).ToList(); // var parentOids = sc.SupportConcept.ValueList.Where(el => el.Entry.ParentOid.HasValue).Select(el => el.Entry.ParentOid.Value).ToList(); // var parents = DAOFactory.GenericDAO.LoadByIDs(parentOids).Distinct().ToList(); // ziele = parents.ToDictionary(parent => parent, parent => children.Where(c => c.Entry.ParentOid.HasValue && parent.Oid.HasValue && c.Entry.ParentOid == parent.Oid.Value).Select(c => c.Entry).ToList()); // GoalListView.ItemDataBound += GoalListView_ItemDataBound; // GoalListView.DataSource = ziele; // GoalListView.DataBind(); // } // } // lb_entries.DataBind(); //} //private static bool TryParseTime(string text, out int hours, out int minutes) //{ // try // { // String[] hnm = null; // if (text.IndexOf(":") >= 0) // { // hnm = text.Split(':'); // } // else // { // if (text.Length <= 2) // { // hnm = new[] { text, "00" }; // } // else if (text.Length == 4) // { // hnm = new[] { text.Substring(0, 2), text.Substring(2) }; // } // } // hours = int.Parse(hnm[0]); // minutes = int.Parse(hnm[1]); // return (hours >= 0 && hours <= 23) && (minutes >= 0 && minutes <= 59); // } // catch // { // hours = 0; // minutes = 0; // return false; // } //} //protected void OnDeleteBtnClick(object sender, EventArgs e) //{ // if (rights != null && !rights.Contains(UserRightType.ServiceRecordView_Create)) return; // var b = (Button)sender; // var serviceRecordOid = b.CommandArgument; // long oid; // var couldParse = long.TryParse(serviceRecordOid, out oid); // var sr = DAOFactory.GenericDAO.GetByID(oid); // if (!couldParse || !sr.Version.HasValue) return; // var operationsService = new OperationsServiceImp(); // operationsService.DeleteServiceRecord(oid, sr.Version.Value); // RefreshEntryList(); // lbl_success.Text = "Der Eintrag '" + sr.Title + "' wurde erfolgreich gelöscht"; //} //protected void OnEditBtnClick(object sender, EventArgs e) //{ // if (rights != null && !rights.Contains(UserRightType.ServiceRecordView_Edit)) return; // var b = (Button) sender; // var serviceRecordOid = b.CommandArgument; // long oid; // var couldParse = long.TryParse(serviceRecordOid, out oid); // if (!couldParse) return; // var cb2sc = DAOFactory.GenericDAO.LoadByID(long.Parse(combo_supportconcepts.SelectedValue)); // Session["ServiceRecord2Edit"] = DAOFactory.GenericDAO.GetByID(oid); // Session["actualMinuteIntervall"] = MapperFactory.CostRatePeriodDC_CostRatePeriod // .MapToNewDCs(cb2sc.CostBearer.CostRatePeriods) // .GetCurrentlyValidRateValue(CostRatePeriodType.MinutesIntervall) ?? 0m; // Response.Redirect("~/ServiceRecordEditPage.aspx?tenant=" + SessionFacade.Tenant); //} //protected bool IsEditBtnVisible() //{ // return rights != null && rights.Contains(UserRightType.ServiceRecordView_Edit); //} //protected bool IsDelBtnVisible() //{ // return rights != null && rights.Contains(UserRightType.ServiceRecordView_Delete); //} //private void GoalListView_ItemDataBound(object sender, ListViewItemEventArgs e) //{ // try // { // var dataItem = (ListViewDataItem)e.Item; // var objList = (KeyValuePair>)dataItem.DataItem; // var ddlListOfObjs = (ListView)dataItem.FindControl("GoalsThemselvesListView"); // ddlListOfObjs.DataSource = objList.Value; // ddlListOfObjs.DataBind(); // } // catch (Exception ex) // { // lbl_error.Text = "Es ist ein Fehler bei der Zieleauflistung aufgetreten: " + ex.Message; // } //} //public void RaiseCallbackEvent(string valueListEntryOid) //{ // var test = (List) Session["AusgewaehlteZiele"]; // if(test == null) // Session["AusgewaehlteZiele"] = new List(); // var selectedGoals = (List) Session["AusgewaehlteZiele"]; // var oid = Convert.ToInt64(valueListEntryOid); // if (selectedGoals.Any(a => a.Oid == oid)) return; // var sg = DAOFactory.GenericDAO.GetByID(oid); // var blah = new ValueListEntry2Object // { // Entry = sg, // InsTs = DateTime.Now, // InsUser = SessionFacade.LoggedInUser.Employee.Person.FirstNameLastName, // IsActive = ActivationTypeId.Active, // ObjectTid = TableID.ServiceRecord // }; // selectedGoals.Add(blah); // Session["AusgewaehlteZiele"] = selectedGoals; //} //public string GetCallbackResult() { return string.Empty; } //protected void combo_customers_SelectedIndexChanged(object sender, EventArgs e) //{ //} } }