123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Windows;
- using System.Windows.Media.Imaging;
- using InABox.Clients;
- using InABox.Core;
- using InABox.WPF;
- using Microsoft.Win32;
- namespace InABox.DynamicGrid
- {
- public delegate String OnGetWatermark(CoreRow row);
-
- public class DynamicDocumentGrid<TDocument, TEntity> : DynamicManyToManyGrid<TDocument, TEntity>
- where TEntity : Entity, IPersistent, IRemotable, new()
- where TDocument : Entity, IEntityDocument, IPersistent, IRemotable, new() // Entity, IPersistent, IRemotable, IManyToMany<TEntity, Document>, new()
- {
- private DynamicActionColumn supercedecolumn;
- public bool ShowSupercededColumn
- {
- get
- {
- return supercedecolumn.Position != DynamicActionColumnPosition.Hidden;
- }
- set
- {
- supercedecolumn.Position = value ? DynamicActionColumnPosition.End : DynamicActionColumnPosition.Hidden;
- }
- }
- public DynamicDocumentGrid()
- {
- MultiSelect = false;
- HiddenColumns.Add(x => x.DocumentLink.ID);
- HiddenColumns.Add(x => x.Superceded);
- HiddenColumns.Add(x => x.DocumentLink.FileName);
- ActionColumns.Add(new DynamicActionColumn(DocumentImage, ViewDocument) { Position = DynamicActionColumnPosition.Start });
- supercedecolumn = new DynamicActionColumn(SupercededImage, SupercedeDocument);
- ActionColumns.Add(supercedecolumn);
- }
- public override int Order()
- {
- return int.MaxValue;
- }
- private BitmapImage SupercededImage(CoreRow row)
- {
- if (row == null)
- return Properties.Resources.tick.AsBitmapImage();
- if (row.Get<TDocument, DateTime>(x => x.Superceded) != DateTime.MinValue)
- return Properties.Resources.warning.AsBitmapImage();
- return Properties.Resources.tick.AsBitmapImage();
- }
- private bool SupercedeDocument(CoreRow row)
- {
- var id = row.Get<TDocument, Guid>(x => x.ID);
- var document = WorkingList.FirstOrDefault(x => x.ID.Equals(id));
- if (document != null)
- document.Superceded = document.Superceded == DateTime.MinValue ? DateTime.Now : DateTime.MinValue;
- return true;
- }
- private BitmapImage DocumentImage(CoreRow arg)
- {
- return Properties.Resources.view.AsBitmapImage();
- }
- private bool ViewDocument(CoreRow row)
- {
- var filename = row.Get<TDocument, string>(x => x.DocumentLink.FileName);
- if (Path.GetExtension(filename).ToUpper().Equals(".PDF"))
- {
- var viewer = new DocumentEditor(row.ToObject<TDocument>());
- viewer.Watermark = OnGetWaterMark?.Invoke(row);
- viewer.PrintAllowed = true;
- viewer.SaveAllowed = true;
- viewer.ShowDialog();
- }
- else
- {
- var id = row.Get<TDocument, Guid>(x => x.DocumentLink.ID);
- var docrow = new Client<Document>().Query(new Filter<Document>(x => x.ID).IsEqualTo(id)).Rows.FirstOrDefault();
- if (docrow != null)
- {
- var tmpfile = Path.ChangeExtension(Path.GetTempFileName(), Path.GetExtension(filename));
- File.WriteAllBytes(tmpfile, docrow.Get<Document, byte[]>(x => x.Data));
- var gsProcessInfo = new ProcessStartInfo();
- gsProcessInfo.Verb = "open";
- gsProcessInfo.WindowStyle = ProcessWindowStyle.Normal;
- gsProcessInfo.FileName = tmpfile;
- gsProcessInfo.UseShellExecute = true;
- Process.Start(gsProcessInfo);
- }
- else
- {
- MessageBox.Show(string.Format("Unable to retrieve {0}!", filename));
- }
- }
- //Document doc = new Client<Document>().Load(new Filter<Document>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
- //if (doc != null)
- //{
- // if (System.IO.Path.GetExtension(doc.FileName).ToUpper().Equals(".PDF"))
- // {
- // PDFViewer viewer = new PDFViewer(doc);
- // viewer.ShowDialog();
- // }
- // else
- // {
- // String filename = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(), System.IO.Path.GetExtension(doc.FileName));
- // System.IO.File.WriteAllBytes(filename, doc.Data);
- // ProcessStartInfo gsProcessInfo = new ProcessStartInfo();
- // gsProcessInfo.Verb = "open";
- // gsProcessInfo.WindowStyle = ProcessWindowStyle.Normal;
- // gsProcessInfo.UseShellExecute = true;
- // gsProcessInfo.FileName = filename;
- // Process.Start(gsProcessInfo);
- // }
- //}
- //else
- // MessageBox.Show("Document does nto exist!");
- return false;
- }
- public event OnGetWatermark OnGetWaterMark;
- protected override void DoAdd()
- {
- var dlg = new OpenFileDialog();
- dlg.Multiselect = true;
- if (dlg.ShowDialog() == true)
- {
- using (new WaitCursor())
- {
- var docs = new List<Document>();
- foreach (var filename in dlg.FileNames)
- {
- // Create a Document
- var doc = new Document();
- doc.FileName = Path.GetFileName(filename).ToLower();
- doc.TimeStamp = new FileInfo(dlg.FileName).LastWriteTime;
- doc.Data = File.ReadAllBytes(filename);
- doc.CRC = CoreUtils.CalculateCRC(doc.Data);
- docs.Add(doc);
- }
- if (docs.Any())
- {
- new Client<Document>().Save(docs, "Initial Upload");
- foreach (var doc in docs)
- {
- var newitem = CreateItem();
- var prop = (IEntityLink)otherproperty.GetValue(newitem);
- prop.ID = doc.ID;
- prop.Synchronise(doc);
- SaveItem(newitem);
- }
- }
- }
- Refresh(false, true);
- }
- }
- }
- }
|