/// <summary> /// モジュール数変更時 /// </summary> /// <param name="module">変更があったモジュール</param> /// <param name="prevModuleCount">前回値モジュール数</param> private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount) { ModulesGridItem[] modules = { module }; var storageModules = AggregateStorage(modules); foreach (var kvp in storageModules) { // 変更対象のモジュールを検索 Storages.FirstOrDefault(x => x.TransportType.Equals(kvp.Key))?.SetDetails(kvp.Value, prevModuleCount); } }
/// <summary> /// モジュール数変更時 /// </summary> /// <param name="module">変更があったモジュール</param> /// <param name="prevModuleCount">前回値モジュール数</param> private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount) { ModulesGridItem[] modules = { module }; Dictionary <string, List <StorageDetailsListItem> > storageModules = AggregateStorage(modules); foreach (var kvp in storageModules) { // 変更対象のウェアを検索 Storages.FirstOrDefault(x => x.TransportType.TransportTypeID == kvp.Key)?.SetDetails(kvp.Value, prevModuleCount); } }
/// <summary> /// モジュール数変更時 /// </summary> /// <param name="module">変更があったモジュール</param> /// <param name="prevModuleCount">変更前モジュール数</param> private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount) { ModulesGridItem[] modules = { module }; Dictionary <string, List <IProductDetailsListItem> > prodDict = AggregateProduct(modules); foreach (var item in prodDict) { // 変更対象のウェアを検索 Products.FirstOrDefault(x => x.Ware.WareID == item.Key)?.SetDetails(item.Value, prevModuleCount); } }
/// <summary> /// モジュールを復元 /// </summary> /// <param name="conn">DB接続情報</param> /// <param name="progress">進捗</param> /// <param name="maxProgress">進捗最大</param> protected virtual void RestoreModules(DBConnection conn, IProgress <int> progress, int maxProgress) { // レコード数取得 var moduleCnt = conn.QuerySingle <int>("SELECT count(*) AS Count from Modules"); var equipmentCnt = conn.QuerySingle <int>("SELECT count(*) AS Count from Equipments"); var records = moduleCnt + equipmentCnt; var modules = new List <ModulesGridItem>(moduleCnt); var progressCnt = 1; // モジュールを復元 const string sql1 = "SELECT ModuleID, Count FROM Modules ORDER BY Row ASC"; foreach (var(moduleID, count) in conn.Query <(string, long)>(sql1)) { var module = Module.Get(moduleID); if (module != null) { var mod = new ModulesGridItem(module, null, count) { EditStatus = EditStatus.Unedited }; modules.Add(mod); } progress.Report((int)((double)progressCnt++ / records * maxProgress)); } // モジュールの装備を復元 const string sql2 = "SELECT Row, EquipmentID FROM Equipments"; foreach (var(row, equipmentID) in conn.Query <(int, string)>(sql2)) { var eqp = Equipment.Get(equipmentID); if (eqp != null) { modules[row].AddEquipment(eqp); } progress.Report((int)((double)progressCnt++ / records * maxProgress)); } _WorkArea.StationData.ModulesInfo.Modules.Reset(modules); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="module">編集対象モジュール</param> public EditEquipmentWindow(ModulesGridItem module) { InitializeComponent(); DataContext = new EditEquipmentViewModel(module); }
/// <summary> /// モジュール数変更時に建造に必要なリソースを更新 /// </summary> /// <param name="module">変更対象モジュール</param> /// <param name="prevModuleCount">モジュール数前回値</param> private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount) { (string ModuleID, string Method, long ModuleCount)[] modules =
/// <summary> /// モジュール自動追加 /// </summary> public void AutoAddModule() { var result = LocalizedMessageBox.Show("Lang:AutoAddConfirm", "Lang:Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); if (result != MessageBoxResult.Yes) { return; } var addedRecords = 0L; // 追加レコード数 var addedModules = 0L; // 追加モジュール数 AutoAddModuleWork.Clear(); while (true) { // 追加モジュールIDとモジュール数のペア一覧 var addModules = _ProductCalculator.CalcNeedModules(Products, _Settings); // 追加モジュールが無ければ(不足が無くなれば)終了 if (!addModules.Any()) { break; } var addModulesGridItems = new List <ModulesGridItem>(); // 実際に追加するモジュール一覧 foreach (var(moduleID, count) in addModules) { // モジュール自動追加作業用に実際に追加するモジュールが存在するか? if (AutoAddModuleWork.ContainsKey(moduleID)) { // モジュール自動追加作業用に実際に追加するモジュールが存在する場合、 // モジュール数を増やしてレコードがなるべく増えないようにする AutoAddModuleWork[moduleID].ModuleCount += count; } else { // モジュール自動追加作業用に実際に追加するモジュールが存在しない場合、 // 実際に追加するモジュールと見なす var module = DB.X4DB.Module.Get(moduleID); if (module == null) { return; } var mgi = new ModulesGridItem(module, null, count) { EditStatus = EditStatus.Edited }; addModulesGridItems.Add(mgi); AutoAddModuleWork.Add(moduleID, mgi); // 追加レコード数更新 addedRecords++; } // 追加モジュール数更新 addedModules += count; } // モジュール一覧に追加対象モジュールを追加 _Modules.Modules.AddRange(addModulesGridItems); } if (addedRecords == 0) { LocalizedMessageBox.Show("Lang:NoAddedModulesAutomaticallyMessage", "Lang:Confirmation", MessageBoxButton.OK, MessageBoxImage.Information); } else { LocalizedMessageBox.Show("Lang:AddedModulesAutomaticallyMessage", "Lang:Confirmation", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK, addedRecords, addedModules); } AutoAddModuleWork.Clear(); }