private string GetBgColor(OrdersCalendar Calendar) { if (Calendar.CalendarNumber == 1) { return("#f0f8ff"); } else { return("#fffaf0"); } }
void PrerareCalendars() { var listOrderTypesOrderCalendar1 = UoW.Session.QueryOver <OrderTypeClass>().List().Where(x => x.PositionInTabs.ToUpper().Contains(label1.LabelProp.ToUpper())).ToList(); var listOrderTypesOrderCalendar2 = UoW.Session.QueryOver <OrderTypeClass>().List().Where(x => x.PositionInTabs.ToUpper().Contains(label2.LabelProp.ToUpper())).ToList(); var listOrderTypesOrderCalendar3 = UoW.Session.QueryOver <OrderTypeClass>().List().Where(x => x.PositionInTabs.ToUpper().Contains(label3.LabelProp.ToUpper())).ToList(); var listOrderTypesOrderCalendar4 = UoW.Session.QueryOver <OrderTypeClass>().List().Where(x => x.PositionInTabs.ToUpper().Contains(label4.LabelProp.ToUpper())).ToList(); uint refreshInterval = GetTimer(); orderscalendar1.StartDate = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek + 6) % 7)); orderscalendar1.SetTimeRange(9, 21); orderscalendar1.BackgroundColor = new Gdk.Color(234, 230, 255); orderscalendar1.PointNumber = 1; orderscalendar1.CalendarNumber = 1; orderscalendar1.OrdersTypes = listOrderTypesOrderCalendar1; orderscalendar1.NeedRefreshOrders += OnRefreshCalendarEvent; orderscalendar1.NewOrder += OnNewOrder; orderscalendar1.NewSheduleWork += OnNewSheduleWork; orderscalendar1.NewNote += OnNewNote; orderscalendar1.frmClientCalendar = frmClientCalendar; orderscalendar1.TypeTab = TypeTab.Setting; orderscalendar2.StartDate = DateTime.Today.AddDays(-(((int)DateTime.Today.Date.DayOfWeek + 6) % 7)); orderscalendar2.SetTimeRange(9, 21); orderscalendar2.BackgroundColor = new Gdk.Color(255, 230, 230); orderscalendar2.PointNumber = 1; orderscalendar2.CalendarNumber = 2; orderscalendar2.OrdersTypes = listOrderTypesOrderCalendar2; orderscalendar2.NeedRefreshOrders += OnRefreshCalendarEvent; orderscalendar2.NewOrder += OnNewOrder; orderscalendar2.NewSheduleWork += OnNewSheduleWork; orderscalendar2.NewNote += OnNewNote; orderscalendar2.frmClientCalendar = frmClientCalendar; orderscalendar2.TypeTab = TypeTab.Toning; orderscalendar3.StartDate = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek + 6) % 7)); orderscalendar3.SetTimeRange(9, 21); orderscalendar3.BackgroundColor = new Gdk.Color(234, 230, 255); orderscalendar3.PointNumber = 2; orderscalendar3.CalendarNumber = 1; orderscalendar3.OrdersTypes = listOrderTypesOrderCalendar3; orderscalendar3.NeedRefreshOrders += OnRefreshCalendarEvent; orderscalendar3.NewOrder += OnNewOrder; orderscalendar3.NewSheduleWork += OnNewSheduleWork; orderscalendar3.NewNote += OnNewNote; orderscalendar3.frmClientCalendar = frmClientCalendar; orderscalendar3.TypeTab = TypeTab.Setting; orderscalendar4.StartDate = DateTime.Today.AddDays(-(((int)DateTime.Today.Date.DayOfWeek + 6) % 7)); orderscalendar4.SetTimeRange(9, 21); orderscalendar4.BackgroundColor = new Gdk.Color(255, 230, 230); orderscalendar4.PointNumber = 2; orderscalendar4.CalendarNumber = 2; orderscalendar4.OrdersTypes = listOrderTypesOrderCalendar4; orderscalendar4.NeedRefreshOrders += OnRefreshCalendarEvent; orderscalendar4.NewOrder += OnNewOrder; orderscalendar4.NewSheduleWork += OnNewSheduleWork; orderscalendar4.NewNote += OnNewNote; orderscalendar4.frmClientCalendar = frmClientCalendar; orderscalendar4.TypeTab = TypeTab.Toning; orderscalendar1.frmClientCalendar.OrdersCalendar = orderscalendar1; CurrentCalendar = orderscalendar1; orderscalendar1.RefreshOrders(); Timer = new System.Timers.Timer(refreshInterval * 1000); Timer.Elapsed += Timer_Elapsed; Timer.AutoReset = true; Timer.Enabled = true; }
private void RefreshCalendar(OrdersCalendar calendar) { if (0 != Interlocked.Exchange(ref calendar.InUpdatingState, 1)) { return; } try { var items = new ItemsList(); using (var connection = new MySqlConnection(QSMain.ConnectionString)) { connection.Open(); logger.Info("Запрос заказов на {0:d}", calendar._StartDate); string sql = "SELECT orders.*, models.name as model, marks.name as mark, status.color, stocks.name as stock, stocks.color as stockcolor, " + "status.name as status, manufacturers.name as manufacturer, tablesum.sum, order_type.name as order_type_name, " + "(SELECT COUNT(*) FROM sms_history WHERE sms_history.order_id = orders.id) as sent_messages " + "FROM orders " + "LEFT JOIN order_type ON order_type.id = orders.id_order_type " + "LEFT JOIN models ON models.id = orders.car_model_id " + "LEFT JOIN marks ON marks.id = models.mark_id " + "LEFT JOIN status ON status.id = orders.status_id " + "LEFT JOIN stocks ON stocks.id = orders.stock_id " + "LEFT JOIN manufacturers ON manufacturers.id = orders.manufacturer_id " + "LEFT JOIN (" + "SELECT order_id, SUM(cost) as sum FROM order_pays GROUP BY order_id) as tablesum " + "ON tablesum.order_id = orders.id " + "WHERE date BETWEEN @start AND @end " + "AND point_number = @point " + "AND calendar_number = @calendar "; MySqlCommand cmd = new MySqlCommand(sql, connection); cmd.Parameters.AddWithValue("@start", calendar._StartDate); cmd.Parameters.AddWithValue("@end", calendar._StartDate.AddDays(6)); cmd.Parameters.AddWithValue("@point", calendar.PointNumber); cmd.Parameters.AddWithValue("@calendar", calendar.CalendarNumber); using (MySqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { CalendarItem order = new CalendarItem( rdr.GetDateTime("date"), rdr.GetInt32("hour") ); order.id = rdr.GetInt32("id"); order.MessageCount = rdr.GetUInt32("sent_messages"); if (!QSMain.User.Permissions["worker"]) { order.FullText = String.Format("{9}\nСостояние: {0}\nАвтомобиль: {1} {2}\nЕврокод: {3}\nПроизводитель: {4}\nСклад:{5}\nТелефон: {6}\nСтоимость: {7:C}\n{8}", rdr["status"], rdr["mark"], rdr["model"], rdr["eurocode"], rdr["manufacturer"], rdr["stock"], rdr["phone"], DBWorks.GetDecimal(rdr, "sum", 0), rdr["comment"], rdr["order_type_name"] ); order.Text = String.Format("{0} {1}\n{2}\n{3}", rdr["mark"], rdr["model"], rdr["phone"], rdr["comment"]); order.DeleteOrder += OnDeleteOrder; order.OpenOrder += OnOpenOrder; order.TimeChanged += OnChangeTimeOrderEvent; } else { order.FullText = String.Format("{7}\nСостояние: {0}\nАвтомобиль: {1} {2}\nЕврокод: {3}\nПроизводитель: {4}\nСклад: {5}\n{6}", rdr["status"], rdr["mark"], rdr["model"], rdr["eurocode"], rdr["manufacturer"], rdr["stock"], rdr["comment"], rdr["order_type_name"] ); var firstStr = rdr["mark"] + " " + rdr["model"] + "\n"; var secondStr = rdr["eurocode"] + " " + rdr["manufacturer"] + " " + rdr["comment"]; String[] words = secondStr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); order.Text = firstStr; foreach (var word in words) { order.Text += word + "\n"; } } order.Color = DBWorks.GetString(rdr, "color", ""); order.TagColor = DBWorks.GetString(rdr, "stockcolor", ""); if (rdr["stock"].ToString().Length > 0 && rdr["stockcolor"] != DBNull.Value) { order.Tag = rdr["stock"].ToString().Substring(0, 1); } order.Calendar = calendar; int day = (order.Date - calendar._StartDate).Days; order.TypeItemButton = TypeItemOrButton.Order; items.AddItem(day, order.Hour, order); } } logger.Info($"Получено {items.Count} заказов"); logger.Info("Запрос расписания работы сотрудников на {0:d}...", calendar.StartDate); sql = "select shw.id, shw.date_work " + "from shedule_works shw " + "WHERE shw.date_work BETWEEN @start AND @end " + "AND shw.point_number = @point AND shw.calendar_number = @calendar"; List <CalendarItem> calendarItemsShedule = new List <CalendarItem>(); cmd = new MySqlCommand(sql, connection); cmd.Parameters.AddWithValue("@start", calendar.StartDate); cmd.Parameters.AddWithValue("@end", calendar.StartDate.AddDays(6)); cmd.Parameters.AddWithValue("@point", calendar.PointNumber); cmd.Parameters.AddWithValue("@calendar", calendar.CalendarNumber); using (MySqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { CalendarItem shedule = new CalendarItem(rdr.GetDateTime("date_work"), 23); shedule.id = rdr.GetInt32("id"); shedule.Tag = ""; shedule.Color = shedule.TagColor = GetBgColor(calendar); shedule.Calendar = calendar; shedule.DeleteOrder += OnDeleteShedule; shedule.OpenOrder += OnOpenSheduleWork; shedule.TypeItemButton = TypeItemOrButton.Shedule; calendarItemsShedule.Add(shedule); } } foreach (var sh in calendarItemsShedule) { sh.Text = getEmployeeInShedule(sh.id, connection); items.AddItem((sh.Date - calendar._StartDate).Days, 23, sh); } logger.Info("Запрос заметок на {0:d}...", calendar.StartDate); sql = "select id, date, message " + "FROM note " + "WHERE date BETWEEN @start AND @end " + "AND point_number = @point AND calendar_number = @calendar"; cmd = new MySqlCommand(sql, connection); cmd.Parameters.AddWithValue("@start", calendar.StartDate); cmd.Parameters.AddWithValue("@end", calendar.StartDate.AddDays(6)); cmd.Parameters.AddWithValue("@point", calendar.PointNumber); cmd.Parameters.AddWithValue("@calendar", calendar.CalendarNumber); using (MySqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { CalendarItem calendarItemNote = new CalendarItem(DateTime.Parse(rdr["date"].ToString()), 22); calendarItemNote.id = rdr.GetInt32("id"); calendarItemNote.Tag = ""; calendarItemNote.Color = calendarItemNote.TagColor = GetBgColor(calendar); calendarItemNote.Calendar = calendar; calendarItemNote.DeleteOrder += OnDeleteNote; calendarItemNote.OpenOrder += OnOpenNote; if (rdr["message"].ToString().Length > 400) { calendarItemNote.Text = rdr["message"].ToString().Substring(0, 400); } else { calendarItemNote.Text = rdr["message"].ToString(); } int day = (DateTime.Parse(rdr["date"].ToString()) - calendar._StartDate).Days; calendarItemNote.TypeItemButton = TypeItemOrButton.Note; items.AddItem(day, 22, calendarItemNote); } } logger.Info("Ok"); } Application.Invoke(delegate { calendar.Items = items; calendar.QueueDraw(); frmClientCalendar.QueueDraw(); }); } finally { Interlocked.Exchange(ref calendar.InUpdatingState, 0); } }