public void init(CranTaskInfo task,List<String>Managers) {
			this.Managers = Managers;
			CurrentTask = task;
			pnlTask.DataContext = CurrentTask;
			lstUsers.ItemsSource = from OrdersUser u in OrdersContext.Current.Context.OrdersUsers where u.CanAgreeCranTask select u;
			acbManager.ItemsSource = Managers;
			cmbCranName.ItemsSource = Crans;
		}
Beispiel #2
0
		public static void sendCranTask(string header, CranTaskInfo task) {
			try {
				IQueryable users = OrdersUser.getAllUsers();
				List<string> mailToList = new List<string>();


				foreach (OrdersUser user in users) {
					if (
						( user.SendAllCranTask && (user.SendOnlyMZCranTask&& task.CranNumber<=2 ||!user.SendOnlyMZCranTask) ) ||
						( user.SendCreateMail && task.Author.ToLower() == user.Name.ToLower() )||
						( task.State=="new" && user.SendAllCreateCranTask && (user.SendOnlyMZCranTask&& task.CranNumber<=2 ||!user.SendOnlyMZCranTask) )||
						( task.AgreeDict.ContainsKey(user.UserID) && (user.SendAgreeMail || user.SendAllAgreeMail|| user.SendAllCranTask || user.SendAllCreateCranTask ||user.SendAllAgreeCranTask || user.SendAgreeCranTask && task.StateDB=="new") ) 
						){						
						if (user.Mails.Count > 0) {
							foreach (string mail in user.Mails) {
								if (!String.IsNullOrEmpty(mail) && !mailToList.Contains(mail.ToLower())) {
									mailToList.Add(mail.ToLower());
								}
							}
						}
					}
				}

				//mailToList.Add("*****@*****.**");

				Attachment attach = null;

				try {
					MemoryStream stream = new MemoryStream();
					StreamWriter writer = new StreamWriter(stream);
					writer.Write(CranTaskInfo.getTaskPrintHTML(task));
					writer.Flush();
					stream.Position = 0;

					attach = new Attachment(stream, String.Format("Заявка{0}.xls", task.Number), "application/vnd.ms-excel");
				}
				catch (Exception e) {
					Logger.info(e.ToString(), Logger.LoggerSource.server);
				}


				string message = CranTaskInfo.getTashHTML(task);

				message += String.Format("<h3><a href='{0}'>Перейти к списку заявок</a></h3>", String.Format("http://{0}:{1}/#/CransPage", HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port));

				if (mailToList.Count > 0) {
					SendMailLocal(smtpServer, smtpPort, smtpUser, smtpPassword, smtpDomain, smtpFrom, mailToList, header, message, true, attach);
				}
			}
			catch (Exception e) {
				Logger.error(String.Format("Ошибка при отправке почты: {0}", e.ToString()), Logger.LoggerSource.server);
			}
		}
		public static string getTaskPrintHTML(CranTaskInfo order, bool showStyle = true) {
			try {
				string style = showStyle ? "<Style>table {border-collapse: collapse;} th.solid, td.solid {border-width: 1px;	border-style: solid;	border-color: #000000;} td.under {border-bottom-width: 1px;	border-bottom-style: solid;	border-bottom-color: #000000;} </Style>" : "";
				string body = String.Format(@"
<table >
	<tr >
		<th  colspan='7' align='right'>Приложение 1 <br/>к Регламенту по предоставлению подъемных сооружений Воткинской ГЭС<br/>(Для статистического учета работ ПС ГЭС)</th>	
	</tr>
	<tr>	
		<th  colspan='7' align='center'><h2>ЗАЯВКА №{0}</h2></th>
	</tr>	
	<tr>	
		<th  colspan='7' align='center'><h3>{1}</h3></th>
	</tr>	
	<tr><td  bordercolor='white' colspan='6' >&nbsp;</td></tr>
	<tr>	
		<th/>
		<th/>
		<th colspan='3' align='center' class='under'>&nbsp;</th>
		<th/>
	</tr>
	<tr>	
		<td colspan='7' align='center'><i>Наименование организации</i></td>
	</tr>
	<tr><td  bordercolor='white' colspan='6' >&nbsp;</td></tr>
	<tr >
		<th align='center' valign='top' width='50' class='solid' rowspan='2' >№ п/п</th>
		<th align='center' valign='top' width='150' class='solid' rowspan='2' >Наименование ПС</th>
		<th align='center' valign='top' width='250' class='solid' rowspan='2' >Краткое содержание работ</th>

		<th align='center' valign='top' width='300' class='solid' colspan='2' >Ответственный стропальщик</th>
		<th align='center' valign='top' width='220' class='solid' colspan='2'>Период использования</th>
		</tr>
	<tr>	
		
		<th align='center' valign='center' width='230' class='solid' >Ф.И.О.</th>
		<th align='center' valign='center' width='70' class='solid' >№ удостоверения</th>
		<th align='center' valign='center' width='110' class='solid' >Начало</th>
		<th align='center' valign='center' width='110' class='solid' >Окончание</th>
		
	</tr>
	<tr>
		<td align='center' valign='top' class='solid' >{2}</td>
		<td align='center' valign='top' class='solid' >{3}</td>
		<td align='center' valign='top' class='solid' >{4}</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >{5}</td>
		<td align='center' valign='top' class='solid' >{6}</td>
	</tr>

	<tr>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
	</tr>

	<tr>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
	</tr>

	<tr>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
	</tr>

	<tr>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
		<td align='center' valign='top' class='solid' >&nbsp;</td>
	</tr>

	<tr><td  bordercolor='white' colspan='6' >&nbsp;</td></tr>
	<tr><td  bordercolor='white' colspan='6' >&nbsp;</td></tr>
	<tr>
		<td bordercolor='white'  colspan='4'>Специалист, ответственный за безопасное производство работ с применением ПС «Заказчика»</td>
		<td bordercolor='white' class='under' align='right'>/</td>
		<td  bordercolor='white' class='under' colspan='2' >{7}</td>
	</tr>


	<tr><td  bordercolor='white' colspan='6' >&nbsp;</td></tr>
	<tr><th colspan='7' bordercolor='white' colspan='2'>СОГЛАСОВАНО </th></tr>

	<tr><td  bordercolor='white' colspan='6' >&nbsp;</td></tr>
	<tr>
		<td  bordercolor='white' colspan='4'>Представитель Дирекции по реализации ПКМ (только для кранов МЗ) </td>
		<td  bordercolor='white' class='under' align='right'>/</td>
		<td  bordercolor='white' class='under' colspan='2'>&nbsp;</td>
	</tr>

	<tr><td  bordercolor='white' colspan='7' >&nbsp;</td></tr>
	<tr>
		<td  bordercolor='white' colspan='4'>Специалист, ответственный за осуществление производственного контроля при эксплуатации ПС (при необходимости)</td>
		<td  bordercolor='white' class='under' align='right'>/</td>
		<td  bordercolor='white' class='under' colspan='2'>&nbsp;</td>
	</tr>	

	<tr><td  bordercolor='white' colspan='7' >&nbsp;</td></tr>
	<tr><th colspan='6' bordercolor='white' colspan='2'>УТВЕРЖДЕНО </th></tr>

	<tr><td  bordercolor='white' colspan='7' >&nbsp;</td></tr>
	<tr>
		<td  bordercolor='white' colspan='4'>{8}</td>
		<td  bordercolor='white' class='under' align='right'>/</td>
		<td  bordercolor='white' class='under' colspan='2'>{9}</td>
	</tr>	


</table>
", order.Number, order.DateCreate.ToString("dd.MM.yyyy"), 1, order.CranName, order.Comment,
	order.Allowed ? order.AllowDateStart.ToString("dd.MM.yy HH:mm") : order.NeedStartDate.ToString("dd.MM.yy HH:mm"),
	order.Allowed ? order.AllowDateEnd.ToString("dd.MM.yy HH:mm") : order.NeedEndDate.ToString("dd.MM.yy HH:mm"),
	order.CranNumber<=2?"Представитель группы ТиГМО ПТС (только для кранов МЗ)":"Исполнитель заявки",order.Manager,!String.IsNullOrEmpty(order.AuthorAllow)?order.AuthorAllow:" ");
				return style + body;
			}
			catch (Exception e) {
				Logger.info("Ошибка при формировании html представления " + e.ToString(), Logger.LoggerSource.server);
				return "";
			}
		}
		public static string getTashHTML(CranTaskInfo order, bool showStyle = true) {
			try {
				string style = showStyle ? "<Style>table {border-collapse: collapse;} td{text-align:center;} td.comments{text-align:left;} td, th {border-width: 1px;	border-style: solid;	border-color: #BBBBFF;	padding-left: 3px;	padding-right: 3px;}</Style>" : "";
				string htmlNumber = String.Format("Заявка на работу крана №{0} ", order.Number);
				string htmlState = String.Format("Состояние: {0}", order.State);
				string htmlFirstTRTable = String.Format("<table width='100%'><tr><th>{0}</th><th>{1}</th></tr></table>", htmlNumber, htmlState);
				string htmlInfoTable = String.Format("<table width='100%'><tr><th colspan='3'>Информация о заявке</th></tr><tr><th width='30%'>Оборудование</th><th  width='30%'>Текст заявки</th><th width='30%'>Согласовано</th></tr><tr><td width='30%'>{0}</td><td width='30%'>{1}</td><td width='30%'>{2}</td></tr></table>",
					order.CranName, String.Format("{0}<br/><b>Ответственный: </b>{1}", order.Comment, order.Manager), order.AgreeUsersText);


				string htmlDatesTable =
					String.Format("<table width='100%'><tr><th colspan='4'>Сроки заявки</th></tr><tr><th>&nbsp;</th><th>Начало</th><th>Окончание</th><th>&nbsp;</th></tr><tr><th>Заявка</th><td>{0}</td><td>{1}</td><td>{2}</td></tr><tr><th>Разрешение</th><td>{3}</td><td>{4}</td><td>{5}</td></tr><tr><th>Факт</th><td>{6}</td><td>{7}</td><td>{8}</td></tr></table>",
					order.NeedStartDate.ToString("dd.MM.yy HH:mm"), order.NeedEndDate.ToString("dd.MM.yy HH:mm"), order.Author,
					order.Allowed ? order.AllowDateStart.ToString("dd.MM.yy HH:mm") : order.Denied ? "Отклонено": order.Cancelled?"Снята":"&nbsp;",
					order.Allowed ? order.AllowDateEnd.ToString("dd.MM.yy HH:mm") : order.Denied ? "Отклонено" : order.Cancelled?"Снята":"&nbsp;",
					order.Allowed || order.Denied ? order.AuthorAllow : "-",
					order.Finished?order.RealDateStart.ToString("dd.MM.yy HH:mm"):"-",
					order.Finished ? order.RealDateEnd.ToString("dd.MM.yy HH:mm") : "-",!string.IsNullOrEmpty(order.AuthorFinish)?order.AuthorFinish:"-");


				string aComments = string.IsNullOrEmpty(order.AgreeComments) ? "" : order.AgreeComments.Replace("\r\n", "<br/>");
				string fullTable = String.Format("<table width='100%'><tr><td colspan='2'>{0}</td></tr><tr><td colspan='2'>{1}</td></tr><tr><td width='50%'>{2}</td><td width='50%'>{3}</td></tr></table>",
					htmlFirstTRTable, htmlInfoTable, htmlDatesTable, aComments);
				return style + fullTable;
			}
			catch (Exception e) {
				Logger.info("Ошибка при формировании html представления " + e.ToString(), Logger.LoggerSource.server);
				return "";
			}
		}
		public static ReturnMessage AddComment(CranTaskInfo task, string comment) {
			Logger.info("Добавление комментария к заявке на работу крана", Logger.LoggerSource.server);
			try {
				string result = "";
				OrdersUser currentUser = OrdersUser.loadFromCache(HttpContext.Current.User.Identity.Name);
				VotGESOrdersEntities eni = new VotGESOrdersEntities();
				CranTask tbl = new CranTask();

				CranTask tsk = (from t in eni.CranTask where t.Number == task.Number select t).FirstOrDefault();
				if (tsk == null) {
					return new ReturnMessage(false, "Заявка не найдена");
				}
				tbl = tsk;

				if (!string.IsNullOrEmpty(task.AgreeComments))
					task.AgreeComments += "\r\n";
				task.AgreeComments += String.Format("{2} {0}:\r\n   {1}", currentUser.FullName, comment, DateTime.Now.ToString("dd.MM.yyyy HH:mm"));
				tbl.AgreeComment = task.AgreeComments;


				eni.SaveChanges();
				string message = String.Format("Заявка на работу крана \"{0}\" №{1}. Комментарий", task.CranName, task.CranNumber);
				MailContext.sendCranTask(message, new CranTaskInfo(tbl));
				if (Managers != null) {
					if (!Managers.Contains(task.Manager)) {
						Managers.Add(task.Manager);
					}
				}
				else
					ReadManagers();
				return new ReturnMessage(true, "Комментарий добавлен");
			}
			catch (Exception e) {
				Logger.info("Ошибка при создании/изменении заявки на работу крана " + e.ToString(), Logger.LoggerSource.server);
				return new ReturnMessage(false, "ошибка при добавлении комментария");
			}
		}
		public static ReturnMessage CreateCranTask(CranTaskInfo task) {
			Logger.info("Создание/изменение заявки на работу крана", Logger.LoggerSource.server);
			try {
				string result = "";
				string message = String.Format("Заявка на работу крана \"{0}\" №", task.CranName);
				OrdersUser currentUser = OrdersUser.loadFromCache(HttpContext.Current.User.Identity.Name);
				VotGESOrdersEntities eni = new VotGESOrdersEntities();
				CranTask tbl = new CranTask();
				if (task.init) {
					Logger.info("Определение номера заявки на кран", Logger.LoggerSource.server);
					tbl.State = "new";
					CranTask tsk = (from t in eni.CranTask orderby t.Number descending select t).FirstOrDefault();
					task.DateCreate = DateTime.Now;
					if (tsk != null) {
						task.Number = tsk.Number + 1;
					}
					else {
						task.Number = 1;
					}
					tbl.Allowed = false;
					tbl.Denied = false;
					tbl.Author = currentUser.Name;
					tbl.DateCreate = task.DateCreate;					
					task.Author = currentUser.FullName;
					eni.CranTask.AddObject(tbl);
					result = "Заявка на кран успешно создана";
				}
				else {
					CranTask tsk = (from t in eni.CranTask where t.Number == task.Number select t).FirstOrDefault();
					if (tsk == null) {
						return new ReturnMessage(false, "Заявка не найдена");
					}
					tbl = tsk;
					result = "Заявка на кран успешно изменена";
				}
				message += task.Number + ". ";

				if ((task.NeedEndDate <= task.NeedStartDate) || (task.Allowed && (task.AllowDateEnd <= task.AllowDateStart))) {
					return new ReturnMessage(false, "Дата окончания заявки больше чем дата начала");
				}

				tbl.Number = task.Number;
				tbl.CranName = task.CranName;
				tbl.AgreeComment = task.AgreeComments;
				tbl.NeedDateStart = task.NeedStartDate;
				tbl.NeedDateEnd = task.NeedEndDate;
				tbl.Comment = task.Comment;
				tbl.Manager = task.Manager;
				tbl.CranNumber = task.CranNumber;
				if (task.AgreeDict != null)
					tbl.AgreeUsersIDS = string.Join(";", task.AgreeDict.Keys);

				if (task.Finished) {
					tbl.State = "finished";
					result = "Заявка на кран завершена";
					tbl.RealDateStart = task.RealDateStart;
					tbl.RealDateEnd = task.RealDateEnd;
					tbl.AuthorFinish = currentUser.Name;
					tbl.Finished = true;
					message += " Заявка завершена";
				}
				else if (task.Allowed) {
					tbl.AllowedDateStart = task.AllowDateStart;
					tbl.AllowedDateEnd = task.AllowDateEnd;
					tbl.RealDateStart = task.AllowDateStart;
					tbl.RealDateEnd = task.AllowDateEnd;
					tbl.Denied = false;
					tbl.Allowed = true;
					tbl.Cancelled = false;
					tbl.State = "allowed";
					task.AuthorAllow = currentUser.FullName;
					result = "Заявка на кран разрешена";
					message += " Заявка разрешена";
				}
				else if (task.Denied) {
					tbl.AllowedDateStart = null;
					tbl.AllowedDateEnd = null;
					tbl.RealDateEnd = null;
					tbl.RealDateStart = null;
					tbl.Allowed = false;
					tbl.Denied = true;
					tbl.Cancelled = false;
					tbl.State = "denied";
					task.AuthorAllow = currentUser.FullName;
					result = "Заявка на кран отклонена";
					message += " Заявка отклонена";
				}
				else if (task.Cancelled) {
					tbl.State = "cancelled";
					tbl.Denied = false;
					tbl.Allowed = false;
					tbl.Cancelled = true;
					tbl.AuthorAllow = null;
					tbl.AllowedDateStart = null;
					tbl.AllowedDateEnd = null;
					tbl.RealDateEnd = null;
					tbl.RealDateStart = null;
					result = "Заявка на кран снята";
					message += " Заявка снята";
				}	else if (!task.init) {
					message += " Заявка изменена";
				}

				if (task.Allowed || task.Denied) {
					tbl.AuthorAllow = currentUser.Name;
				}

				eni.SaveChanges();
				MailContext.sendCranTask(message, new CranTaskInfo(tbl));
				if (Managers != null) {
					if (!Managers.Contains(task.Manager)) {
						Managers.Add(task.Manager);
					}
				}
				else
					ReadManagers();
				return new ReturnMessage(true, result);
			}
			catch (Exception e) {
				Logger.info("Ошибка при создании/изменении заявки на работу крана " + e.ToString(), Logger.LoggerSource.server);
				return new ReturnMessage(false, "Ошибка при создании/изменении заявки на работу крана");
			}
		}
		public ReturnMessage FinishCranTask(CranTaskInfo task) {
			return CranTaskInfo.CreateCranTask(task);
		}
		public ReturnMessage CancelCranTask(CranTaskInfo task) {
			return CranTaskInfo.CreateCranTask(task);
		}
		public ReturnMessage CommentCranTask(CranTaskInfo task,string comment) {
			return CranTaskInfo.AddComment(task, comment);
		}