public static SeatingPlan GetActiveMovieSeatingPlan(int ActiveMovieId) { SeatingPlan _SeatingPlan = new SeatingPlan(); _SeatingPlan.Rows = new List <RowDetails>(); //retrieve the list of rows DataTable dtVenueRows = Data.Movies.GetVenueRows(ActiveMovieId); DataTable dtReservedSeats = Data.Movies.GetReservedSeats(ActiveMovieId); for (int i = 0; i < dtVenueRows.Rows.Count; i++) { DataRow drVenue = dtVenueRows.Rows[i]; RowDetails _newRow = new RowDetails(); _newRow.RowNumber = (int)drVenue["RowNumber"]; _newRow.Seats = new List <SeatDetails>(); //for each row in the venue, we want to create all the SEATS in that row //first, we create a "SEAT" for every OFFSET seat (which are with status 0) for (int j = 1; j <= (int)drVenue["SeatsOffset"]; j++) { SeatDetails seat = new SeatDetails(); seat.RowNumber = (int)drVenue["RowNumber"]; seat.PositionId = i; seat.ActualSeatNumber = 0; seat.Status = 0; _newRow.Seats.Add(seat); } //create a "SeatStatus" object for each seat. // if seat is already taken - update status to 2 for (int j = 1; j <= (int)drVenue["SeatsInRow"]; j++) { SeatDetails seat = new SeatDetails(); seat.RowNumber = (int)drVenue["RowNumber"]; seat.PositionId = j + (int)drVenue["SeatsOffset"]; seat.ActualSeatNumber = j; seat.Status = 0; //check if seat is taken if (IsReservedSeat(dtReservedSeats, seat.RowNumber, seat.ActualSeatNumber)) { seat.Status = 2; } else { seat.Status = 1; } //add the new seat the SEATS list , in the ROW _newRow.Seats.Add(seat); } //add the row to the Seating Plan _SeatingPlan.Rows.Add(_newRow); } return(_SeatingPlan); }
public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null) { if (SkipRender(context)) { return; } var dataGrid = new TagBuilder("data-grid", null, IsInGrid); onRender?.Invoke(dataGrid); MergeBindingAttributeBool(dataGrid, context, ":compact", nameof(Compact), Compact); MergeAttributes(dataGrid, context, MergeAttrMode.Margin | MergeAttrMode.Visibility); dataGrid.MergeAttribute("key", Guid.NewGuid().ToString()); // disable vue reusing if (Height != null) { dataGrid.MergeStyle("height", Height.Value); } if (FixedHeader) { dataGrid.MergeAttribute(":fixed-header", "true"); } if (HeadersVisibility == HeadersVisibility.None) { dataGrid.MergeAttribute(":hide-header", "true"); } if (Style != DataGridStyle.Default) { dataGrid.AddCssClass($"data-grid-{Style.ToString().ToKebabCase()}"); } if (Background != BackgroundStyle.Default) { dataGrid.AddCssClass("background-" + Background.ToString().ToKebabCase()); } if (RowDetails != null) { dataGrid.MergeAttribute(":row-details", "true"); dataGrid.MergeAttribute("row-details-activate", RowDetails.Activate.ToString().ToLowerInvariant()); var vBind = RowDetails.GetBinding("Visible"); if (vBind != null) { dataGrid.MergeAttribute("row-details-visible", vBind.Path /*!without context!*/); } } var isb = GetBinding(nameof(ItemsSource)); if (isb != null) { dataGrid.MergeAttribute(":items-source", isb.GetPath(context)); } MergeBoolAttributeIfExists(dataGrid, context, nameof(Hover), Hover); MergeBoolAttributeIfExists(dataGrid, context, nameof(Striped), Striped); MergeBoolAttribute(dataGrid, context, nameof(Border), Border); MergeBoolAttribute(dataGrid, context, nameof(Sort), Sort); dataGrid.MergeAttribute(":route-query", "$query"); // always! if (!String.IsNullOrEmpty(EmptyPanelDelegate)) { dataGrid.MergeAttribute(":empty-panel-callback", $"$delegate('{EmptyPanelDelegate}')"); } var dblClickBind = GetBindingCommand(nameof(DoubleClick)); if (dblClickBind != null) { // Function! dataGrid.MergeAttribute(":doubleclick", "() => " + dblClickBind.GetCommand(context)); } if (MarkerStyle != RowMarkerStyle.None) { dataGrid.MergeAttribute("mark-style", MarkerStyle.ToString().ToKebabCase()); } var mbind = GetBinding(nameof(Mark)); if (mbind != null) { dataGrid.MergeAttribute("mark", mbind.Path); // without context!!! } else if (Mark != MarkStyle.Default) { throw new XamlException("The Mark property must be a binding"); } var rbbind = GetBinding(nameof(RowBold)); if (rbbind != null) { dataGrid.MergeAttribute("row-bold", rbbind.GetPath(context)); } else if (RowBold != null) { throw new XamlException("The RowBold property must be a binding"); } // TODO: binding for GridLines ??? if (GridLines != GridLinesVisibility.None) { dataGrid.MergeAttribute("grid", GridLines.ToString()); } var groupByBind = GetBinding(nameof(GroupBy)); if (groupByBind != null) { dataGrid.MergeAttribute(":group-by", groupByBind.GetPath(context)); } else if (_groupBy != null) { dataGrid.MergeAttribute(":group-by", _groupBy.GetJsValue(context)); } if (AutoSelect != AutoSelectMode.None) { dataGrid.MergeAttribute("auto-select", AutoSelect.ToString().ToKebabCase()); } dataGrid.RenderStart(context); Int32 colIndex = 0; foreach (var col in Columns) { col.RenderColumn(context, colIndex); colIndex++; } RenderRowDetails(context); RenderEmptyPanel(context); RenderFooter(context); dataGrid.RenderEnd(context); }
private static bool LoadTable(string ATableName, TSimpleYmlParser AYmlParser, TDBTransaction ATransaction) { if (!AYmlParser.StartParseList(StringHelper.UpperCamelCase(ATableName, false, false) + "Table")) { // TLogging.Log("empty table " + ATableName + " " + StringHelper.UpperCamelCase(ATableName, false, false) + "Table"); return(false); } DataTable table = DBAccess.GDBAccessObj.SelectDT("Select * from " + ATableName, ATableName, ATransaction); List <OdbcParameter> Parameters = new List <OdbcParameter>(); string OrigInsertStatement = "INSERT INTO pub_" + ATableName + "() VALUES "; StringBuilder InsertStatement = new StringBuilder(OrigInsertStatement); ConvertColumnNames(table.Columns); SortedList <string, string> RowDetails; int count = 0; while ((RowDetails = AYmlParser.GetNextLineAttributes()) != null) { count++; if (count != 1) { if ((CommonTypes.ParseDBType(DBAccess.GDBAccessObj.DBType) == TDBType.SQLite) || ((count % 500) == 0)) { // SQLite does not support INSERT of several rows at the same time try { DBAccess.GDBAccessObj.ExecuteNonQuery(InsertStatement.ToString(), ATransaction, Parameters.ToArray()); } catch (Exception e) { TLogging.Log("error in ResetDatabase, LoadTable " + ATableName + ":" + e.Message); throw; } InsertStatement = new StringBuilder(OrigInsertStatement); Parameters = new List <OdbcParameter>(); } else { InsertStatement.Append(","); } } InsertStatement.Append("("); // needed for workaround for version 0.2.24, AAPDocument.BaseCurrency and AAPPayment.BaseCurrency; if (ATableName == "a_ledger") { FCurrencyPerLedger.Add(Convert.ToInt32(RowDetails["LedgerNumber"]), RowDetails["BaseCurrency"]); } bool firstColumn = true; foreach (DataColumn col in table.Columns) { if (!firstColumn) { InsertStatement.Append(","); } firstColumn = false; if (RowDetails.ContainsKey(col.ColumnName)) { string strValue = RowDetails[col.ColumnName]; if (col.DataType == typeof(DateTime)) { OdbcParameter p; if (strValue.Length == "yyyy-MM-dd".Length) { p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Date); p.Value = DateTime.ParseExact(strValue, "yyyy-MM-dd", CultureInfo.InvariantCulture); } else { p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.DateTime); p.Value = DateTime.ParseExact(strValue, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); } Parameters.Add(p); } else if (col.DataType == typeof(String)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.VarChar); p.Value = strValue.Replace(""", "\""); Parameters.Add(p); } else if (col.DataType == typeof(Int32)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Int); p.Value = Convert.ToInt32(strValue); Parameters.Add(p); } else if (col.DataType == typeof(Int64)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Decimal); p.Value = Convert.ToInt64(strValue); Parameters.Add(p); } else if (col.DataType == typeof(double)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Decimal); p.Value = Convert.ToDouble(strValue, CultureInfo.InvariantCulture); Parameters.Add(p); } else if (col.DataType == typeof(bool)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Bit); p.Value = Convert.ToBoolean(strValue); Parameters.Add(p); } else if (col.DataType == typeof(Decimal)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Decimal); p.Value = Convert.ToDecimal(strValue, CultureInfo.InvariantCulture); Parameters.Add(p); } else { // should not get here? throw new Exception("error in ResetDatabase, LoadTable: " + col.DataType.ToString() + " has not yet been implemented"); } InsertStatement.Append("?"); } else { // the following statements are for the demo databases generated before version 0.2.24. // CurrencyCode was added to a_ap_document and a_ap_payment. // it is impossible during the load, to get the correct currencycode, via the supplier, because a_ap_supplier is loaded after a_ap_document. // as a temporary workaround, and because we are still in Alpha, we are using the Base currency of the ledger if ((ATableName == "a_ap_document") && (col.ColumnName == "CurrencyCode")) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.VarChar); p.Value = FCurrencyPerLedger[Convert.ToInt32(RowDetails["LedgerNumber"])]; Parameters.Add(p); InsertStatement.Append("?"); } else if ((ATableName == "a_ap_payment") && (col.ColumnName == "CurrencyCode")) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.VarChar); p.Value = FCurrencyPerLedger[Convert.ToInt32(RowDetails["LedgerNumber"])]; Parameters.Add(p); InsertStatement.Append("?"); } else { InsertStatement.Append("NULL"); // DEFAULT } } } InsertStatement.Append(")"); } try { DBAccess.GDBAccessObj.ExecuteNonQuery(InsertStatement.ToString(), ATransaction, Parameters.ToArray()); } catch (Exception e) { TLogging.Log("error in ResetDatabase, LoadTable " + ATableName + ":" + e.Message); throw; } return(true); }
private static bool LoadTable(string ATableName, TSimpleYmlParser AYmlParser, TDBTransaction AReadWriteTransaction, ref SortedList <Int32, string> ACurrencyPerLedger) { if (!AYmlParser.StartParseList(StringHelper.UpperCamelCase(ATableName, false, false) + "Table")) { // TLogging.Log("empty table " + ATableName + " " + StringHelper.UpperCamelCase(ATableName, false, false) + "Table"); return(false); } DataTable table = AReadWriteTransaction.DataBaseObj.SelectDT("Select * from " + ATableName, ATableName, AReadWriteTransaction); List <OdbcParameter> Parameters = new List <OdbcParameter>(); string OrigInsertStatement = "INSERT INTO pub_" + ATableName + "() VALUES "; StringBuilder InsertStatement = new StringBuilder(OrigInsertStatement); ConvertColumnNames(table.Columns); SortedList <string, string> RowDetails; int count = 0; while ((RowDetails = AYmlParser.GetNextLineAttributes()) != null) { count++; if (count != 1) { if ((DBAccess.DBType == TDBType.MySQL) || ((count % 500) == 0)) { // MySQL is very slow with INSERT of several rows at the same time try { AReadWriteTransaction.DataBaseObj.ExecuteNonQuery(InsertStatement.ToString(), AReadWriteTransaction, Parameters.ToArray()); } catch (Exception e) { TLogging.Log("error in ResetDatabase, LoadTable " + ATableName + ":" + e.Message); throw; } InsertStatement = new StringBuilder(OrigInsertStatement); Parameters = new List <OdbcParameter>(); } else { InsertStatement.Append(","); } } InsertStatement.Append("("); // needed for workaround for version 0.2.24, AAPDocument.BaseCurrency and AAPPayment.BaseCurrency; if (ATableName == "a_ledger") { ACurrencyPerLedger.Add(Convert.ToInt32(RowDetails["LedgerNumber"]), RowDetails["BaseCurrency"]); } // workaround for 2015.09: a_account_hierarchy_detail.a_report_order_i must not be NULL if (ATableName == "a_account_hierarchy_detail") { if (!RowDetails.ContainsKey("ReportOrder") || RowDetails["ReportOrder"] == string.Empty) { RowDetails["ReportOrder"] = "-1"; } } if (ATableName == "a_gift") { if (!RowDetails.ContainsKey("LinkToPreviousGift") || RowDetails["LinkToPreviousGift"] == string.Empty) { RowDetails["LinkToPreviousGift"] = "false"; } if (!RowDetails.ContainsKey("PrintReceipt") || RowDetails["PrintReceipt"] == string.Empty) { RowDetails["PrintReceipt"] = "true"; } } if (ATableName == "a_recurring_transaction") { if (!RowDetails.ContainsKey("Reference") || RowDetails["Reference"] == string.Empty) { RowDetails["Reference"] = "EMPTY"; } } if (ATableName == "a_transaction") { if (!RowDetails.ContainsKey("Reference") || RowDetails["Reference"] == string.Empty) { RowDetails["Reference"] = "EMPTY"; } } bool firstColumn = true; foreach (DataColumn col in table.Columns) { if (!firstColumn) { InsertStatement.Append(","); } firstColumn = false; if (RowDetails.ContainsKey(col.ColumnName)) { string strValue = RowDetails[col.ColumnName]; if (col.DataType == typeof(DateTime)) { OdbcParameter p; if (strValue.Length == "yyyy-MM-dd".Length) { p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Date); p.Value = DateTime.ParseExact(strValue, "yyyy-MM-dd", CultureInfo.InvariantCulture); } else { p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.DateTime); p.Value = DateTime.ParseExact(strValue, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); } Parameters.Add(p); } else if (col.DataType == typeof(String)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.VarChar); p.Value = strValue.Replace(""", "\""); Parameters.Add(p); } else if (col.DataType == typeof(Int32)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Int); p.Value = Convert.ToInt32(strValue); Parameters.Add(p); } else if (col.DataType == typeof(Int64)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Decimal); p.Value = Convert.ToInt64(strValue); Parameters.Add(p); } else if (col.DataType == typeof(double)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Decimal); p.Value = Convert.ToDouble(strValue, CultureInfo.InvariantCulture); Parameters.Add(p); } else if (col.DataType == typeof(bool)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Bit); p.Value = Convert.ToBoolean(strValue); Parameters.Add(p); } else if (col.DataType == typeof(Decimal)) { OdbcParameter p = new OdbcParameter(Parameters.Count.ToString(), OdbcType.Decimal); p.Value = Convert.ToDecimal(strValue, CultureInfo.InvariantCulture); Parameters.Add(p); } else { // should not get here? throw new Exception("error in ResetDatabase, LoadTable: " + col.DataType.ToString() + " has not yet been implemented"); } InsertStatement.Append("?"); } else { if (col.ColumnName == "ModificationId") { InsertStatement.Append("CURRENT_TIMESTAMP"); } else { InsertStatement.Append("NULL"); // DEFAULT } } } InsertStatement.Append(")"); } try { AReadWriteTransaction.DataBaseObj.ExecuteNonQuery(InsertStatement.ToString(), AReadWriteTransaction, Parameters.ToArray()); } catch (Exception e) { TLogging.Log("error in ResetDatabase, LoadTable " + ATableName + ":" + e.Message); throw; } return(true); }