//Сохранение internal async Task <DocCashOfficeSum> mPutPostDocCashOfficeSum( DbConnectionSklad db, DocCashOfficeSum docCashOfficeSum, EntityState entityState //EntityState.Added, Modified ) { //1. Дата операции DateTime DocCashOfficeSumDate = DateTime.Now; docCashOfficeSum.DocCashOfficeSumDate = DocCashOfficeSumDate; docCashOfficeSum.DateOnly = Convert.ToDateTime(DocCashOfficeSumDate.ToString("yyyy-MM-dd")); //2. Валюта //2.1. По кассе получаем Models.Sklad.Dir.DirCashOffice dirCashOffice = db.DirCashOffices.Find(docCashOfficeSum.DirCashOfficeID); //2.2. Получаем Курсы Models.Sklad.Dir.DirCurrency dirCurrency = db.DirCurrencies.Find(dirCashOffice.DirCurrencyID); docCashOfficeSum.DirCurrencyID = dirCurrency.DirCurrencyID; docCashOfficeSum.DirCurrencyRate = dirCurrency.DirCurrencyRate; docCashOfficeSum.DirCurrencyMultiplicity = dirCurrency.DirCurrencyMultiplicity; //3. Проверка //3.1. В зависимости от "DirCashOfficeSumTypeID" сумма с "+" или с "-" Models.Sklad.Dir.DirCashOfficeSumType dirCashOfficeSumType = db.DirCashOfficeSumTypes.Find(docCashOfficeSum.DirCashOfficeSumTypeID); docCashOfficeSum.DocCashOfficeSumSum = dirCashOfficeSumType.Sign * docCashOfficeSum.DocCashOfficeSumSum; //3.2. Если изъятие из кассы и сумма в кассе меньше чем надо ихъять if (dirCashOfficeSumType.Sign < 0 && dirCashOffice.DirCashOfficeSum < Math.Abs(docCashOfficeSum.DocCashOfficeSumSum)) { throw new System.InvalidOperationException( Classes.Language.Sklad.Language.msg27_1 + dirCashOffice.DirCashOfficeSum + Classes.Language.Sklad.Language.msg27_2 + Math.Abs(docCashOfficeSum.DocCashOfficeSumSum) + Classes.Language.Sklad.Language.msg27_3 ); } //4. Сохранение db.Entry(docCashOfficeSum).State = entityState; await Task.Run(() => db.SaveChangesAsync()); //5. Ретурн return(docCashOfficeSum); }
//Используется в новых платежах по документу internal async Task <DocCashOfficeSum> mPutPostDocCashOfficeSum_2( DbConnectionSklad db, DocCashOfficeSum docCashOfficeSum, EntityState entityState //EntityState.Added, Modified ) { //Если редактируем //Удалить платеж, но перед этим проверить был ли Z-отчет if (docCashOfficeSum.DocCashOfficeSumID > 0) { //Получем по "DocCashOfficeSumID" предыдущие значения платежа Models.Sklad.Doc.DocCashOfficeSum docCashOfficeSum_OLD = await Task.Run(() => db.DocCashOfficeSums.FindAsync(docCashOfficeSum.DocCashOfficeSumID)); //Проверяем был ли Z-отчет var queryZ1 = await Task.Run(() => ( from x in db.DocCashOfficeSums where x.DocCashOfficeSumDate > docCashOfficeSum_OLD.DocCashOfficeSumDate && x.DirCashOfficeSumTypeID == 3 select x ).ToListAsync()); if (queryZ1.Count() > 0) { throw new System.InvalidOperationException( Classes.Language.Sklad.Language.msg119 + docCashOfficeSum_OLD.DocCashOfficeSumDate + Classes.Language.Sklad.Language.msg119_1 + queryZ1[0].DocCashOfficeSumDate ); } //Удаляем платеж db.Entry(docCashOfficeSum_OLD).State = EntityState.Deleted; await Task.Run(() => db.SaveChangesAsync()); } //По кассе получаем Models.Sklad.Dir.DirCashOffice dirCashOffice = db.DirCashOffices.Find(docCashOfficeSum.DirCashOfficeID); //Проверка //1. В зависимости от "DirCashOfficeSumTypeID" сумма с "+" или с "-" Models.Sklad.Dir.DirCashOfficeSumType dirCashOfficeSumType = db.DirCashOfficeSumTypes.Find(docCashOfficeSum.DirCashOfficeSumTypeID); docCashOfficeSum.DocCashOfficeSumSum = dirCashOfficeSumType.Sign * docCashOfficeSum.DocCashOfficeSumSum; //Если изъятие из кассы и сумма в кассе меньше чем надо изъять if (dirCashOfficeSumType.Sign < 0 && dirCashOffice.DirCashOfficeSum < Math.Abs(docCashOfficeSum.DocCashOfficeSumSum)) { throw new System.InvalidOperationException( Classes.Language.Sklad.Language.msg27_1 + dirCashOffice.DirCashOfficeSum + Classes.Language.Sklad.Language.msg27_2 + Math.Abs(docCashOfficeSum.DocCashOfficeSumSum) + Classes.Language.Sklad.Language.msg27_3 ); } //2. Z-отчет var queryZ2 = await Task.Run(() => ( from x in db.DocCashOfficeSums where x.DocCashOfficeSumDate > docCashOfficeSum.DocCashOfficeSumDate && x.DirCashOfficeSumTypeID == 3 select x ).ToListAsync()); if (queryZ2.Count() > 0) { throw new System.InvalidOperationException( Classes.Language.Sklad.Language.msg119 + docCashOfficeSum.DocCashOfficeSumDate + Classes.Language.Sklad.Language.msg119_1 + queryZ2[0].DocCashOfficeSumDate ); } //4. Сохранение db.Entry(docCashOfficeSum).State = entityState; await Task.Run(() => db.SaveChangesAsync()); //5. Ретурн return(docCashOfficeSum); }