<%@ Control Language="C#" Inherits="Bone.Ascx" %>
<%@ Import Namespace="Bone" %>
<%@ Import Namespace="Cms" %>
<%@ Import Namespace="Metabyte" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Collections.Generic" %>
<% Bone.Widget x = (Bone.Widget)obj; %>
<% Bone.DBItem item = (Bone.DBItem)obj2; %>
<% string ObjectType = (string)obj3; %>
<% Bone.ID idObject = (Bone.ID)obj4; %>
<% Dictionary parameters = (Dictionary)obj5; %>
<%
StringBuilder s=new StringBuilder();
bool proceed = true;
bool filterApplied=false;
string groupTitle="";
Dictionary Options = new Dictionary();
Options.Add((ID)1, BONE.Dictionary["SpecialOffer"]);
IDList OptionsList = IDList.Parse(Http.Get["GroupOptions"]);
DBList Destinations = new DBList();
if(parameters.ContainsKey("Destinations"))foreach(string key in parameters["Destinations"].Split(','))if(!string.IsNullOrEmpty(key))Destinations.Add(GroupListData.Retrieve(Bone.ID.ParseHex(key)));
DBList Seasons = new DBList();
if(parameters.ContainsKey("Seasons"))foreach(string key in parameters["Seasons"].Split(','))if(!string.IsNullOrEmpty(key))Seasons.Add(GroupListData.Retrieve(Bone.ID.ParseHex(key)));
DateTime? PeriodFrom = null;
if(parameters.ContainsKey("DateFrom")){try{ PeriodFrom=DateTime.ParseExact(parameters["DateFrom"],"dd/MM/yyyy",BONE.Culture); }catch(Exception){}}
DateTime? PeriodTill = null;
if(parameters.ContainsKey("DateTill")){try{ PeriodTill=DateTime.ParseExact(parameters["DateTill"],"dd/MM/yyyy",BONE.Culture); }catch(Exception){}}
List TravelBy = new List();
if(parameters.ContainsKey("TravelBy"))foreach(string key in parameters["TravelBy"].Split(','))if(!string.IsNullOrEmpty(key))TravelBy.Add(byte.Parse(key));
DBList Groups = new DBList();
if(parameters.ContainsKey("Groups"))foreach(string key in parameters["Groups"].Split(','))if(!string.IsNullOrEmpty(key))Groups.Add(Metabyte.PackageGroup.Retrieve(Bone.ID.ParseHex(key)));
List Durations = new List();
if(parameters.ContainsKey("Duration"))foreach(string key in parameters["Duration"].Split(','))if(!string.IsNullOrEmpty(key))Durations.Add(int.Parse(key));
int pagesize=12;
if(parameters.ContainsKey("Paging")){try{ pagesize=int.Parse(parameters["Paging"]); }catch(Exception){}}
List Grouping = new List();
//if(parameters.ContainsKey("Grouping"))foreach(string key in parameters["Grouping"].Split(','))if(!string.IsNullOrEmpty(key))Grouping.Add(key);
string PackagesList = null;
if (parameters.ContainsKey("Packages")) PackagesList = parameters["Packages"].Trim(',');
List DepartureFrom = new List();
if (parameters.ContainsKey("DepartureFrom"))foreach(string key in parameters["DepartureFrom"].Split(','))if(!string.IsNullOrEmpty(key))DepartureFrom.Add(key);
string DisplayAs = null;
if (parameters.ContainsKey("DisplayAs"))foreach(string key in parameters["DisplayAs"].Split(','))if(!string.IsNullOrEmpty(key)){DisplayAs=key; break;}
if(!string.IsNullOrEmpty(DisplayAs) && DisplayAs.ToLower()=="table" && Grouping.Count==0)Grouping.Add("destination");
string where = null;
if (Destinations.Count>0) {
where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (Destination IN (" + string.Join(",",Destinations.Select(ss=>""+(Js)ss.Data).ToArray()) + ")";
foreach(GroupListData destination in Destinations) where+=" OR ExtraDestinations LIKE '%"+destination.id.Hex+"%' ";
where +=")";
}
if(!string.IsNullOrEmpty(Http.Get["GroupByDestination"])){
IDList destinationGroups=IDList.Parse(Http.Get["GroupByDestination"]);
DBList DestinationGroups = new DBList();foreach(Bone.ID id in destinationGroups)DestinationGroups.Add(GroupListData.Retrieve(id));
if(DestinationGroups.Count>0){
where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (Destination IN (" + string.Join(",",DestinationGroups.Select(ss=>""+(Js)ss.Data).ToArray()) + ")";
foreach(GroupListData destination in DestinationGroups) where+=" OR ExtraDestinations LIKE '%"+destination.id.Hex+"%' ";
where +=")";
groupTitle+=(!string.IsNullOrEmpty(groupTitle)?" - ":"")+string.Join(", ",DestinationGroups.Select(ss=>""+ss.Data).ToArray());
}
filterApplied=true;
}
if (Seasons.Count>0) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (SeasonCategory IN (" + string.Join(",",Seasons.Select(ss=>""+(Js)ss.Data).ToArray()) + "))";
if (!string.IsNullOrEmpty(PackagesList)) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (id IN (" + PackagesList + "))";
if (Durations.Count>0) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (Duration IN (" + string.Join(",",Durations.Select(ss=>""+ss).ToArray()) + "))";
if(!string.IsNullOrEmpty(Http.Get["GroupByDuration"])){
int DurationGroup=Http.Get["GroupByDuration"];
if(DurationGroup>0){
where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (Duration IN (" + DurationGroup + ")";
where +=")";
groupTitle+=(!string.IsNullOrEmpty(groupTitle)?" - ":"")+DurationGroup+" "+BONE.Dictionary["Days"];
}
filterApplied=true;
}
if (TravelBy.Count>0) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (PackageType IN (" + string.Join(",",TravelBy.Select(ss=>""+ss).ToArray()) + "))";
if(!string.IsNullOrEmpty(Http.Get["GroupByTravelBy"])){
byte? TravelByGroup=Http.Get["GroupByTravelBy"];
if(TravelByGroup!=null){
where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (PackageType IN (" + TravelByGroup + ")";
where +=")";
groupTitle+=(!string.IsNullOrEmpty(groupTitle)?" - ":"")+BONE.GetEnumerationCaption(typeof(Package.PackageTypeEnum), (object)(Package.PackageTypeEnum)TravelByGroup);
}
filterApplied=true;
}
if(!string.IsNullOrEmpty(Http.Get["GroupBySeason"])){
IDList seasonGroups=IDList.Parse(Http.Get["GroupBySeason"]);
DBList SeasonGroups = new DBList();foreach(Bone.ID id in seasonGroups)SeasonGroups.Add(GroupListData.Retrieve(id));
if(SeasonGroups.Count>0){
where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (SeasonCategory IN (" + string.Join(",",SeasonGroups.Select(ss=>""+(Js)ss.Data).ToArray()) + ")";
where +=")";
groupTitle+=(!string.IsNullOrEmpty(groupTitle)?" - ":"")+string.Join(", ",SeasonGroups.Select(ss=>""+ss.Data).ToArray());
}
filterApplied=true;
}
if (Groups.Count>0) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (idGroup IN (" + string.Join(",",Groups.Select(ss=>""+ss.id).ToArray()) + "))";
where += (!string.IsNullOrEmpty(where) ? " AND " : " ");
where += " id IN (SELECT idPackage FROM mtbPackageDepartures WHERE DepartureDate>=" + (Sql)new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0).AddDays(1) + " AND Published=1 AND Cancelled!=1 AND AdultPriceOnDBL>0 ";
if (PeriodFrom != null) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + "DepartureDate>=" + (Sql)PeriodFrom.Value;
if (PeriodTill != null) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + "DepartureDate<=" + (Sql)PeriodTill.Value;
if (OptionsList.Contains((ID)1)) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + "SpecialOffer=" + (Sql)true;//OFFERS
if (DepartureFrom.Count>0) where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (DepartureNotes IN (" + string.Join(",",DepartureFrom.Select(ss=>""+(Sql)ss).ToArray()) + "))";
//if(!string.IsNullOrEmpty(Http.Get["GroupDepartureFrom"])){ <------ only if make filter
// string DepartureFromGroup=Http.Get["GroupDepartureFrom"];
// if(DepartureFromGroup!=null){
// where += (!string.IsNullOrEmpty(where) ? " AND " : " ") + " (DepartureNotes IN (" + DepartureFromGroup + ")";
// where +=")";
// groupTitle+=(!string.IsNullOrEmpty(groupTitle)?" - ":"")+DepartureFromGroup;
// }
// filterApplied=true;
//}
where += ")";
if(Grouping.Count>0 && filterApplied==false){
string groupby="";
string groupfields="";
if(Grouping.Contains("destination")){groupby+=(!string.IsNullOrEmpty(groupby) ? "," : " ") +"Destination"; groupfields+=(!string.IsNullOrEmpty(groupfields) ? "," : " ") +"Destination";}
if(Grouping.Contains("duration")){groupby+=(!string.IsNullOrEmpty(groupby) ? "," : " ") +"Duration";groupfields+=(!string.IsNullOrEmpty(groupfields) ? "," : " ") +"Duration";}
if(Grouping.Contains("type")){groupby+=(!string.IsNullOrEmpty(groupby) ? "," : " ") +"PackageType";groupfields+=(!string.IsNullOrEmpty(groupfields) ? "," : " ") +"PackageType";}
if(Grouping.Contains("season")){groupby+=(!string.IsNullOrEmpty(groupby) ? "," : " ") +"SeasonCategory";groupfields+=(!string.IsNullOrEmpty(groupfields) ? "," : " ") +"SeasonCategory";}
string groupsql="SELECT COUNT(id) AS Total"+(!string.IsNullOrEmpty(groupfields)?","+groupfields:"")+" FROM mtbPackages "+(!string.IsNullOrEmpty(where)?" WHERE "+where:"")+(!string.IsNullOrEmpty(groupby)?" GROUP BY "+groupby+" ":" GROUP BY id ")+(!string.IsNullOrEmpty(groupfields)?" ORDER BY "+groupfields:"");
%><%if(Http.Get["log"]==true && BONE.User.IsDeveloper && 1>2){%>where: <%=where%>
<%}%><%
%><%if(Http.Get["log"]==true && BONE.User.IsDeveloper && 1>2){%>groupsql: <%=groupsql%>
<%}%><%
DBReader dr=BONE.Execute(groupsql);
List GroupCombinations=new List();
while(dr.Read()){
Package.GroupCombination pgc=new Package.GroupCombination();
if(Grouping.Contains("destination"))pgc.Destination=dr["Destination"];
if(Grouping.Contains("duration"))pgc.Duration=dr["Duration"];
if(Grouping.Contains("type"))pgc.PackageType=dr["PackageType"];
if(Grouping.Contains("season"))pgc.SeasonCategory=dr["SeasonCategory"];
pgc.Count=dr["Total"];
GroupCombinations.Add(pgc);
}
dr.Close();
dr=null;
if(GroupCombinations.Count==1 && !string.IsNullOrEmpty(DisplayAs) && DisplayAs.ToLower()=="table"){
DBList Packages = Package.Select(where, "DateCreated DESC");
%><%if(Http.Get["log"]==true && BONE.User.IsDeveloper && 1>2){%>Packages :: <%=Packages.Count %>
<%}%><%
Package.GroupCombination pgc = new Package.GroupCombination();
if(Grouping.Contains("destination"))pgc.Destination=Packages[0].Destination;
if(Grouping.Contains("duration"))pgc.Duration=Packages[0].Duration;
if(Grouping.Contains("type"))pgc.PackageType=Packages[0].PackageType;
if(Grouping.Contains("season"))pgc.SeasonCategory=Packages[0].SeasonCategory;
pgc.AddPackages(Packages.ToList());
s.Append(pgc.TableTile);
%><%if(Http.Get["log"]==true && BONE.User.IsDeveloper && 1>2){%>GroupCombinations.Count==1 && !string.IsNullOrEmpty(DisplayAs) && DisplayAs.ToLower()=="table"
<%}%><%
if(GroupCombinations.Count==1)proceed=false;
}else{
string tileClass = (string)BONE.GetVariable("PackagesTilesetClass");
if (string.IsNullOrEmpty(tileClass)) tileClass = "col-lg-4 col-md-4 col-sm-4 col-xs-12 col-ms-6";
TilesetControl tilesetControl = new TilesetControl("PackagesFilters", tileClass, pagesize, GroupCombinations).WithTile(delegate(object gc) {return ((Package.GroupCombination)gc).Tile;});
if(GroupCombinations.Count>0)s.Append(tilesetControl);
else s.Append(""+BONE.Dictionary["NoDeparturesMessage"]+"
");
proceed=false;
%><%if(Http.Get["log"]==true && BONE.User.IsDeveloper && 1>2){%>NOT :: GroupCombinations.Count==1 && !string.IsNullOrEmpty(DisplayAs) && DisplayAs.ToLower()=="table"
<%}%><%
}
}
if (proceed)
{
if(!string.IsNullOrEmpty(DisplayAs) && DisplayAs.ToLower()=="table"){
DBList Packages = Package.Select(where, "DateCreated DESC");
if (Packages.Count > 0)
{
Package.GroupCombination pgc = new Package.GroupCombination();
if(Grouping.Contains("destination"))pgc.Destination=Packages[0].Destination;
if(Grouping.Contains("duration"))pgc.Duration=Packages[0].Duration;
if(Grouping.Contains("type"))pgc.PackageType=Packages[0].PackageType;
if(Grouping.Contains("season"))pgc.SeasonCategory=Packages[0].SeasonCategory;
pgc.AddPackages(Packages.ToList());
s.Append(pgc.TableTile);
}
else
{
s.Append(new MessagePanelControl(new InfoMessage(BONE.Dictionary["NoAvailablePackagesFoundMessage"])).ToString());
}
}else{
DBList Packages = Package.Select(where,"DateCreated DESC" );
string tileClass = (string)BONE.GetVariable("PackagesTilesetClass");
if (string.IsNullOrEmpty(tileClass)) tileClass = "col-lg-4 col-md-4 col-sm-4 col-xs-12 col-ms-6";
s.Append("
");
if (Packages.Count > 0)
{
//SORTING
string sortby="";if(parameters.ContainsKey("Sorting")){sortby=parameters["Sorting"];}
string sortdirection="";if(parameters.ContainsKey("SortingDirection")){sortdirection=parameters["SortingDirection"];}
if(!string.IsNullOrEmpty(sortdirection) && sortdirection.Trim().ToLower()=="desc"){
if(parameters["Sorting"]=="datecreated")Packages.Sort(delegate(Package p1, Package p2) { return p2.DateCreated.CompareTo(p1.DateCreated); });
if(parameters["Sorting"]=="price")Packages.Sort(delegate(Package p1, Package p2) { return p2.PriceFrom.CompareTo(p1.PriceFrom); });
if(parameters["Sorting"]=="duration")Packages.Sort(delegate(Package p1, Package p2) { return p2.Duration.CompareTo(p1.Duration); });
if(parameters["Sorting"]=="destination")Packages.Sort(delegate(Package p1, Package p2) { return p2.Destination.CompareTo(p1.Destination); });
if(parameters["Sorting"]=="description")Packages.Sort(delegate(Package p1, Package p2) { return p2.Description.CompareTo(p1.Description); });
}
if(!string.IsNullOrEmpty(sortdirection) && sortdirection.Trim().ToLower()=="asc"){
if(parameters["Sorting"]=="datecreated")Packages.Sort(delegate(Package p1, Package p2) { return p1.DateCreated.CompareTo(p2.DateCreated); });
if(parameters["Sorting"]=="price")Packages.Sort(delegate(Package p1, Package p2) { return p1.PriceFrom.CompareTo(p2.PriceFrom); });
if(parameters["Sorting"]=="duration")Packages.Sort(delegate(Package p1, Package p2) { return p1.Duration.CompareTo(p2.Duration); });
if(parameters["Sorting"]=="destination")Packages.Sort(delegate(Package p1, Package p2) { return p1.Destination.CompareTo(p2.Destination); });
if(parameters["Sorting"]=="description")Packages.Sort(delegate(Package p1, Package p2) { return p1.Description.CompareTo(p2.Description); });
}
if(!string.IsNullOrEmpty(groupTitle))s.Append(""+groupTitle+"");
TilesetControl tilesetControl = new TilesetControl("Packages", tileClass, pagesize, Packages);
s.Append(tilesetControl);
}
else
{
s.Append(new MessagePanelControl(new InfoMessage(BONE.Dictionary["NoAvailablePackagesFoundMessage"])));
}
}
}
%>
<%=s.ToString()%>