コード例 #1
0
ファイル: Dataset.cs プロジェクト: zhangzheng1205/B3
        /// <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);
            }
        }
コード例 #2
0
ファイル: Dataset.cs プロジェクト: zhangzheng1205/B3
        /// <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;
                    }
                }
            }
        }
コード例 #3
0
ファイル: Dataset.cs プロジェクト: zhangzheng1205/B3
        /// <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;
        }
コード例 #4
0
ファイル: Dataset.cs プロジェクト: zhangzheng1205/B3
        /// <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);
            }
        }
コード例 #5
0
        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("سند با موفقیت ثبت شد");
                            }
                        }
                    }
                }
            }
        }