using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using BeWo.Data.Entities; using BS.Shared.Extensions; using NHibernate.Criterion; using NHibernate.SqlCommand; using BS.Shared.Core; using BS.Shared; using BS.Shared.DataContracts.Compact; using NHibernate.Linq.Functions; using NHibernate.Transform; using Login = BeWo.Data.Entities.Login; namespace BeWo.Data.Access { public class SearchDAO : AbstractBaseDAO { public IEnumerable FindValueListEntry(ValueListEntryType pType) { return CreateCriteria().Add(Restrictions.Eq(ValueListEntry.PropertyName_Type, pType)).AddOrder(Order.Asc(ValueListEntry.PropertyName_Value)).List(); } public IEnumerable FindValueListEntries(List pTypes) { return CreateCriteria().Add(Restrictions.In(ValueListEntry.PropertyName_Type, pTypes)).AddOrder(Order.Asc(ValueListEntry.PropertyName_Value)).List(); } public virtual IEnumerable FindEmployee(string pFirstName, string pLastName, string pPersonnelNumber) { return CreateCriteria() .Add(Restrictions.Like(Employee.PropertyName_PersonnelNumber, pPersonnelNumber, MatchMode.Anywhere)) .CreateCriteria(Employee.PropertyName_Person, JoinType.InnerJoin) .Add(Restrictions.Like(Person.PropertyName_FirstName, pFirstName, MatchMode.Anywhere)) .Add(Restrictions.Like(Person.PropertyName_LastName, pLastName, MatchMode.Anywhere)) .List(); } public virtual Employee FindEmployeeByFullname(string pFullname) { var q = Session.CreateSQLQuery(string.Format("SELECT Oid FROM Person WHERE CONCAT_WS(' ', FirstName, LastName) LIKE '%{0}%'", pFullname)); var x = q.List(); return x.Count > 0 ? DAOFactory.GenericDAO.GetByID(x.First()) : null; } public virtual IEnumerable FindWohnheim(string pwohnheimName, string pWohnheimStrasse, string pWohnheimPlz) { return CreateCriteria() .Add(Restrictions.Like(Wohnheim.PropertyName_WohnheimName, pwohnheimName, MatchMode.Anywhere)) .CreateCriteria(Wohnheim.PropertyName_Wohnheim, JoinType.InnerJoin) .Add(Restrictions.Like(Wohnheim.PropertyName_Strasse, pWohnheimStrasse, MatchMode.Anywhere)) .Add(Restrictions.Like(Wohnheim.PropertyName_PlZ, pWohnheimPlz, MatchMode.Anywhere)) .List(); } public virtual Wohnheim FindWohnheimByFullname(string pWohnheimName) { var q = Session.CreateSQLQuery(string.Format("SELECT Oid FROM Wohnheim WHERE CONCAT_WS(' ', WohnheimName) LIKE '%{0}%'", pWohnheimName)); var x = q.List(); return x.Count > 0 ? DAOFactory.GenericDAO.GetByID(x.First()) : null; } public virtual IEnumerable FindCustomer(string pFirstName, string pLastName, string pReferenceNumber) { return CreateCriteria() .Add(Restrictions.Like(Customer.PropertyName_ReferenceNumber, pReferenceNumber, MatchMode.Anywhere)) .CreateCriteria(Customer.PropertyName_Person, JoinType.InnerJoin) .Add(Restrictions.Like(Person.PropertyName_FirstName, pFirstName, MatchMode.Anywhere)) .Add(Restrictions.Like(Person.PropertyName_LastName, pLastName, MatchMode.Anywhere)) .List(); } public virtual IEnumerable FindPerson(string pFirstName, string pLastName, DateTime? pDateOfBirth, PersonType? pPersonType) { var lCriteria = CreateCriteria() .Add(Restrictions.Like(Person.PropertyName_FirstName, pFirstName, MatchMode.Anywhere)) .Add(Restrictions.Like(Person.PropertyName_LastName, pLastName, MatchMode.Anywhere)); if (pDateOfBirth != null) lCriteria.Add(Restrictions.Eq(Person.PropertyName_DateOfBirth, pDateOfBirth)); if (pPersonType != null) lCriteria.Add(Restrictions.Eq(Person.PropertyName_Type, pPersonType)); return lCriteria.List(); } public virtual IEnumerable FindOrganisation(string pName, bool pOnlyCostBearer) { var lCriteria = CreateCriteria() .Add(Restrictions.Like(Organisation.PropertyName_Name, pName, MatchMode.Anywhere)); if (pOnlyCostBearer) lCriteria.Add(Restrictions.IsNotNull(Organisation.PropertyName_CostBearer)); return lCriteria.List(); } public virtual IEnumerable FindTeams(string pTeamName, string pLeaderFirstName, string pLeaderLastName) { return CreateCriteria() .Add(Restrictions.Like(Team.PropertyName_Name, pTeamName, MatchMode.Anywhere)) .CreateCriteria(Team.PropertyName_Leader, JoinType.InnerJoin) .CreateCriteria(Employee.PropertyName_Person) .Add(Restrictions.Like(Person.PropertyName_FirstName, pLeaderFirstName, MatchMode.Anywhere)) .Add(Restrictions.Like(Person.PropertyName_LastName, pLeaderLastName, MatchMode.Anywhere)) .List(); } public virtual IList FindTeamsOfEmployee(long employeeOid) { return CreateCriteriaIsActiveOrArchived() .CreateCriteria(Team.PropertyName_MemberList, JoinType.InnerJoin) .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, employeeOid)) .List(); } public virtual IEnumerable FindLeadingTeams(long employeeOid) { return CreateCriteriaIsActiveOrArchived() .CreateCriteria(Team.PropertyName_Leader, JoinType.InnerJoin) .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, employeeOid)) .List(); } public IEnumerable FindBookings(long pResourceOid, DateTime pSpanStart, DateTime pSpanEnd) { var lResult = CreateCriteria() .CreateAlias(ResourceBookingSequence.PropertyName_Resource, "r") .CreateAlias(ResourceBookingSequence.PropertyName_Details, "d") .Add(Restrictions.Eq("r." + BeWoEntityBase.PropertyName_Oid, pResourceOid)) .Add(Restrictions.Eq("d." + ResourceBooking.PropertyName_SequencePosition, 0)) .Add(Restrictions.Disjunction() .Add(Restrictions.Between("d." + ResourceBooking.PropertyName_Start, pSpanStart, pSpanEnd)) .Add(Restrictions.Between(ResourceBookingSequence.PropertyName_SequenceEnd, pSpanStart, pSpanEnd)) .Add(Restrictions.Conjunction() .Add(Restrictions.Le("d." + ResourceBooking.PropertyName_Start, pSpanStart)) .Add(Restrictions.Ge(ResourceBookingSequence.PropertyName_SequenceEnd, pSpanEnd)) ) ) .List(); return lResult; } public IEnumerable FindBookings(DateTime pSpanStart, DateTime pSpanEnd) { var lResult = CreateCriteria() .CreateAlias(ResourceBookingSequence.PropertyName_Details, "d") .Add(Restrictions.Eq("d." + ResourceBooking.PropertyName_SequencePosition, 0)) .Add(Restrictions.Disjunction() .Add(Restrictions.Between("d." + ResourceBooking.PropertyName_Start, pSpanStart, pSpanEnd)) .Add(Restrictions.Between(ResourceBookingSequence.PropertyName_SequenceEnd, pSpanStart, pSpanEnd)) .Add(Restrictions.Conjunction() .Add(Restrictions.Le("d." + ResourceBooking.PropertyName_Start, pSpanStart)) .Add(Restrictions.Ge(ResourceBookingSequence.PropertyName_SequenceEnd, pSpanEnd)) ) ) .List(); return lResult; } public List FindServiceRecords(long? pEmployeeOid, long? pCostBearer2SupportConceptOid) { var c = CreateCriteria() .CreateAlias(ServiceRecord.PropertyName_Employee, "e", JoinType.InnerJoin); if (pCostBearer2SupportConceptOid.HasValue) { c = c.CreateAlias(ServiceRecord.PropertyName_SupportConcept, "sc", JoinType.InnerJoin) .CreateAlias("sc." + SupportConcept.PropertyName_CostBearer2SupportConceptList, "c2s", JoinType.InnerJoin); } if (pEmployeeOid.HasValue) c = c.Add(Restrictions.Eq("e." + BeWoEntityBase.PropertyName_Oid, pEmployeeOid)); if (pCostBearer2SupportConceptOid.HasValue) c = c.Add(Restrictions.Eq("c2s." + BeWoEntityBase.PropertyName_Oid, pCostBearer2SupportConceptOid)); return c.List().ToList(); } public List FindServiceRecordsForSupportConcept(long pSupportConceptOid) { var c = CreateCriteria() .CreateAlias(ServiceRecord.PropertyName_SupportConcept, "sc", JoinType.InnerJoin); c = c.Add(Restrictions.Eq("sc." + BeWoEntityBase.PropertyName_Oid, pSupportConceptOid)); return c.List().ToList(); } public IList FindSupportConceptApprovalPeriod2Employees(Employee emp) { var c = CreateCriteria() .Add(Restrictions.Eq(SupportConceptApprovalPeriod2Employee.PropertyName_Employee, emp)); return c.List().ToList(); } public IEnumerable FindServiceRecordsInSpan(long pCostBearer2SupportConceptOid, DateTimeSpan period) { var criteria = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_CostBearer2SupportConceptOid, pCostBearer2SupportConceptOid)); if (period != null) criteria = criteria.Add( Restrictions.Or( Restrictions.Between(ServiceRecord.PropertyName_Start, period.StartDateTime, period.EndDateTime), Restrictions.Between(ServiceRecord.PropertyName_End, period.StartDateTime, period.EndDateTime))); return criteria.List().ToList(); } public IEnumerable FindServiceRecordHistory(long serviceRecordOid) { var criteria = CreateCriteria() .Add(Restrictions.Eq(ServiceRecordHistory.PropertyName_ServiceRecordOid, serviceRecordOid)); return criteria.List().ToList(); } public IEnumerable FindEmployeeServiceRecordsWithoutCustomer(long pEmployeeOid, long? days) { var c = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_EmployeeOid, pEmployeeOid)) .Add(Restrictions.IsNull(ServiceRecord.PropertyName_CostBearer2SupportConceptOid)); if (days.HasValue) { var minDate = DateTime.Now.Date.AddDays(-1 * days.Value); c.Add(Restrictions.Ge(ServiceRecord.PropertyName_Start, minDate)); } return c.List().ToList(); } public IEnumerable FindEmployeeServiceRecordsWithoutCustomerInSpan(long pEmployeeOid, DateTimeSpan period) { var criteria = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_EmployeeOid, pEmployeeOid)) .Add(Restrictions.IsNull(ServiceRecord.PropertyName_CostBearer2SupportConceptOid)); if (period != null) { criteria = criteria.Add( Restrictions.Or( Restrictions.Between(ServiceRecord.PropertyName_Start, period.StartDateTime, period.EndDateTime), Restrictions.Between(ServiceRecord.PropertyName_End, period.StartDateTime, period.EndDateTime))); } return criteria.List().ToList(); } public IList FindEmployeeServiceRecords(long pEmployeeOid, DateTimeSpan pSpan, long? customerOid, ServiceRecordTypeId? srTypeFilter) { var lCriteria = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_EmployeeOid, pEmployeeOid)); if (pSpan != null) lCriteria.Add(Restrictions.Between(ServiceRecord.PropertyName_Start, pSpan.StartDateTime, pSpan.EndDateTime)); if (customerOid != null) lCriteria.Add(Restrictions.Eq(ServiceRecord.PropertyName_CustomerOid, customerOid.Value)); if (srTypeFilter.HasValue) { lCriteria.Add(Restrictions.Eq(ServiceRecord.PropertyName_ServiceRecordType, srTypeFilter.Value)); } var result = lCriteria.List().ToList(); return result; } public IList FindCustomerServiceRecords(long customerOid) { var lCriteria = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_CustomerOid, customerOid)); return lCriteria.List(); } public IList FindCustomerServiceRecords(long customerOid, DateTimeSpan pSpan, long? employeeOid, ServiceRecordTypeId? srTypeFilter) { var lCriteria = CreateCriteria() .Add(Restrictions.Between(ServiceRecord.PropertyName_Start, pSpan.StartDateTime, pSpan.EndDateTime)) .Add(Restrictions.Eq(ServiceRecord.PropertyName_CustomerOid, customerOid)); if (employeeOid != null) lCriteria.Add(Restrictions.Eq(ServiceRecord.PropertyName_EmployeeOid, employeeOid.Value)); if (srTypeFilter.HasValue) { lCriteria.Add(Restrictions.Eq(ServiceRecord.PropertyName_ServiceRecordType, srTypeFilter.Value)); } return lCriteria.List(); } public IEnumerable FindServiceRecordsInSpan(DateTimeSpan pSpan, ServiceRecordTypeId? srTypeFilter) { var lCriteria = CreateCriteria() .Add(Restrictions.Between(ServiceRecord.PropertyName_Start, pSpan.StartDateTime, pSpan.EndDateTime)); if (srTypeFilter.HasValue) { lCriteria.Add(Restrictions.Eq(ServiceRecord.PropertyName_ServiceRecordType, srTypeFilter.Value)); } return lCriteria.List().ToList(); } public IEnumerable FindUnassignedAccountingTransactions() { return CreateCriteria() .Add(Restrictions.IsNull(AccountingTransaction.PropertyName_CostBearer2SupportConcept)) .List().ToList(); } public IEnumerable FindSupportConcept( string pCustomerFirstName, string pCustomerLastName, string pCustomerReferenceNumber, DateTime? pFrom, DateTime? pTill) { var lCriteria = CreateCriteria(); //if (pFrom != null) // lCriteria.Add(Expression.Ge(SupportConcept.PropertyName_Start, pFrom)); //if (pTill != null) // lCriteria.Add(Expression.Le(SupportConcept.PropertyName_End, pTill)); lCriteria = lCriteria.CreateCriteria(SupportConcept.PropertyName_Customer, JoinType.InnerJoin); if (!String.IsNullOrEmpty(pCustomerReferenceNumber)) lCriteria.Add(Restrictions.Eq(Customer.PropertyName_ReferenceNumber, pCustomerReferenceNumber)); if (!Utils.AreAllNullOrEmpty(pCustomerFirstName, pCustomerLastName)) lCriteria.CreateCriteria(Customer.PropertyName_Person) .Add(Restrictions.Like(Person.PropertyName_FirstName, pCustomerFirstName, MatchMode.Anywhere)) .Add(Restrictions.Like(Person.PropertyName_LastName, pCustomerLastName, MatchMode.Anywhere)); return lCriteria.List(); } public IEnumerable FindCurrentSupportConcepts() { return CreateCriteriaIsActive() //.Add(Expression.Ge(SupportConcept.PropertyName_End, DateTime.Now)) .List(); } public IEnumerable FindSupportConceptsInSpan(DateTimeSpan pSpan) { return CreateCriteriaIsActive() //.Add(Expression.Disjunction() // .Add(Expression.Between(SupportConcept.PropertyName_Start, pSpan.StartDateTime, pSpan.EndDateTime)) // .Add(Expression.Between(SupportConcept.PropertyName_End, pSpan.StartDateTime, pSpan.EndDateTime)) // .Add(Expression.Conjunction() // .Add(Expression.Le(SupportConcept.PropertyName_Start, pSpan.StartDateTime)) // .Add(Expression.Ge(SupportConcept.PropertyName_End, pSpan.EndDateTime)) // ) // ) .List(); } public IEnumerable FindExpiringSupportConcepts(long? employeeOid, DateTime expiredUntil) { var c = CreateCriteriaIsActive(); if (employeeOid == null) { return c .CreateCriteria(SupportConcept.PropertyName_CostBearer2SupportConceptList, JoinType.InnerJoin) .Add(Restrictions.Between(CostBearer2SupportConcept.PropertyName_ApprovedEndDate, DateTime.Now, expiredUntil)) .List(); } return c .CreateAlias(SupportConcept.PropertyName_CostBearer2SupportConceptList, "cb2sc", JoinType.InnerJoin) .CreateAlias(SupportConcept.PropertyName_Customer, "c", JoinType.InnerJoin) .CreateAlias("c.Employee2CustomerList", "e2c", JoinType.InnerJoin) .Add(Restrictions.Between("cb2sc." + CostBearer2SupportConcept.PropertyName_ApprovedEndDate, DateTime.Now.Date, expiredUntil)) .Add(Restrictions.Eq("e2c." + Employee2Customer.PropertyName_EmployeeOid, employeeOid.Value)) .List().Distinct().ToList(); } public IEnumerable FindSupportConceptsWithConferenceDate(long? employeeOid, DateTime conferenceDateUntil) { var c = CreateCriteriaIsActive(); if (employeeOid == null) { return c .Add(Restrictions.Between(SupportConcept.PropertyName_ConferenceDate, DateTime.Now, conferenceDateUntil)) .List(); } return c .CreateAlias(SupportConcept.PropertyName_Customer, "c", JoinType.InnerJoin) .CreateAlias("c.Employee2CustomerList", "e2c", JoinType.InnerJoin) .Add(Restrictions.Between(SupportConcept.PropertyName_ConferenceDate, DateTime.Now.Date, conferenceDateUntil)) .Add(Restrictions.Eq("e2c." + Employee2Customer.PropertyName_EmployeeOid, employeeOid.Value)) .List().Distinct().ToList(); } public IEnumerable FindPersonsHavingBirthday(DateTime birthdayUntil) { var ts = birthdayUntil.Subtract(DateTime.Now); var days = ts.Days + 1; return CreateCriteriaIsActive() .Add(Expression.Sql(new SqlString("dayofyear(CAST(CONCAT(Year(CURDATE()), '-', Month(" + Person.PropertyName_DateOfBirth + "), '-', Day(" + Person.PropertyName_DateOfBirth + ")) AS DATE )) between dayofyear(CURDATE()) and dayofyear(CURDATE()) + " + days))) .List(); } public IEnumerable FindLastLogins(string loginName) { return CreateCriteria() .Add(Restrictions.Eq(Login.PropertyName_LoginName, loginName)) .List(); } public IEnumerable FindQuery(QueryType pType) { return CreateCriteria().Add(Restrictions.Eq(Query.PropertyName_Type, pType)) .List().ToList(); } public IList FindAccoutingTransactions(DateTimeSpan pSpan) { var lCriteria = CreateCriteriaIsActive(); if (pSpan != null) lCriteria.Add(Restrictions.Between(AccountingTransaction.PropertyName_BookingDate, pSpan.StartDateTime, pSpan.EndDateTime)); var test = lCriteria.List(); return test; } public IEnumerable FindAccoutingTransactions(DateTimeSpan pSpan, long? pSupportConceptOid, long? pSupportConceptCostBearerRelOid) { var lCriteria = CreateCriteriaIsActive() .CreateAlias(AccountingTransaction.PropertyName_CostBearer2SupportConcept, "cb2sc", JoinType.LeftOuterJoin); if (pSpan != null) lCriteria.Add(Restrictions.Between(AccountingTransaction.PropertyName_BookingDate, pSpan.StartDateTime, pSpan.EndDateTime)); if (pSupportConceptCostBearerRelOid != null) lCriteria.Add(Restrictions.Eq("cb2sc." + BeWoEntityBase.PropertyName_Oid, pSupportConceptCostBearerRelOid)); if (pSupportConceptOid != null) { lCriteria.CreateCriteria("cb2sc." + CostBearer2SupportConcept.PropertyName_SupportConcept) .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, pSupportConceptOid)); } var test = lCriteria.List(); return test; } public IList FindSettingsByValuePart(SettingsType pType, string pValuePart) { return CreateCriteria() .Add(Restrictions.Eq(Settings.PropertyName_Type, pType)) .Add(Restrictions.Like(Settings.PropertyName_Value, pValuePart, MatchMode.Anywhere)) .List(); } public IList FindFileAttachments(TableID pObjTid, long pObjOid) { return CreateCriteriaIsActive() .Add(Restrictions.Eq(FileAttachment.PropertyName_ObjectOid, pObjOid)) .Add(Restrictions.Eq(FileAttachment.PropertyName_ObjectTid, pObjTid)) .List(); } public IEnumerable FindFileAttachmentInfos(TableID pObjTid, long pObjOid) { return CreateCriteriaIsActive() .Add(Restrictions.Eq(FileAttachmentInfo.PropertyName_ObjectOid, pObjOid)) .Add(Restrictions.Eq(FileAttachmentInfo.PropertyName_ObjectTid, pObjTid)) .List(); } public IList FindBeWoFolders(TableID pObjTid, long pObjOid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(BeWoFolder.PropertyName_ObjectTid, pObjTid)); if (pObjOid > 0) { c.Add(Restrictions.Eq(BeWoFolder.PropertyName_ObjectOid, pObjOid)); } return c.List(); } //public IList FindAllActiveApprovedLVRSupportConcepts() //{ // return CreateCriteriaIsActive() // .CreateCriteria(SupportConcept.PropertyName_CostBearer2SupportConceptList, JoinType.InnerJoin) // .Add(Expression.Eq(CostBearer2SupportConcept.PropertyName_Status, CostBearer2SupportConceptStatus.Approved)) // .CreateCriteria(CostBearer2SupportConcept.PropertyName_CostBearer, JoinType.InnerJoin) // .Add(Expression.Eq(CostBearer.PropertyName_SystemEntryID, SystemEntryID.CostBearerLVR)) // .List(); //} public IList FindAllActiveApprovedSupportConcepts() { return CreateCriteriaIsActive() .CreateCriteria(SupportConcept.PropertyName_CostBearer2SupportConceptList, JoinType.InnerJoin) .Add(Restrictions.Eq(CostBearer2SupportConcept.PropertyName_Status, CostBearer2SupportConceptStatus.Approved)) .List().Distinct().ToList(); } public Employee FindEmployeeWithPersonOid(long pPersonOid) { var person = DAOFactory.GenericDAO.LoadByID(pPersonOid); if (person != null) { return CreateCriteria() .Add(Restrictions.Eq(Employee.PropertyName_Person, person)).UniqueResult(); } return null; } public Customer FindCustomerWithPersonOid(long pPersonOid) { var person = DAOFactory.GenericDAO.LoadByID(pPersonOid); if (person != null) { return CreateCriteria() .Add(Restrictions.Eq(Customer.PropertyName_Person, person)).UniqueResult(); } return null; } public IList GetActivePersonsWithType(PersonType type) { return CreateCriteriaIsActive() .Add(Restrictions.Eq(Person.PropertyName_Type, type)) .List(); } public IEnumerable GetAllActiveCustomersWithSupportConceptData() { return CreateCriteriaIsActiveOrArchived() .CreateAlias(Customer.PropertyName_SupportConcepts, "sc", JoinType.LeftOuterJoin) .CreateCriteria("sc." + SupportConcept.PropertyName_CostBearer2SupportConceptList, JoinType.LeftOuterJoin) .Add(Restrictions.Eq("sc." + SupportConcept.PropertyName_IsActive, ActivationTypeId.Active)) .List(); } public IEnumerable GetAllActiveCustomersWithAddress() { return CreateCriteriaIsActive() .CreateCriteria(Customer.PropertyName_Person, JoinType.LeftOuterJoin) .CreateCriteria(Person.PropertyName_Address, JoinType.LeftOuterJoin) .List(); } public IEnumerable GetAllCustomersWithRelatedEmployee() { return CreateCriteria() .CreateAlias(Customer.PropertyName_Person, "cp", JoinType.InnerJoin) .CreateAlias("cp." + Person.PropertyName_Address, "a", JoinType.LeftOuterJoin) .CreateAlias(Customer.PropertyName_Employee2CustomerList, "e2c", JoinType.LeftOuterJoin) .CreateAlias("e2c." + Employee2Customer.PropertyName_Employee, "e", JoinType.LeftOuterJoin) .CreateCriteria("e2c." + Employee2Customer.PropertyName_ValueList, JoinType.LeftOuterJoin) .CreateCriteria("e." + Employee.PropertyName_Person, JoinType.LeftOuterJoin) .List(); } public IList FindServiceRecordsDetailsForLastDays(long costbearer2SupportConcept, long? days) { var c = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_CostBearer2SupportConceptOid, costbearer2SupportConcept)); if (days.HasValue) { var minDate = DateTime.Now.Date.AddDays(-1 * days.Value); c.Add(Restrictions.Ge(ServiceRecord.PropertyName_Start, minDate)); } return c.CreateAlias(ServiceRecord.PropertyName_ValueList, "vl", JoinType.LeftOuterJoin) .CreateAlias(ServiceRecord.PropertyName_ServiceDescription, "sd", JoinType.InnerJoin) .CreateAlias("sd." + ServiceDescription.PropertyName_ServiceCategory, "sc", JoinType.InnerJoin) .CreateAlias(ServiceRecord.PropertyName_Employee, "e", JoinType.InnerJoin) .CreateCriteria("e." + Employee.PropertyName_Person, JoinType.InnerJoin) .List(); } public IList FindServiceRecordsDetailWithServiceInfo(long costbearer2SupportConcept) { var c = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_CostBearer2SupportConceptOid, costbearer2SupportConcept)); return c.CreateAlias(ServiceRecord.PropertyName_ServiceDescription, "sd", JoinType.InnerJoin) .CreateAlias("sd." + ServiceDescription.PropertyName_ServiceCategory, "sc", JoinType.InnerJoin) .List(); } public Customer FindCustomerWithServiceRecordsWithDetail(long pCustomerOid) { return CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, pCustomerOid)) .CreateAlias(Customer.PropertyName_ServiceRecordList, "sr", JoinType.InnerJoin) .CreateCriteria("sr." + ServiceRecord.PropertyName_ValueList, JoinType.LeftOuterJoin) .CreateAlias("sr." + ServiceRecord.PropertyName_ServiceDescription, "sd", JoinType.InnerJoin) .CreateCriteria("sd." + ServiceDescription.PropertyName_ServiceCategory, JoinType.InnerJoin) .CreateAlias("sr." + ServiceRecord.PropertyName_CostBearer2SupportConcept, "c2s", JoinType.InnerJoin) .CreateCriteria("c2s." + CostBearer2SupportConcept.PropertyName_SupportConcept, JoinType.InnerJoin) .CreateAlias("c2s." + CostBearer2SupportConcept.PropertyName_CostBearer, "cb", JoinType.InnerJoin) .CreateAlias("cb." + CostBearer.PropertyName_Organisation, "org", JoinType.InnerJoin) .UniqueResult(); } public ServiceRecordGroup FindServiceRecordGroup(long pGroupOid) { return CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, pGroupOid)) .CreateCriteria(ServiceRecordGroup.PropertyName_ServiceRecordList, JoinType.InnerJoin) .UniqueResult(); } public IEnumerable GetAllActiveAndArchivedSupportConceptsCompact() { return CreateCriteria() .Add(Restrictions.Or(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active), Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Archived))) .CreateAlias(SupportConcept.PropertyName_CostBearer2SupportConceptList, "cb2sc", JoinType.LeftOuterJoin) .CreateAlias(SupportConcept.PropertyName_Customer, "c", JoinType.InnerJoin) .CreateAlias("c." + Customer.PropertyName_Person, "p", JoinType.InnerJoin) .CreateAlias("p." + Person.PropertyName_Address, "a", JoinType.LeftOuterJoin) .CreateAlias("c." + Customer.PropertyName_Employee2CustomerList, "e2c", JoinType.LeftOuterJoin) .List(); } public IEnumerable GetAllSupportConceptsCompact() { return CreateCriteria() .CreateAlias(SupportConcept.PropertyName_CostBearer2SupportConceptList, "cb2sc", JoinType.LeftOuterJoin) .CreateAlias(SupportConcept.PropertyName_Customer, "c", JoinType.InnerJoin) .CreateAlias("c." + Customer.PropertyName_Person, "p", JoinType.InnerJoin) .CreateAlias("p." + Person.PropertyName_Address, "a", JoinType.LeftOuterJoin) .CreateAlias("c." + Customer.PropertyName_Employee2CustomerList, "e2c", JoinType.LeftOuterJoin) .List(); } public IList GetAllActiveAndArchivedListedSupportConceptsCompact() { return Session.CreateCriteria() .List(); } public IList GetAllActiveAndArchivedListedSupportConceptsCompact(List oids) { return Session.CreateCriteria() .Add(Restrictions.In("SupportConceptOid", oids)) .List(); } public IList GetAllCustomerWithServiceRecordsInSpan(DateTimeSpan pSpan) { return CreateCriteria() .CreateCriteria(Customer.PropertyName_ServiceRecordList, JoinType.InnerJoin) .Add(Restrictions.Between(ServiceRecord.PropertyName_Start, pSpan.StartDateTime, pSpan.EndDateTime)) .List(); } public IEnumerable GetAllAccountingTransactionsWithDetails() { return CreateCriteria() .AddOrder(Order.Desc(AccountingTransaction.PropertyName_BookingDate)) .CreateAlias(AccountingTransaction.PropertyName_CostBearer2SupportConcept, "cb2sc", JoinType.LeftOuterJoin) .CreateCriteria("cb2sc." + CostBearer2SupportConcept.PropertyName_CostBearer, JoinType.LeftOuterJoin) .CreateCriteria(CostBearer.PropertyName_Organisation, JoinType.LeftOuterJoin) .CreateCriteria("cb2sc." + CostBearer2SupportConcept.PropertyName_SupportConcept, JoinType.LeftOuterJoin) .CreateCriteria(SupportConcept.PropertyName_Customer, JoinType.LeftOuterJoin) .CreateCriteria(Customer.PropertyName_Person, JoinType.LeftOuterJoin) .List(); } public IEnumerable GetAllActiveAndArchivedSupportConcepts() { return CreateCriteria() .Add(Restrictions.Or(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active), Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Archived))) .CreateAlias(SupportConcept.PropertyName_CostBearer2SupportConceptList, "cb2sc", JoinType.InnerJoin) .CreateAlias("cb2sc." + CostBearer2SupportConcept.PropertyName_CostBearer, "cb", JoinType.InnerJoin) .CreateAlias("cb." + CostBearer.PropertyName_Organisation, "org", JoinType.InnerJoin) .CreateAlias(SupportConcept.PropertyName_Customer, "c", JoinType.InnerJoin) .CreateAlias("c." + Customer.PropertyName_Person, "p", JoinType.InnerJoin) .List(); } public IEnumerable GetAllActiveAndArchivedCustomersWithRelatedEmployee() { return CreateCriteria() .Add(Restrictions.Or(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active), Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Archived))) .CreateAlias(Customer.PropertyName_Person, "cp", JoinType.InnerJoin) .CreateAlias("cp." + Person.PropertyName_Address, "a", JoinType.LeftOuterJoin) .CreateAlias(Customer.PropertyName_Employee2CustomerList, "e2c", JoinType.LeftOuterJoin) .CreateAlias("e2c." + Employee2Customer.PropertyName_Employee, "e", JoinType.LeftOuterJoin) .CreateCriteria("e2c." + Employee2Customer.PropertyName_ValueList, JoinType.LeftOuterJoin) .CreateCriteria("e." + Employee.PropertyName_Person, JoinType.LeftOuterJoin) .List(); } public IEnumerable GetSettlementInvoiceBySupportConceptOid(long supportConceptOid) { return CreateCriteriaIsActive() .CreateAlias(SettlementInvoice.PropertyName_InvoiceBase, "ib", JoinType.InnerJoin) .Add(Restrictions.Eq("ib." + InvoiceBase.PropertyName_SupportConceptOid, supportConceptOid)) .List(); } public IList GetSettlementInvoiceByCostBearer2SupportConceptOid(long costBearer2SupportConceptOid) { return CreateCriteriaIsActive() .CreateAlias(SettlementInvoice.PropertyName_InvoiceBase, "ib", JoinType.InnerJoin) .Add(Restrictions.Eq("ib." + InvoiceBase.PropertyName_CostBearer2SupportConceptOid, costBearer2SupportConceptOid)) .List(); } public IEnumerable GetSettlementInvoicesForCostBearerAndPeriod(long costBearerOid, DateTime periodStart, DateTime periodEnd) { return CreateCriteriaIsActive() .CreateAlias(SettlementInvoice.PropertyName_InvoiceBase, "ib", JoinType.InnerJoin) .CreateAlias("ib." + InvoiceBase.PropertyName_CostBearer2SupportConcept, "cb2sc", JoinType.InnerJoin) .CreateAlias("cb2sc." + CostBearer2SupportConcept.PropertyName_CostBearer, "cb", JoinType.InnerJoin) .Add(Restrictions.Eq("cb." + BeWoEntityBase.PropertyName_Oid, costBearerOid)) .Add(Restrictions.Or( Restrictions.Between("ib." + InvoiceBase.PropertyName_AccountingPeriodStart, periodStart, periodEnd), Restrictions.Between("ib." + InvoiceBase.PropertyName_AccountingPeriodEnd, periodStart, periodEnd))) .List(); } public IList GetInvoiceBaseByTypeAndSupportConceptOid(InvoiceType type, long supportConceptOid) { return SearchInvoiceBase(type, InvoiceBase.PropertyName_SupportConceptOid, supportConceptOid); } public IEnumerable GetInvoiceBaseByOrganisationOid(InvoiceType type, long organisationOid) { return SearchInvoiceBase(type, InvoiceBase.PropertyName_RecipientOrganisationOid, organisationOid); } public IEnumerable GetInvoiceBaseByCustomerOid(InvoiceType type, long customerOid) { return SearchInvoiceBase(type, InvoiceBase.PropertyName_RecipientCustomerOid, customerOid); } public IEnumerable GetInvoiceBaseByPersonOid(InvoiceType type, long personOid) { return SearchInvoiceBase(type, InvoiceBase.PropertyName_RecipientPersonOid, personOid); } private IList SearchInvoiceBase(InvoiceType type, string propertyname, long fkOid) { return CreateCriteriaIsActive() .Add(Restrictions.Eq(InvoiceBase.PropertyName_Type, type)) .Add(Restrictions.Eq(propertyname, fkOid)) .List(); } public SettlementInvoice GetSettlementInvoiceByInvoiceBaseOid(long invoiceBaseOid) { return CreateCriteriaIsActive() .CreateAlias(SettlementInvoice.PropertyName_InvoiceBase, "ib", JoinType.InnerJoin) .Add(Restrictions.Eq("ib." + BeWoEntityBase.PropertyName_Oid, invoiceBaseOid)) .UniqueResult(); } public ServiceInvoice GetServiceInvoiceByInvoiceBaseOid(long invoiceBaseOid) { var res = CreateCriteriaIsActive() .CreateAlias(ServiceInvoice.PropertyName_InvoiceBase, "ib", JoinType.InnerJoin) .Add(Restrictions.Eq("ib." + BeWoEntityBase.PropertyName_Oid, invoiceBaseOid)) .UniqueResult(); return res; } public IEnumerable GetAssessmentSheetEntriesForCustomer(long customerOid, DateTime startDt, DateTime endDt) { return CreateCriteriaIsActive() .CreateAlias(AssessmentSheetEntry.PropertyName_Customer, "c", JoinType.InnerJoin) .Add(Restrictions.Eq("c." + BeWoEntityBase.PropertyName_Oid, customerOid)) .Add(Restrictions.Ge(AssessmentSheetEntry.PropertyName_Day, startDt)) .Add(Restrictions.Lt(AssessmentSheetEntry.PropertyName_Day, endDt)) .List(); } public IList GetVarFieldDefs(TableID tid) { return CreateCriteriaIsActive() .Add(Restrictions.Eq(VarFieldDef.PropertyName_ObjectTid, tid)) .List(); } public IEnumerable FindTasksForEmployee(long employeeoid) { return CreateCriteriaIsActive() .CreateAlias(Task.PropertyName_SupportConcept, "sc", JoinType.InnerJoin) .CreateAlias("sc." + SupportConcept.PropertyName_Customer, "c", JoinType.InnerJoin) .CreateCriteria(Task.PropertyName_EmployeeList, JoinType.InnerJoin) .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, employeeoid)) .Add(Restrictions.Eq("sc." + BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.Eq("c." + BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .List(); } public List GetServiceInvoices(long costBearerOid, long? supportConceptOid, DateTimeSpan period) { var criteria = CreateCriteriaIsActive() .CreateAlias(ServiceInvoice.PropertyName_InvoiceBase, "ib", JoinType.InnerJoin) .Add(Restrictions.Eq("ib." + InvoiceBase.PropertyName_RecipientCostBearerOid, costBearerOid)) .Add(Restrictions.Eq("ib." + BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)); if (supportConceptOid.HasValue) criteria = criteria .Add(Restrictions.Eq("ib." + InvoiceBase.PropertyName_SupportConceptOid, supportConceptOid.Value)); if (period != null) criteria = criteria .Add(Restrictions.Or( Restrictions.Or( Restrictions.Between("ib." + InvoiceBase.PropertyName_AccountingPeriodStart, period.StartDateTime, period.EndDateTime), Restrictions.Between("ib." + InvoiceBase.PropertyName_AccountingPeriodEnd, period.StartDateTime, period.EndDateTime)), Restrictions.And( Restrictions.Le("ib." + InvoiceBase.PropertyName_AccountingPeriodStart, period.StartDateTime), Restrictions.Ge("ib." + InvoiceBase.PropertyName_AccountingPeriodEnd, period.EndDateTime)))); return criteria.List().ToList(); } public IEnumerable GetAssessmentSheetCategoryListForCustomer(long customerOid) { return CreateCriteriaIsActive() .CreateAlias(AssessmentSheetCategory.PropertyName_Customers, "c", JoinType.InnerJoin) .Add(Restrictions.Eq("c." + BeWoEntityBase.PropertyName_Oid, customerOid)) .List(); } public IEnumerable FindAbsenceTimes(bool fetchEmployees, bool fetchCustomers) { var criteria = CreateCriteriaIsActive(); if (!fetchEmployees) criteria = criteria .Add(Restrictions.IsNull(AbsenceTime.PropertyName_EmployeeOid)); else if (!fetchCustomers) criteria = criteria .Add(Restrictions.IsNull(AbsenceTime.PropertyName_CustomerOid)); return criteria.List().ToList(); } public IEnumerable FindAppointments(long? customerOid, long? employeeOid) { var criteria = CreateCriteriaIsActive(); if (employeeOid.HasValue) criteria = criteria .Add(Restrictions.Eq(AbsenceTime.PropertyName_EmployeeOid, employeeOid)); if (customerOid.HasValue) criteria = criteria .Add(Restrictions.Eq(AbsenceTime.PropertyName_CustomerOid, customerOid)); return criteria.List().ToList(); } public ServiceCategory FindDefaultIndividualServiceCategory() { return CreateCriteriaIsActive() .Add(Restrictions.Eq(ServiceCategory.PropertyName_ScopeType, ScopeTypeId.Individual)) .List().FirstOrDefault(); } public ServiceCategory FindServiceCategoryByName(String name) { return CreateCriteriaIsActive() .Add(Restrictions.Eq(ServiceCategory.PropertyName_Name, name)) .List().FirstOrDefault(); } public IEnumerable FindFileAttachmentInfoByType(FileAttachmentType type) { var criteria = CreateCriteria() .Add(Restrictions.Eq("Type", type)); return criteria.List().ToList(); } public IEnumerable GetAdditionalAssessmentSheetEntries(DateTime dateTime) { return CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_SystemEntryID, SystemEntryID.AdditionalServiceAssessmentSheet)) .Add(Restrictions.Eq(AssessmentSheetEntry.PropertyName_Day, dateTime.Date)) .List(); } public IEnumerable GetResourceAppointmentExceptionsWithIndexAndId(string info) { return CreateCriteria() .Add(Restrictions.Like(ResourceAppointment.PropertyName_RecurrenceInfo, info)) .List(); } public IEnumerable GetAdditionalServiceBookings(long? regionOid, DateTime start, DateTime end) { var criteria = CreateCriteriaIsActive() .Add(Restrictions.Between("Datum", start, end)); if (regionOid.HasValue) criteria = criteria.CreateAlias(AdditionalServiceBooking.PropertyName_AdditionalServiceRegion, "asr", JoinType.InnerJoin) .Add(Restrictions.Eq("asr." + BeWoEntityBase.PropertyName_Oid, regionOid)); return criteria.List(); } public IEnumerable GetAdditionalServiceBookingsForCustomer(long customerOid, DateTime start, DateTime end) { return CreateCriteriaIsActive() .CreateAlias(AdditionalServiceBooking.PropertyName_Customer2AddServiceBookings, "c2s", JoinType.InnerJoin) .Add(Restrictions.Between("Datum", start, end)) .Add(Restrictions.Eq("c2s.CustomerOid", customerOid)) .List(); } public AssessmentSheetCategory GetAddServiceAssessmentSheetCategoryWithName(string name) { return CreateCriteriaIsActive() .Add(Restrictions.Eq(AssessmentSheetCategory.PropertyName_Description, name)) .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_SystemEntryID, SystemEntryID.AdditionalServiceAssessmentSheet)) .List().FirstOrDefault(); } public IList GetBillableServiceRecords() { var c = CreateCriteria() .CreateAlias(ServiceRecord.PropertyName_ServiceDescription, "sd", JoinType.InnerJoin) .CreateAlias("sd." + ServiceDescription.PropertyName_ServiceCategory, "sc", JoinType.InnerJoin) .Add(Restrictions.Eq("sc." + ServiceCategory.PropertyName_IsBillable, true)); return c.List(); } public IEnumerable FindServiceDescriptionForCategory(long categoryOid) { var c = CreateCriteriaIsActive() .CreateAlias(ServiceDescription.PropertyName_ServiceCategory, "sc", JoinType.InnerJoin) .Add(Restrictions.Eq("sc."+ BeWoEntityBase.PropertyName_Oid, categoryOid)); return c.List(); } public IEnumerable FindServiceAccountingsForServiceDescriptions(IList descriptionOids) { var c = CreateCriteriaIsActive() .CreateAlias("ServiceDescription", "sd", JoinType.InnerJoin) .Add(Restrictions.In("sd." + BeWoEntityBase.PropertyName_Oid, descriptionOids.ToArray())); return c.List(); } public IList GetAllMedikamentenverordnungslistenButNewestByCustomerOid(long customerOid, long newestOid, bool isBedarfsListe) { var c = CreateCriteria() .CreateAlias(Medikamentenverordnungsliste.PropertyName_Customer, "c") .Add(Restrictions.Eq("c." + BeWoEntityBase.PropertyName_Oid, customerOid)) .Add(Restrictions.Not(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, newestOid))) .Add(Restrictions.Eq(Medikamentenverordnungsliste.PropertyName_MedListType, isBedarfsListe)); return c.List(); } public IList GetAllOpenAppointmentsForEmployee(long employeeOid) { var c = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.Not(Restrictions.Eq(SchedulerAppointment.PropertyName_Originator + ".Oid", employeeOid))) .CreateCriteria(SchedulerAppointment.PropertyName_EmployeeList) .Add(Restrictions.And(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_Employee + ".Oid", employeeOid), Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_ParticipationAnswer, ParticipationAnswer.Offen))); return c.List(); } public IEnumerable GetAllParticipationNotificationsForEmployee(long employeeOid) { var c = CreateCriteria() .Add(Restrictions.And(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active), Restrictions.Eq(SchedulerAppointment.PropertyName_Originator + ".Oid", employeeOid))) .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .CreateCriteria(SchedulerAppointment.PropertyName_EmployeeList) .Add(Restrictions.And(Restrictions.And(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_IsPChanged, true), Restrictions.Not(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_Employee + ".Oid", employeeOid))), Restrictions.Not(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_ParticipationAnswer, ParticipationAnswer.Offen)))) .Add(Restrictions.IsNull(Employee2SchedulerAppointment.PropertyName_IsPC_CheckedTs)); var result = c.List(); return result; } public IEnumerable GetRemovedEmp2AppObjectsBySchAppOid(long schAppOid) { var c = CreateCriteria() .Add(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_SchedulerAppointment, schAppOid)); return c.List(); } public IEnumerable GetAllActiveAndNotDeclinedForEmployeeAppointments(long employeeOid) { var detachedCriteria = DetachedCriteria.For() .Add(Restrictions.And(Restrictions.Not(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_Employee + ".Oid", employeeOid)), Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_ParticipationAnswer, ParticipationAnswer.Absage))); detachedCriteria.SetProjection(Projections.Property(Employee2SchedulerAppointment.PropertyName_SchedulerAppointment)); var crit = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.Or(Restrictions.Eq(SchedulerAppointment.PropertyName_Originator + ".Oid", employeeOid), Subqueries.PropertyIn(BeWoEntityBase.PropertyName_Oid, detachedCriteria))); return crit.List(); } public bool ResetPasswordCodeExists(string code, long userOid) { var c = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, userOid)) .CreateCriteria(ApplicationUser.PropertyName_ResetPasswordInfos) .Add(Restrictions.Eq(ResetPasswordInfo.PropertyName_Code, code)); return c.List().Count > 0; } public bool OverlappingAppointmentsExist(DateTime start, DateTime end, IEnumerable employees, IEnumerable customers, IEnumerable resources, long originator, long? appointmentOid, string recurrenceId = "", int occurrenceIndex = 0) { var criteria = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.Or( Restrictions.Or( Restrictions.And( Restrictions.Gt(SchedulerAppointment.PropertyName_EndDate, start), Restrictions.Lt(SchedulerAppointment.PropertyName_EndDate, end) ), Restrictions.And( Restrictions.Gt(SchedulerAppointment.PropertyName_StartDate, start), Restrictions.Lt(SchedulerAppointment.PropertyName_StartDate, end) ) ), Restrictions.Or( Restrictions.And( Restrictions.Lt(SchedulerAppointment.PropertyName_StartDate, start), Restrictions.Gt(SchedulerAppointment.PropertyName_EndDate, start) ), Restrictions.And( Restrictions.Eq(SchedulerAppointment.PropertyName_StartDate, start), Restrictions.Eq(SchedulerAppointment.PropertyName_EndDate, end) ) ) ) ); // TODO: nicht wichtig - ignorieren // TODO: RecurrenceInfo in die Parameter aufnehmen (wie beim Laden der Termine) // TODO: Periodicity beachten! OR RecurrenceInfo NOT LIKE '%Range%' AND RecurrenceInfo NOT LIKE '%Index%' // OR RecurrenceInfo NOT LIKE '%Range%' AND RecurrenceInfo NOT LIKE '%Index%' //var recurrenceBetween = String.Format( // "'{0} 00:00:00' BETWEEN STR_TO_DATE(SUBSTRING({1}, 24, 19), '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE(SUBSTRING({1}, 50, 19), '%m/%d/%Y %H:%i:%s') " + // "AND(" + // "(" + // "(" + // "TIME({5}) > '{2}' AND TIME({5}) < '{3}'" + // ") " + // "OR(" + // "TIME({4}) > '{2}' AND TIME({4}) < '{3}'" + // ")" + // ") " + // "OR (" + // "(" + // "TIME({4}) > '{2}' AND TIME({5}) < '{2}'" + // ") " + // "OR(" + // "TIME({4}) > '{2}' AND TIME({5}) < '{3}'" + // ")" + // ")" + // ") OR {1} NOT LIKE '%Range=\"%' AND Type <> 3 AND Type <> 4", // start.ToString("yyyy-MM-dd"), // SchedulerAppointment.PropertyName_RecurrenceInfo, // start.ToString("HH:mm:ss"), // end.ToString("HH:mm:ss"), // SchedulerAppointment.PropertyName_StartDate, // SchedulerAppointment.PropertyName_EndDate); //criteria = CreateCriteria() // .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) // .Add(Restrictions.Or( // Restrictions.Or( // Restrictions.Or( // Restrictions.And( // Restrictions.Gt(SchedulerAppointment.PropertyName_EndDate, start), // Restrictions.Lt(SchedulerAppointment.PropertyName_EndDate, end) // ), // Restrictions.And( // Restrictions.Gt(SchedulerAppointment.PropertyName_StartDate, start), // Restrictions.Lt(SchedulerAppointment.PropertyName_StartDate, end) // ) // ), // Restrictions.Or( // Restrictions.And( // Restrictions.Lt(SchedulerAppointment.PropertyName_StartDate, start), // Restrictions.Gt(SchedulerAppointment.PropertyName_EndDate, start) // ), // Restrictions.And( // Restrictions.Eq(SchedulerAppointment.PropertyName_StartDate, start), // Restrictions.Eq(SchedulerAppointment.PropertyName_EndDate, end) // ) // ) // ), // Expression.Sql(new SqlString(recurrenceBetween)) // ) // ); if (appointmentOid != null) { criteria.Add(Restrictions.Not(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, appointmentOid))); } var appTmp = criteria.List(); var appointments = appTmp.Where(a => { if (a.RecurrenceInfo == null) { return true; } var recId = GetSpecificValueFromRecurrenceInfo(a.RecurrenceInfo, a.RecurrenceInfo.IndexOf("Id=\"") + 4); var index = GetSpecificValueFromRecurrenceInfo(a.RecurrenceInfo, a.RecurrenceInfo.IndexOf("Index=\"") + 7); int intIndex; Int32.TryParse(index, out intIndex); return !(recurrenceId.Equals(recId) && occurrenceIndex == intIndex); }); var schedulerAppointments = appointments as IList ?? appointments.ToList(); var oidList = new List(); foreach (var appointment in schedulerAppointments) { oidList.AddRange(appointment.EmployeeList.Select(rel => rel.Employee.Oid != null ? rel.Employee.Oid.Value : 0)); } var emp = oidList.Intersect(employees).Any(); var cus = schedulerAppointments.Any(app => app.CustomerList.Select(c => c.Oid != null ? c.Oid.Value : 0).Intersect(customers).Any()); var res = schedulerAppointments.Any(app => app.ResourceList.Select(r => r.Oid != null ? r.Oid.Value : 0).Intersect(resources).Any()); var ori = schedulerAppointments.Any(app => app.Originator.Oid.HasValue && app.Originator.Oid.Value == originator && (app.EmployeeList.Count == 0 || app.EmployeeList.Any(a => a.Employee.Oid.HasValue && a.Employee.Oid.Value == originator))); return emp || cus || res || ori; } public IEnumerable GetAllActiveAppointmentsForEmployeeInInterval(DateTime start, DateTime end, long pEmployeeOid) { var detachedCriteria = DetachedCriteria.For() .Add(Restrictions.And(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_Employee + ".Oid", pEmployeeOid), Restrictions.Not(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_ParticipationAnswer, ParticipationAnswer.Absage)))); detachedCriteria.SetProjection(Projections.Property(Employee2SchedulerAppointment.PropertyName_SchedulerAppointment)); var recurrenceBetween = String.Format("'{0} 00:00:00' BETWEEN STR_TO_DATE(SUBSTRING({1}, 24, 19), '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE(SUBSTRING({1}, 50, 19), '%m/%d/%Y %H:%i:%s')", start.ToString("yyyy-MM-dd"), SchedulerAppointment.PropertyName_RecurrenceInfo); var hasResources = String.Format("{0} IN (SELECT newschappoid FROM resource2newschapp)", BeWoEntityBase.PropertyName_Oid); var criteria = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.Or( Restrictions.And( Restrictions.Not(Restrictions.Like(SchedulerAppointment.PropertyName_RecurrenceInfo, "Range", MatchMode.Anywhere)), Restrictions.Like(SchedulerAppointment.PropertyName_RecurrenceInfo, "OccurrenceCount=\"10\"", MatchMode.Anywhere)), Restrictions.Or( Restrictions.Or( Restrictions.And(Restrictions.Lt(SchedulerAppointment.PropertyName_StartDate, end), Restrictions.Ge(SchedulerAppointment.PropertyName_EndDate, start)), Restrictions.And(Restrictions.IsNotNull(SchedulerAppointment.PropertyName_RecurrenceInfo), Expression.Sql(new SqlString(recurrenceBetween)))), Restrictions.And(Restrictions.Eq(SchedulerAppointment.PropertyName_Type, 3), Expression.Sql(new SqlString(recurrenceBetween)))))) .Add(Restrictions.Or( Expression.Sql(new SqlString(hasResources)), Restrictions.Or( Restrictions.Eq(SchedulerAppointment.PropertyName_Originator + ".Oid", pEmployeeOid), Subqueries.PropertyIn(BeWoEntityBase.PropertyName_Oid, detachedCriteria)))); return criteria.List(); } public IEnumerable GetAllActiveAppointmentsInInterval(DateTime start, DateTime end) { var recurrenceBetween = String.Format("'{0} 00:00:00' BETWEEN STR_TO_DATE(SUBSTRING({1}, 24, 19), '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE(SUBSTRING({1}, 50, 19), '%m/%d/%Y %H:%i:%s')", start.ToString("yyyy-MM-dd"), SchedulerAppointment.PropertyName_RecurrenceInfo); var criteria = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.Or( Restrictions.And(Restrictions.Not(Restrictions.Like(SchedulerAppointment.PropertyName_RecurrenceInfo, "Range", MatchMode.Anywhere)), Restrictions.Like(SchedulerAppointment.PropertyName_RecurrenceInfo, "OccurrenceCount=\"10\"", MatchMode.Anywhere)), Restrictions.Or( Restrictions.Or( Restrictions.And(Restrictions.Lt(SchedulerAppointment.PropertyName_StartDate, end), Restrictions.Ge(SchedulerAppointment.PropertyName_EndDate, start)), Restrictions.And(Restrictions.IsNotNull(SchedulerAppointment.PropertyName_RecurrenceInfo), Expression.Sql(new SqlString(recurrenceBetween)))), Restrictions.And(Restrictions.Eq(SchedulerAppointment.PropertyName_Type, 3), Expression.Sql(new SqlString(recurrenceBetween)))))); return criteria.List(); } private static string GetSpecificValueFromRecurrenceInfo(string str, int startIndex) { var valueBuilder = new StringBuilder(); for (; startIndex < str.Length; startIndex++) { var cr = str[startIndex]; if (cr.Equals('"')) break; valueBuilder.Append(cr); } return valueBuilder.ToString(); } public ResourceBooking GetFirstResourceBookingFromSequence(long sequenceOid) { return CreateCriteria() .Add(Restrictions.Eq(ResourceBooking.PropertyName_SequencePosition, 0)) .CreateAlias(ResourceBooking.PropertyName_Sequence, "s") .Add(Restrictions.Eq("s." + BeWoEntityBase.PropertyName_Oid, sequenceOid)).UniqueResult(); } public List GetExcludedBookingSequencePositions(long sequenceOid) { var c = CreateCriteria() .Add(Restrictions.Gt(ResourceBooking.PropertyName_SequencePosition, 0)) .CreateAlias(ResourceBooking.PropertyName_Sequence, "s") .Add(Restrictions.Eq("s." + BeWoEntityBase.PropertyName_Oid, sequenceOid)).List(); return c.Select(s => s.SequencePosition).ToList(); } public IEnumerable GetInvoiceBases(DateTime? startDate, DateTime? endDate) { var lCriteria = CreateCriteriaIsActive(); if (startDate.HasValue) lCriteria.Add(Restrictions.Ge(InvoiceBase.PropertyName_InvoiceDate, startDate)); if (endDate.HasValue) lCriteria.Add(Restrictions.Le(InvoiceBase.PropertyName_InvoiceDate, endDate)); return lCriteria.List(); } public IEnumerable GetAllActiveSupportConceptsByCustomers(List customerOids, bool expiredOnesToo = false) { var c = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .CreateAlias(SupportConcept.PropertyName_Customer, "c") .Add(Restrictions.In("c." + BeWoEntityBase.PropertyName_Oid, customerOids)); if (expiredOnesToo) { } return c.List(); } public IEnumerable FindServiceRecordsForDays(long? costBearer2SupportConceptOid, int dayCount, long? employeeOid) { var minStart = DateTime.Now.AddDays(-dayCount); var c = CreateCriteriaIsActive(); if (costBearer2SupportConceptOid.HasValue) { c.Add(Restrictions.Eq(ServiceRecord.PropertyName_CostBearer2SupportConceptOid, costBearer2SupportConceptOid)); } else { c.Add(Restrictions.Eq(ServiceRecord.PropertyName_EmployeeOid, employeeOid)) .Add(Restrictions.IsNull(ServiceRecord.PropertyName_CostBearer2SupportConceptOid)); } if (dayCount > 0) { c.Add(Restrictions.Ge(ServiceRecord.PropertyName_Start, minStart)); } return c.List(); } // Veraltet public IEnumerable FindAppointmentsForPrintingForEmployee(long employeeOid, List selectedDates, List userRights) { var abfrage = string.Format("SELECT Oid FROM newschedulerappointment WHERE IsActive = 1 AND "); var or = string.Empty; foreach (var d in selectedDates) { or += string.Format("StartDate LIKE '{0}%' OR RecurrenceInfo IS NOT NULL AND '{0} 00:00:00' BETWEEN STR_TO_DATE(SUBSTRING({1}, 24, 19), '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE(SUBSTRING({1}, 50, 19), '%m/%d/%Y %H:%i:%s')", d.ToString("yyyy-MM-dd"), SchedulerAppointment.PropertyName_RecurrenceInfo); if (selectedDates.IndexOf(d) < selectedDates.Count - 1) { or += " OR "; } } abfrage += or; var sa = Session.CreateSQLQuery(abfrage); var l = sa.List().ToList(); var c = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, l)); c.CreateCriteria(SchedulerAppointment.PropertyName_EmployeeList) .Add(Restrictions.And( Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_Employee + ".Oid", employeeOid), Restrictions.Not(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_ParticipationAnswer, ParticipationAnswer.Absage)))); return c.List(); } public IEnumerable GetActiveTextbausteineByServiceCategory(long pServiceCategoryOid) { var c = CreateCriteriaIsActive(); c.Add(Restrictions.Or(Restrictions.Eq(Textbaustein.PropertyName_ServiceCategory + ".Oid", pServiceCategoryOid), Restrictions.IsNull(Textbaustein.PropertyName_ServiceCategory))); return c.List(); } public IEnumerable GetAllActiveAppointmentsForEmployeeInInterval2(DateTime start, DateTime end, List pEmployeeOids) { var detachedCriteria = DetachedCriteria.For() .Add(Restrictions.And(Restrictions.In(Employee2SchedulerAppointment.PropertyName_Employee + ".Oid", pEmployeeOids), Restrictions.Not(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_ParticipationAnswer, ParticipationAnswer.Absage)))); detachedCriteria.SetProjection(Projections.Property(Employee2SchedulerAppointment.PropertyName_SchedulerAppointment)); var recurrenceBetween = String.Format("'{0} 00:00:00' BETWEEN STR_TO_DATE(SUBSTRING({1}, 24, 19), '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE(SUBSTRING({1}, 50, 19), '%m/%d/%Y %H:%i:%s')", start.ToString("yyyy-MM-dd"), SchedulerAppointment.PropertyName_RecurrenceInfo); var hasResources = String.Format("{0} IN (SELECT newschappoid FROM resource2newschapp)", BeWoEntityBase.PropertyName_Oid); var criteria = CreateCriteria() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .Add(Restrictions.Or( Restrictions.And( Restrictions.Not(Restrictions.Like(SchedulerAppointment.PropertyName_RecurrenceInfo, "Range", MatchMode.Anywhere)), Restrictions.Like(SchedulerAppointment.PropertyName_RecurrenceInfo, "OccurrenceCount=\"10\"", MatchMode.Anywhere)), Restrictions.Or( Restrictions.Or( Restrictions.And(Restrictions.Lt(SchedulerAppointment.PropertyName_StartDate, end), Restrictions.Ge(SchedulerAppointment.PropertyName_EndDate, start)), Restrictions.And(Restrictions.IsNotNull(SchedulerAppointment.PropertyName_RecurrenceInfo), Expression.Sql(new SqlString(recurrenceBetween)))), Restrictions.And(Restrictions.Eq(SchedulerAppointment.PropertyName_Type, 3), Expression.Sql(new SqlString(recurrenceBetween)))))) .Add(Restrictions.Or( Expression.Sql(new SqlString(hasResources)), Restrictions.Or( Restrictions.In(SchedulerAppointment.PropertyName_Originator + ".Oid", pEmployeeOids), Subqueries.PropertyIn(BeWoEntityBase.PropertyName_Oid, detachedCriteria)))); return criteria.List(); } public IEnumerable FilterEmployeesWithAppointments(List pEmployeeOids, DateTime pStartTime, DateTime pEndTime) { // Testzeitraum vom 10.08.2015 18:00 bis zum 10.08.2015 18:30 var result = new List(); var appointments = GetAllActiveAppointmentsForEmployeeInInterval2(pStartTime, pEndTime, pEmployeeOids); var gefilterteTermine = appointments.Where(w => w.EmployeeList.Select(s => s.Employee.Oid.Value).Intersect(pEmployeeOids).Any() || !w.EmployeeList.Select(s => s.Employee.Oid.Value).Intersect(pEmployeeOids).Any() && pEmployeeOids.Contains(w.Originator.Oid.Value)); foreach (var x in gefilterteTermine) { result.AddRangeIfElementsNotIn(x.EmployeeList.Select(s => s.Oid.Value)); result.AddIfNotIn(x.Originator.Oid.Value); } var c = CreateCriteria() .Add(Restrictions.In(AbsenceTime.PropertyName_EmployeeOid, pEmployeeOids)) .Add(Restrictions.Or( Restrictions.Or( Restrictions.Or( Restrictions.And( Restrictions.Eq(AbsenceTime.PropertyName_Start, pStartTime), Restrictions.Eq(AbsenceTime.PropertyName_End, pEndTime)), Restrictions.And( Restrictions.And( Restrictions.Lt(AbsenceTime.PropertyName_Start, pStartTime), Restrictions.Lt(AbsenceTime.PropertyName_End, pStartTime)), Restrictions.Gt(AbsenceTime.PropertyName_End, pEndTime))), Restrictions.And( Restrictions.Lt(AbsenceTime.PropertyName_Start, pStartTime), Restrictions.Gt(AbsenceTime.PropertyName_End, pStartTime))), Restrictions.And( Restrictions.Gt(AbsenceTime.PropertyName_Start, pStartTime), Restrictions.Lt(AbsenceTime.PropertyName_End, pEndTime)))); var abwesenheiten = c.List(); foreach (var abwesenheit in abwesenheiten) { result.AddIfNotIn(abwesenheit.EmployeeOid.Value); } return result; } public IEnumerable GetTasksForEmployeeByDate(long employeeOid,DateTime date){ var c = CreateCriteria().Add(Restrictions.Between(Task.PropertyName_DueDate, date,date.AddDays(1))). CreateCriteria(Task.PropertyName_EmployeeList, JoinType.InnerJoin) .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, employeeOid)).List(); return c; } public Wohnheimbuchung GetWohnheimbuchungByWohnheimAndBuchungsdatum(long pWohnheimOid, DateTime pBuchungsdatum) { var c = CreateCriteriaIsActive(); c.Add(Restrictions.Eq(Wohnheimbuchung.PropertyName_Buchungsdatum, pBuchungsdatum)) .Add(Restrictions.Eq(String.Format("{0}.Oid", Wohnheimbuchung.PropertyName_Wohnheim), pWohnheimOid)); return c.UniqueResult(); } public List FindWohnheimbuchungsServiceRecords(long pWohnheimbuchungsOid) { var c = CreateCriteria() .Add(Restrictions.Eq(ServiceRecord.PropertyName_WohnheimbuchungsOid, pWohnheimbuchungsOid)); return c.List().ToList(); } public bool CheckIfUserGroupIsLastWithUserGroupEditingRights(List pUserGroupOids) { var dc = DetachedCriteria.For() .Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active)) .SetProjection(Projections.Property(BeWoEntityBase.PropertyName_Oid)); var c = CreateCriteriaIsActive() .Add(Restrictions.Not(Restrictions.In(RightRelation.PropertyName_UserGroupOid, pUserGroupOids))) .Add(Restrictions.In(RightRelation.PropertyName_RightType, new[] { UserRightType.UserGroupView_View, UserRightType.UserGroupView_Edit, UserRightType.ViewAll, UserRightType.EditAll })) .Add(Subqueries.PropertyIn(RightRelation.PropertyName_UserGroupOid, dc)); var result = c.List(); var nachUserGroupOidSortiert = new Dictionary>(); foreach (var relation in result) { nachUserGroupOidSortiert.AddOrUpdateValueInDictionary(relation.UserGroupOid.Value, relation.RightType); } var minRights2 = nachUserGroupOidSortiert.Any(intersection => intersection.Value.Contains(UserRightType.UserGroupView_Edit) && intersection.Value.Contains(UserRightType.ViewAll) || intersection.Value.Contains(UserRightType.UserGroupView_Edit) && intersection.Value.Contains(UserRightType.UserGroupView_View) || intersection.Value.Contains(UserRightType.EditAll) && intersection.Value.Contains(UserRightType.ViewAll) || intersection.Value.Contains(UserRightType.EditAll) && intersection.Value.Contains(UserRightType.UserGroupView_View)); return minRights2 == false; } public ServiceDescription FindServiceDescriptionForWohnheimbuchungsServiceRecord(long pWohnheimbuchungsOid) { var dc = DetachedCriteria.For() .Add(Restrictions.Eq(ServiceRecord.PropertyName_WohnheimbuchungsOid, pWohnheimbuchungsOid)) .SetProjection(Projections.Property(ServiceRecord.PropertyName_ServiceDescription + ".Oid")); var c = CreateCriteriaIsActive() .Add(Subqueries.PropertyIn(BeWoEntityBase.PropertyName_Oid, dc)).SetMaxResults(1); return c.List().FirstOrDefault(); } public IEnumerable FindBargeldkasse(TableID objectTid, long objectOid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(Bargeldkasse.PropertyName_ObjectTid, objectTid)) .Add(Restrictions.Eq(Bargeldkasse.PropertyName_ObjectOid, objectOid)); return c.List().ToList(); } public IEnumerable FindMedRecordsForCustomer(long pCustomerOid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(MedRecord.PropertyName_Customer + ".Oid", pCustomerOid)); return c.List().ToList(); } public IEnumerable FindAllChatActiveCustomers() { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(CustomerAPPCode.PropertyName_IsChatAktiv, 1)); var codes = c.List().Select(s => s.CustomerOid.Value).ToArray(); var c2 = CreateCriteriaIsActive() .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, codes)); return c2.List(); } public IEnumerable FindAllChatpartnerEmployee2Customer(long pRecipientOid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(Employee2Customer.PropertyName_EmployeeOid, pRecipientOid)) .Add(Restrictions.Eq(Employee2Customer.PropertyName_Chatpartner,true)); return c.List(); } public IEnumerable FindAllChatMessages(long senderOid, long empfaengerOid) { var c = CreateCriteriaIsActive() .Add( Restrictions.Or( Restrictions.And( Restrictions.Eq(ChatMessage.PropertyName_SenderPersonOid, senderOid), Restrictions.Eq(ChatMessage.PropertyName_EmpfaengerPersonOid, empfaengerOid)), Restrictions.And( Restrictions.Eq(ChatMessage.PropertyName_SenderPersonOid, empfaengerOid), Restrictions.Eq(ChatMessage.PropertyName_EmpfaengerPersonOid, senderOid)))); return c.List(); } public IEnumerable FindAllChatMessagesFromTeam(long senderOid, long teamOid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(ChatMessage.PropertyName_TeamOid, teamOid)); return c.List(); } public IEnumerable FindAllEmpfängerChatMessages(long senderOid, long empfaengerOid) { var c = CreateCriteriaIsActive() .Add(Restrictions.And( Restrictions.Eq(ChatMessage.PropertyName_SenderPersonOid, senderOid), Restrictions.Eq(ChatMessage.PropertyName_EmpfaengerPersonOid, empfaengerOid))); return c.List(); } public IEnumerable FindAllChatActiveEmployees() { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(EmployeeAPPCode.PropertyName_IsChatAktiv, 1)); var codes = c.List().Select(s => s.EmployeeOid.Value).ToArray(); var c2 = CreateCriteriaIsActive() .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, codes)); return c2.List(); } public bool CheckIfEmployeeIsAllowedToChat(long pPersonOid) { var employee = FindEmployeeWithPersonOid(pPersonOid); var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(EmployeeAPPCode.PropertyName_IsChatAktiv, 1)) .Add(Restrictions.Eq(EmployeeAPPCode.PropertyName_EmployeeOid, employee.Oid)); var codes = c.List().ToArray(); return codes.Length > 0; } public IEnumerable FindAllEmployeeAppCodes(long oid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(EmployeeAPPCode.PropertyName_EmployeeOid, oid)); return c.List(); } public IEnumerable FindAllCustomerAppCodes(long oid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(CustomerAPPCode.PropertyName_CustomerOid, oid)); return c.List(); } public IEnumerable FindAllChatMessagesForAndroid(long pSenderOid, long pRecipientOid, List pExceptions, bool pForTeam) { var c = CreateCriteriaIsActive() .Add( Restrictions.Or( Restrictions.And( Restrictions.Eq(ChatMessage.PropertyName_SenderPersonOid, pSenderOid), Restrictions.Eq(ChatMessage.PropertyName_EmpfaengerPersonOid, pRecipientOid)), Restrictions.And( Restrictions.Eq(ChatMessage.PropertyName_SenderPersonOid, pRecipientOid), Restrictions.Eq(ChatMessage.PropertyName_EmpfaengerPersonOid, pSenderOid)))) .Add(Restrictions.Not(Restrictions.In(ChatMessage.PropertyName_MessageId, pExceptions))) .Add(Restrictions.IsNull(ChatMessage.PropertyName_TeamOid)); if(pForTeam) { c = CreateCriteriaIsActive() .Add(Restrictions.Eq(ChatMessage.PropertyName_TeamOid, pRecipientOid)) .Add(Restrictions.Not(Restrictions.In(ChatMessage.PropertyName_MessageId, pExceptions))); } return c.List(); } //public IEnumerable FindAllUnreadChatMessages(List pExceptions) //{ // var c = CreateCriteriaIsActive() // .Add(Restrictions.Not(Restrictions.In(ChatMessage.PropertyName_MessageId, pExceptions))); // return c.List(); //} public Dictionary FindAllChatAuthorizedPersonsForEmployee(long pEmployeeOid) { var result = new Dictionary(); var employee = CreateCriteriaIsActive().Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, pEmployeeOid)).UniqueResult(); var relatedCustomerOids = employee.Employee2CustomerList.Select(s => s.CustomerOid.Value); var c1 = CreateCriteriaIsActive() .Add(Restrictions.Eq(CustomerAPPCode.PropertyName_IsChatAktiv, 1)); var codes = c1.List().Select(s => s.CustomerOid.Value).ToArray(); var c2 = CreateCriteriaIsActive() .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, codes)) .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, relatedCustomerOids.ToList())); var customers = c2.List(); var employees = FindAllChatActiveEmployees(); employees.DoForEach(d => result.Add(d.Person, true)); customers.DoForEach(d => result.Add(d.Person, false)); return result; } public IEnumerable FindUnreadChatMessagesForRecipient(long pRecipientOid) { var c = CreateCriteriaIsActive() .Add(Restrictions.Eq(ChatMessage.PropertyName_EmpfaengerPersonOid, pRecipientOid)) .Add(Restrictions.Eq(ChatMessage.PropertyName_IstGelesen, 0)); return c.List(); } public IEnumerable FindNewestChatMessages(long pRecipientPersonOid) { var query2 = Session.CreateSQLQuery(string.Format("SELECT MAX({0}) FROM chatmessages WHERE ({1} = {2} OR {3} = {2}) AND {4} IS NULL OR {4} IS NOT NULL AND {1} IN (SELECT t.{0} FROM Team t JOIN employee2team e ON e.{4} = t.{0}) GROUP BY {1}, {3}", BeWoEntityBase.PropertyName_Oid, ChatMessage.PropertyName_EmpfaengerPersonOid, pRecipientPersonOid, ChatMessage.PropertyName_SenderPersonOid, "TeamOid")); var result = query2.List(); return result.Count > 0 ? DAOFactory.GenericDAO.LoadByIDs(result) : new List(); } public IEnumerable FindChatMessageIds(List messageIds) { var c = CreateCriteria() .Add(Restrictions.In(ChatMessage.PropertyName_MessageId, messageIds)); var liste = c.List(); return liste.Select(s => s.MessageId); } } }