| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- using System;
- using System.Linq;
- using System.Threading.Tasks;
- using Comal.Classes;
- using InABox.Core;
- using InABox.Mobile;
- using Xamarin.CommunityToolkit.ObjectModel;
- using Xamarin.Forms;
- namespace PRS.Mobile
- {
-
- public class TransferModuleViewModel : BindableObject
- {
-
- public ObservableRangeCollection<StockTransactionImage> Images { get; private set; }
-
- public String Notes { get; set; }
- public StockTransactions Transactions { get; private set; }
-
- private StockLocationShell _source;
-
- public StockLocationShell Source
- {
- get => _source;
- set
- {
- if (Equals(value, _source)) return;
- _source = value;
- SourceHoldings?.Refresh(true);
- CheckTransactions(StockTransactionView.Source);
- OnPropertyChanged();
- }
- }
- public StockHoldingModel SourceHoldings { get; private set; }
-
- private StockLocationShell _target;
-
- public StockLocationShell Target
- {
- get => _target;
- set
- {
- if (Equals(value, _target)) return;
- _target = value;
- TargetHoldings?.Refresh(true);
- CheckTransactions(StockTransactionView.Target);
- OnPropertyChanged();
- }
- }
- public StockHoldingModel TargetHoldings { get; private set; }
-
- public TransferModuleViewModel()
- {
- Images = new();
- Notes = "";
-
- Transactions = new StockTransactions();
- Transactions.CollectionChanged += (sender, args) =>
- {
- CheckTransactions(StockTransactionView.Source);
- CheckTransactions(StockTransactionView.Target);
- };
-
-
- _source = new StockLocationShell();
- _target = new StockLocationShell();
-
- SourceHoldings = new StockHoldingModel(App.Data,
- () => new Filter<StockHolding>(x => x.Location.ID).IsEqualTo(Source.ID));
- SourceHoldings.Transactions = Transactions;
-
- TargetHoldings = new StockHoldingModel(App.Data,
- () => new Filter<StockHolding>(x => x.Location.ID).IsEqualTo(Target.ID));
- TargetHoldings.Transactions = Transactions;
-
- }
-
- private void CheckTransactions(StockTransactionView view)
- {
-
- var location = view == StockTransactionView.Source ? Source : Target;
- var holdings = view == StockTransactionView.Source ? SourceHoldings : TargetHoldings;
-
- foreach (var transaction in Transactions)
- {
- if (location.ID == transaction.Source?.LocationID || location.ID == transaction.Target?.LocationID)
- {
- var transholding = view == StockTransactionView.Source ? transaction.Source : transaction.Target;
- if (!holdings.Any(
- x => x.ProductID == transaction.ProductID
- && String.Equals(x.DimensionsUnitSize, transaction.DimensionsUnitSize)
- && (x.LocationID == (transaction.Source?.LocationID ?? Guid.Empty) ||
- x.LocationID == (transaction.Target?.LocationID ?? Guid.Empty))
- && (x.StyleID == (transaction.Source?.StyleID ?? Guid.Empty) ||
- x.StyleID == (transaction.Target?.StyleID ?? Guid.Empty))
- && (x.JobID == (transaction.Source?.JobID ?? Guid.Empty) ||
- x.JobID == (transaction.Target?.JobID ?? Guid.Empty))
- ))
- {
- var holding = holdings.CreateItem();
- holding.ProductID = transaction.ProductID;
- holding.ProductCode = transaction.ProductCode;
- holding.ProductName = transaction.ProductName;
- Guid imageid = transaction?.ImageID ?? Guid.Empty;
- if (imageid != Guid.Empty && transaction?.Image !=null)
- holdings.Images[imageid] = transaction?.Image;
- holding.ImageID = imageid;
- holding.DimensionsUnitID = transaction?.DimensionsUnitID ?? Guid.Empty;
- holding.DimensionsQuantity = transaction?.DimensionsQuantity ?? 0.0;
- holding.DimensionsLength = transaction?.DimensionsLength ?? 0.0;
- holding.DimensionsWidth = transaction?.DimensionsWidth ?? 0.0;
- holding.DimensionsHeight = transaction?.DimensionsHeight ?? 0.0;
- holding.DimensionsWeight = transaction?.DimensionsWeight ?? 0.0;
- holding.DimensionsUnitSize = transaction?.DimensionsUnitSize ?? string.Empty;
- holding.DimensionsValue = transaction?.DimensionsValue ?? 0.0;
- holding.LocationID = transholding?.LocationID ?? Guid.Empty;
- holding.LocationCode = transholding?.LocationCode ?? string.Empty;
- holding.LocationDescription = transholding?.LocationDescription ?? string.Empty;
- holding.StyleID = transholding?.StyleID ?? Guid.Empty;
- holding.StyleCode = transholding?.StyleCode ?? string.Empty;
- holding.StyleDescription = transholding?.StyleDescription ?? string.Empty;
- holding.JobID = transholding?.JobID ?? Guid.Empty;
- holding.JobNumber = transholding?.JobNumber ?? string.Empty;
- holding.JobName = transholding?.JobName ?? string.Empty;
- holdings.CommitItem(holding);
-
- }
- }
- }
- }
- public Task Save(IProgress<String> progress)
- {
- return Task.Run(() =>
- {
- progress.Report("Creating Stock Movement Batch");
- var batchModel = new StockMovementBatchModel(App.Data,
- () => new Filter<StockMovementBatch>().None());
- batchModel.Refresh(false);
- var batch = batchModel.AddItem();
- batch.Type = StockMovementBatchType.Transfer;
- batch.EmployeeID = App.Data.Me.ID;
- batch.Notes = Notes;
- batch.Timestamp = DateTime.Now;
- batch.Save("Created on Mobile Device");
-
- progress.Report($"Saving Transactions");
- var movementModel = new StockMovementModel(App.Data,
- () => new Filter<StockMovement>().None());
- movementModel.Refresh(false);
- Transactions.ProcessTransactions(movementModel, batch.ID);
- progress.Report($"Creating {movementModel.Count()} Movements");
- movementModel.Save("Created on Mobile Device");
- var batchimageModel = new StockMovementBatchDocumentModel(App.Data,
- () => new Filter<StockMovementBatchDocument>().None());
- batchimageModel.Refresh(false);
-
- progress.Report($"Saving {Images.Count} Images");
- var documentModel = new DocumentModel(App.Data,
- () => new Filter<Document>().None());
- documentModel.Refresh(false);
- int i = 1;
- foreach (var image in Images)
- {
- progress.Report($"Saving {i}/{Images.Count} Images");
- var document = documentModel.AddItem();
- document.Data = image.Document.Data;
- document.FileName = image.Document.FileName;
- document.CRC = CoreUtils.CalculateCRC(image.Document.Data);
- document.TimeStamp = DateTime.Now;
- document.Save("Created on MobileDevice");
- var batchImage = batchimageModel.AddItem();
- {
- batchImage.BatchID = batch.ID;
- batchImage.DocumentID = document.ID;
- batchImage.Thumbnail = image.Thumbnail;
- }
- }
-
- progress.Report($"Updating Thumbnails");
- batchimageModel.Save("Created on Mobile Device");
- });
- }
-
- }
- }
|