/// <summary> /// Saves a set of years sensor data to disk /// </summary> /// <param name="years">The years to save</param> public void SaveSensorData(int[] years) { using (var zip = ZipFile.Read(SaveLocation)) { zip.CompressionLevel = CompressionLevel.None; foreach (var year in years) { foreach (var sensor in Sensors) { ; var dataBlockStream = new MemoryStream(); var x = new YearlyDataBlock(sensor.CurrentState.GetCompressedValues(StartYear.AddYears(year), StartYear.AddYears(year + 1)), sensor.RawData.GetCompressedValues(StartYear.AddYears(year), StartYear.AddYears(year + 1))); Serializer.Serialize(dataBlockStream, x); dataBlockStream.Position = 0; if (zip.EntryFileNames.Contains(sensor.Hash + "/" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern))) { zip.RemoveEntry(sensor.Hash + "\\" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern)); } zip.AddEntry(sensor.Hash + "\\" + StartYear.AddYears(year).ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern), dataBlockStream); } } zip.Save(SaveLocation); } }
/// <summary> /// Loads in sensor data for a group of years /// </summary> /// <param name="years">The years to load</param> /// <param name="retainExistingValues">Whether or not to keep existing values in the dataset</param> public void LoadInSensorData(int[] years, bool retainExistingValues = false) { using (var zip = ZipFile.Read(SaveLocation)) { foreach (var year in years) { foreach (var sensor in Sensors) { if (!retainExistingValues) { sensor.CurrentState.Values = new Dictionary <DateTime, float>(); } var data = zip.Entries.FirstOrDefault( x => x.FileName.Contains(sensor.Hash) && x.FileName.EndsWith( StartYear.AddYears(year).ToString( CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern))); if (data != null) { var stream = new MemoryStream(); data.Extract(stream); stream.Position = 0; var compressedValues = Serializer.Deserialize <YearlyDataBlock>(stream); sensor.CurrentState.AddCompressedValues(compressedValues.CurrentValues); sensor.RawData.AddCompressedValues(compressedValues.RawValues); } } if (retainExistingValues) { if (LowestYearLoaded > year) { LowestYearLoaded = year; } if (HighestYearLoaded < year) { HighestYearLoaded = year; } } else { LowestYearLoaded = year; HighestYearLoaded = year; } } } }
/// <summary> /// Unloads a set of years from the dataset /// </summary> /// <param name="years">The years to unload</param> /// <param name="saveValues">Whether or not to first save the values before unloading</param> public void UnloadSensorData(int[] years, bool saveValues = true) { if (saveValues) { SaveSensorData(years); } foreach (var year in years) { foreach (var sensor in Sensors) { var currentValuesToRemove = sensor.CurrentState.Values.Where( x => x.Key >= StartYear.AddYears(year) && x.Key < StartYear.AddYears(year + 1)).ToArray(); foreach (var keyValuePair in currentValuesToRemove) { sensor.CurrentState.Values.Remove(keyValuePair.Key); } var rawValuesToRemove = sensor.RawData.Values.Where( x => x.Key >= StartYear.AddYears(year) && x.Key < StartYear.AddYears(year + 1)).ToArray(); foreach (var keyValuePair in rawValuesToRemove) { sensor.RawData.Values.Remove(keyValuePair.Key); } } } var timestamps = Sensors.SelectMany(x => x.CurrentState.Values).Select(x => x.Key).Distinct().ToArray(); HighestYearLoaded = timestamps.Max().Year - StartYear.Year; LowestYearLoaded = timestamps.Min().Year - StartYear.Year; }
/// <summary> /// Saves the dataset to disk /// </summary> /// <param name="saveLocation">Location to save file to</param> /// <param name="exportData">Whether or not to export the data</param> /// <param name="deleteFile">Whether or not to first delete the file</param> public void SaveToFile(string saveLocation, bool exportData, bool deleteFile) { if (deleteFile && File.Exists(saveLocation)) { File.Delete(saveLocation); } if (!Directory.Exists(Common.DatasetSaveLocation)) { Directory.CreateDirectory(Common.DatasetSaveLocation); } if (File.Exists(saveLocation)) { File.Copy(saveLocation, saveLocation + ".backup", true); } if (exportData) { var exportFolder = Common.DatasetExportRootFolder(this); var exportedFiles = Directory.GetFiles(exportFolder, "*.*", SearchOption.AllDirectories).OrderBy(x => x).ToArray(); if (exportedFiles.Length >= 5) { for (var i = 0; i < exportedFiles.Length - 4; i++) { File.Delete(exportedFiles[i]); } } DatasetExporter.Export(this, Common.DatasetExportLocation(this), ExportFormat.CSV, true); } /* .NET BinaryFormatter * using (var stream = new FileStream(SaveLocation, FileMode.Create)) * new BinaryFormatter().Serialize(stream, this); * * Protobuf * using (var file = File.Create(SaveLocation)) * Serializer.Serialize(file, this); */ using (var zip = File.Exists(saveLocation) ? ZipFile.Read(saveLocation) : new ZipFile()) { zip.CompressionLevel = CompressionLevel.None; zip.Comment = string.Format("B3 ZIP FORMAT v1.1"); var datasetStream = new MemoryStream(); Serializer.Serialize(datasetStream, this); datasetStream.Position = 0; if (zip.EntryFileNames.Contains("dataset")) { zip.RemoveEntry("dataset"); } zip.AddEntry("dataset", datasetStream); var siteStream = new MemoryStream(); Serializer.Serialize(siteStream, Site); siteStream.Position = 0; if (zip.EntryFileNames.Contains("site")) { zip.RemoveEntry("site"); } zip.AddEntry("site", siteStream); if (Site.Images != null) { var siteImagesStream = new MemoryStream(); new BinaryFormatter().Serialize(siteImagesStream, Site.Images); siteImagesStream.Position = 0; if (zip.EntryFileNames.Contains("siteimages")) { zip.RemoveEntry("siteimages"); } zip.AddEntry("siteimages", siteImagesStream); } foreach (var sensor in Sensors) { var sensorMetaData = new MemoryStream(); Serializer.Serialize(sensorMetaData, sensor); sensorMetaData.Position = 0; if (!zip.EntryFileNames.Contains(sensor.Hash + "/")) { zip.AddDirectoryByName(sensor.Hash); } if (zip.EntryFileNames.Contains(sensor.Hash + "/metadata")) { zip.RemoveEntry(sensor.Hash + "\\metadata"); } zip.AddEntry(sensor.Hash + "\\metadata", sensorMetaData); for (var i = StartYear.AddYears(LowestYearLoaded); i < StartYear.AddYears(HighestYearLoaded + 1); i = i.AddYears(1)) { var dataBlockStream = new MemoryStream(); var x = new YearlyDataBlock(sensor.CurrentState.GetCompressedValues(i, i.AddYears(1)), sensor.RawData.GetCompressedValues(i, i.AddYears(1))); Serializer.Serialize(dataBlockStream, x); dataBlockStream.Position = 0; if (zip.EntryFileNames.Contains(sensor.Hash + "/" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern))) { zip.RemoveEntry(sensor.Hash + "\\" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern)); } zip.AddEntry(sensor.Hash + "\\" + i.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern), dataBlockStream); } } zip.Save(saveLocation); } }
private async void OnAddAccDocument() { AccDocumentHeader = new AccDocumentHeader(); var getDocumentNumbering = await _accDocumentHeadersService.GetDocumentNumberingAsync(); var dateDocument = _appContextService.CurrentFinancialYear; StartYear = await _currencyExchangesService.GetStartFinancialYear(dateDocument); EndYear = await _currencyExchangesService.GetEndFinancialYear(dateDocument); EndNumber = getDocumentNumbering.EndNumber; var lastAccDocumentHeaderCode = _accDocumentHeadersService.GetLastAccDocumentHeaderCode(_appContextService.CurrentFinancialYear); if (lastAccDocumentHeaderCode > EndNumber) { Error("شماره گذاری اسناد به پایان رسیده،لطفا شماره گذاری اسناد را بررسی نمایید"); } else { if (DocumentDate == null) { Error(".تاریخ سند خالی می باشد"); } else if (DocumentDate != null) { PersianCalendar persianCalendar = new PersianCalendar(); var accHeaderDate = persianCalendar.GetYear(DocumentDate.Date); if (accHeaderDate != dateDocument) { Error("تاریخ سند را درست وارد نمایید"); } else { var getHeader = _tLDocumentsService.GetAccDocumentHeaders(StartYear.Date, DocumentDate.Date); if (getHeader == true) { Information?.Invoke("در بین اسناد وضعیت پیش نویس وجود دارد"); } else { var startNumber = getDocumentNumbering.StartNumber; if (lastAccDocumentHeaderCode == 0) { lastAccDocumentHeaderCode = startNumber; } else { lastAccDocumentHeaderCode++; } var accountDocumentId = getDocumentNumbering.AccountDocumentId; var style = getDocumentNumbering.StyleId; var countingWayId = getDocumentNumbering.CountingWayId; // var lastAccDocumentHeaderCode = _accDocumentHeadersService.GetLastAccDocumentHeaderCode(_appContextService.CurrentFinancialYear); var lastDailyNumberCode = await _accDocumentHeadersService.GetLastDailyNumberCode(); if (lastAccDocumentHeaderCode == 0) { lastAccDocumentHeaderCode = startNumber; } else { lastAccDocumentHeaderCode++; } var stringLastAccDocumentHeaderCode = lastAccDocumentHeaderCode.ToString(); var stringlastDailyNumberCode = lastDailyNumberCode.ToString(); var lastAccDocumentHeadersCode = stringLastAccDocumentHeaderCode; var lastDayAccDocumentHeadersCode = stringLastAccDocumentHeaderCode; if (lastAccDocumentHeaderCode <= EndNumber) { // var accDocumentHeader = Mapper.Map<EditableAccDocumentHeader, AccDocumentHeader>(AccDocumentHeader); AccDocumentHeader.DailyNumber = int.Parse($"{stringlastDailyNumberCode}"); AccDocumentHeader.DocumentNumber = int.Parse($"{lastAccDocumentHeadersCode}"); AccDocumentHeader.ManualDocumentNumber = int.Parse($"{lastAccDocumentHeadersCode}"); AccDocumentHeader.SystemFixNumber = int.Parse($"{lastAccDocumentHeadersCode}"); AccDocumentHeader.SystemName = Environment.MachineName; AccDocumentHeader.Exporter = _appContextService.CurrentUser.FriendlyName; AccDocumentHeader.Status = StatusEnum.Temporary; AccDocumentHeader.DocumentDate = DocumentDate; AccRow = 1; string AccRowCode = AccRow.ToString(); if (TypeHeader == 4) { AccDocumentItems = new ObservableCollection <AccDocumentItemOpenCloseDTO>(await _openingClosingsService.AddCloseAccAsync(StartYear.Date, EndYear.Date)); AccDocumentHeader.HeaderDescription = "بابت سند اختتامیه"; AccDocumentHeader.TypeDocumentId = 4; await _accDocumentHeadersService.AddAccDocumentHeaderAsync(AccDocumentHeader); var accItems = new ObservableCollection <AccDocumentItemOpenCloseDTO>(await _openingClosingsService.AddCloseAccAsync(StartYear.Date, EndYear.Date)); var accList = AccDocumentItems.Select((xd, i) => new AccDocumentItem { AccDocumentHeaderId = AccDocumentHeader.AccDocumentHeaderId, SLId = (xd.SLId), DL1Id = (xd.DL1Id), DL2Id = (xd.DL2Id), Description1 = "بابت سند اختتامیه", Description2 = "بابت سند اختتامیه", Credit = (xd.SumDebit - xd.SumCredit) < 0 ? Math.Abs(xd.SumDebit - xd.SumCredit) : 0, Debit = (xd.SumDebit - xd.SumCredit) > 0 ? Math.Abs(xd.SumDebit - xd.SumCredit) : 0, CurrencyId = xd.CurrencyId, CurrencyAmount = xd.SumCurrencyAmount }); _accDocumentItemsService.AddAccDocumentItemsAsync(accList); } else if (TypeHeader == 3) { AccDocumentItems = new ObservableCollection <AccDocumentItemOpenCloseDTO>(await _openingClosingsService.AddOpenAccAsync(StartYear.Date, EndYear.Date)); AccDocumentHeader.DocumentDate = StartYear.AddYears(1); AccDocumentHeader.HeaderDescription = "بابت سند افتتاحیه"; AccDocumentHeader.TypeDocumentId = 3; await _accDocumentHeadersService.AddAccDocumentHeaderAsync(AccDocumentHeader); var accItems = new ObservableCollection <AccDocumentItemOpenCloseDTO>(await _openingClosingsService.AddOpenAccAsync(StartYear.Date, EndYear.Date)); var accList = AccDocumentItems.Select((xd, i) => new AccDocumentItem { AccDocumentHeaderId = AccDocumentHeader.AccDocumentHeaderId, SLId = (xd.SLId), DL1Id = (xd.DL1Id), DL2Id = (xd.DL2Id), Description1 = "بابت سند افتتاحیه", Description2 = "بابت سند افتتاحیه", Credit = (xd.SumDebit - xd.SumCredit) < 0 ? Math.Abs(xd.SumDebit - xd.SumCredit) : 0, Debit = (xd.SumDebit - xd.SumCredit) > 0 ? Math.Abs(xd.SumDebit - xd.SumCredit) : 0, CurrencyId = xd.CurrencyId, CurrencyAmount = xd.SumCurrencyAmount }); _accDocumentItemsService.AddAccDocumentItemsAsync(accList); } // await _accDocumentHeadersService.AddAccDocumentHeaderAsync(AccDocumentHeader); dateDocument = _appContextService.CurrentFinancialYear; var getAcc = await _openingClosingsService.GetAccDocumentItemsAsync(dateDocument); GetAcc = getAcc.Count; Opening = await _openingClosingsService.GetCloseAccAsync(dateDocument); var newOpening = await _openingClosingsService.GetOpenAccAsync(dateDocument + 1); Closing = await _openingClosingsService.GetCloseProfitLossAccountAsync(dateDocument); if (GetAcc > 0 && Closing == true && Opening == false) { CheckType = "اختتامیه"; Enable = true; } else if (GetAcc > 0 && Opening == true && newOpening == false) { CheckType = "افتتاحیه"; Enable = true; } else if (GetAcc > 0 && Opening == true && newOpening == true) { CheckType = "سند افتتاحیه و اختتامیه صادر شده است"; Enable = false; } else if (GetAcc > 0 && Closing == false) { CheckType = "سندهای سود و زیانی بسته نشده است"; Enable = false; } else if (GetAcc == 0) { CheckType = "هیچ سندی صادر نشده است."; Enable = false; } Information("سند با موفقیت ثبت شد"); } } } } } }