Exemple #1
0
        //Находим или созлаём новый Склад
        //private int ReturnDirWarehouseID(string DirWarehouseName)
        internal async Task<int> ReturnDirWarehouseID(string DirWarehouseName)
        {
            //Есть склад "DirWarehouseName"
            var query =
                (
                    from x in db.DirWarehouses
                    where x.DirWarehouseName == DirWarehouseName
                    select x
                ).ToList();

            if (query.Count() > 0) return Convert.ToInt32(query[0].DirWarehouseID);

            //Нет, тогда создаём новый
            //Нет записи в БД - создаём новую группу и получаем Sub
            Models.Sklad.Dir.DirWarehouse dirWarehouse = new Models.Sklad.Dir.DirWarehouse();
            dirWarehouse.DirWarehouseID = null;
            dirWarehouse.DirWarehouseName = DirWarehouseName;
            //dirWarehouse.Sub = 0;
            dirWarehouse.Del = false;
            dirWarehouse.DirCashOfficeID = 1;
            dirWarehouse.DirBankID = 1;


            //db.Entry(dirWarehouse).State = EntityState.Added;
            //db.SaveChanges();
            PartionnyAccount.Controllers.Sklad.Dir.DirWarehouses.DirWarehousesController dirWarehousesController = new Dir.DirWarehouses.DirWarehousesController();
            dirWarehouse = await Task.Run(() => dirWarehousesController.mPutPostDirWarehouse(db, dirWarehouse, EntityState.Added, field));

            return Convert.ToInt32(dirWarehouse.DirWarehouseID);
        }
Exemple #2
0
        internal async Task <string> mSms_DocServicePurches(
            DbConnectionSklad db,
            DirSmsTemplate dirSmsTemplate,
            DocServicePurch docServicePurch,
            Models.Sklad.Sys.SysSetting sysSetting
            )
        {
            string ret = dirSmsTemplate.DirSmsTemplateMsg;

            //Парсим текст

            //Ваш (тип устройства/марка/модель) Mob.tel/Nokia/535 принят в ремонт, номер ремонта 2005
            //Мастерская Сити-Мастер
            //тел (тут вставляем номер тел точки чтоб чел мог набрать)


            //1. DirServiceNomenName: надо получить полное наименование
            Controllers.Sklad.Doc.DocServicePurches.DocServicePurchesController docServicePurchesController = new Controllers.Sklad.Doc.DocServicePurches.DocServicePurchesController();
            string[] DirServiceNomenPatchFullarr = await Task.Run(() => docServicePurchesController.mPatchFull(db, docServicePurch.DirServiceNomenID));

            string DirServiceNomenPatchFull = DirServiceNomenPatchFullarr[0];

            ret = ret.Replace("[[[ТоварНаименование]]]", DirServiceNomenPatchFull);


            //2. DocServicePurchID
            ret = ret.Replace("[[[ДокументНомер]]]", docServicePurch.DocServicePurchID.ToString());


            //3. Организация: получаем из настроек
            Models.Sklad.Dir.DirContractor dirContractor = await db.DirContractors.FindAsync(sysSetting.DirContractorIDOrg);

            ret = ret.Replace("[[[Организация]]]", dirContractor.DirContractorName);


            //4. Телефон: получаем из "docServicePurch.DirWarehouseID"
            Models.Sklad.Dir.DirWarehouse dirWarehouse = await db.DirWarehouses.FindAsync(docServicePurch.DirWarehouseID);

            ret = ret.Replace("[[[ТочкаНаименование]]]", dirWarehouse.DirWarehouseName);
            ret = ret.Replace("[[[ТочкаАдрес]]]", dirWarehouse.DirWarehouseAddress);
            ret = ret.Replace("[[[ТочкаТелефон]]]", dirWarehouse.Phone);


            //5. [[[Сумма]]]
            ret = ret.Replace("[[[Сумма]]]", docServicePurch.Sums.ToString()); //SumsTotal



            return(ret);
        }
        internal async Task <DocServicePurch2Tab> mPutPostDocServicePurch2Tab(
            DbConnectionSklad db,
            Models.Sklad.Doc.DocServicePurch docServicePurch,
            DocServicePurch2Tab docServicePurch2Tab,

            Classes.Account.Login.Field field //Дополнительные данные о сотруднике
            )
        {
            #region Лог

            //Пишем в Лог о смене статуса и мастера, если такое было
            logService.DocServicePurchID   = docServicePurch2Tab.DocServicePurchID;
            logService.DirServiceLogTypeID = 6;
            logService.DirEmployeeID       = field.DirEmployeeID;
            logService.DirServiceStatusID  = null;
            if (docServicePurch2Tab.DocServicePurch2TabID == null)
            {
                logService.Msg = "Создание записи " + docServicePurch2Tab.DirNomenName + " на сумму " + docServicePurch2Tab.PriceCurrency;
            }
            else
            {
                logService.Msg = "Изменение записи " + docServicePurch2Tab.DirNomenName + " на сумму " + docServicePurch2Tab.PriceCurrency;
            }

            await logServicesController.mPutPostLogServices(db, logService, EntityState.Added);

            #endregion


            #region Save

            docServicePurch2Tab.TabDate = DateTime.Now;

            if (docServicePurch2Tab.DocServicePurch2TabID > 0)
            {
                db.Entry(docServicePurch2Tab).State = EntityState.Modified;
            }
            else
            {
                db.Entry(docServicePurch2Tab).State = EntityState.Added;
            }
            await Task.Run(() => db.SaveChangesAsync());

            #endregion

            #region Партии *** *** *** *** *** *** *** ***


            Controllers.Sklad.Rem.RemPartyMinusesController remPartyMinuses = new Rem.RemPartyMinusesController();

            //Находим "DocServicePurch" по "docServicePurch2Tab.DocServicePurchID"
            //Models.Sklad.Doc.DocServicePurch docServicePurch = await db.DocServicePurches.FindAsync(docServicePurch2Tab.DocServicePurchID);
            Models.Sklad.Doc.Doc doc = await db.Docs.FindAsync(docServicePurch.DocID);


            #region Ищим в Возврате покупателя, если нет, то удаляем в RemPartyMinuses *** *** *** *** ***

            //Ищим в Возврате покупателя
            var queryRemPartyMinuses = await
                                       (
                from x in db.RemPartyMinuses
                where x.DocID == docServicePurch.DocID
                select x
                                       ).ToListAsync();

            for (int i = 0; i < queryRemPartyMinuses.Count(); i++)
            {
                int iRemPartyMinusID = Convert.ToInt32(queryRemPartyMinuses[i].RemPartyMinusID);

                var queryDocReturnsCustomerTab = await
                                                 (
                    from x in db.DocReturnsCustomerTabs
                    where x.RemPartyMinusID == iRemPartyMinusID
                    select x
                                                 ).ToListAsync();

                if (queryDocReturnsCustomerTab.Count() > 0)
                {
                    throw new System.InvalidOperationException(
                              Classes.Language.Sklad.Language.msg117 +

                              "<tr>" +
                              "<td>" + queryDocReturnsCustomerTab[0].RemPartyMinusID + "</td>" +                     //партия списания
                              "<td>" + queryDocReturnsCustomerTab[0].DocReturnsCustomerID + "</td>" +                //№ д-та
                              "<td>" + queryDocReturnsCustomerTab[0].DirNomenID + "</td>" +                          //Код товара
                              "<td>" + queryDocReturnsCustomerTab[0].Quantity + "</td>" +                            //списуемое к-во
                              "</tr>" +
                              "</table>" +

                              Classes.Language.Sklad.Language.msg117_1
                              );
                }

                //1.1. Удаляем "RemPartyMinuses" - не удаляем!!!
                //Models.Sklad.Rem.RemPartyMinus _remPartyMinus = await db.RemPartyMinuses.FindAsync(iRemPartyMinusID);
                //db.RemPartyMinuses.Remove(_remPartyMinus);
                //await db.SaveChangesAsync();
            }

            #endregion

            #region Удаляем все записи из таблицы "RemPartyMinuses" - не удаляем!!!
            //Удаляем все записи из таблицы "RemPartyMinuses"
            //Что бы правильно Проверяло на Остаток.
            //А то, товар уже списан, а я проверяю на остаток!

            //await Task.Run(() => remPartyMinuses.Delete(db, Convert.ToInt32(docServicePurch.DocID)));  //remPartyMinuses.Delete(db, Convert.ToInt32(doc.DocID)));

            #endregion


            #region Проверки и Списание с партий (RemPartyMinuses)


            #region Проверка

            //Переменные
            int    iRemPartyID = docServicePurch2Tab.RemPartyID;
            double dQuantity   = 1; // docServicePurch2Tab.Quantity;
                                    //Находим партию
            Models.Sklad.Rem.RemParty remParty = await db.RemParties.FindAsync(iRemPartyID);

            db.Entry(remParty).Reload(); // - Это Важно! Триггер изменил значения, то они НЕ видны в проекте, надо обновить значения!!!

            #region 1. Есть ли остаток в партии с которой списываем!
            if (remParty.Remnant < dQuantity)
            {
                throw new System.InvalidOperationException(
                          Classes.Language.Sklad.Language.msg104 +

                          "<tr>" +
                          "<td>" + docServicePurch2Tab.RemPartyID + "</td>" +    //партия
                          "<td>" + docServicePurch2Tab.DirNomenID + "</td>" +    //Код товара
                          "<td>1</td>" +                                         //"<td>" + docServicePurch2Tab.Quantity + "</td>"                                 //списуемое к-во
                          "<td>" + remParty.Remnant + "</td>" +                  //остаток партии
                          "<td>" + (1 - remParty.Remnant).ToString() + "</td>" + //"<td>" + (docServicePurch2Tab.Quantity - remParty.Remnant).ToString() + "</td>" //недостающее к-во
                          "</tr>" +
                          "</table>" +

                          Classes.Language.Sklad.Language.msg104_1
                          );
            }
            #endregion

            #region 2. Склад: склад документа должен соответствовать каждой списуемой партии!
            if (remParty.DirWarehouseID != docServicePurch.DirWarehouseID)
            {
                //Это нужно, т.к. к нам от клиента не пришли все значения модели: "docServicePurch.dirWarehouse.DirWarehouseName"
                Models.Sklad.Dir.DirWarehouse dirWarehouse = await db.DirWarehouses.FindAsync(docServicePurch.DirWarehouseID);

                throw new System.InvalidOperationException(
                          Classes.Language.Sklad.Language.msg105 +

                          "<tr>" +
                          "<td>" + docServicePurch2Tab.RemPartyID + "</td>" +         //партия
                          "<td>" + docServicePurch2Tab.DirNomenID + "</td>" +         //Код товара
                          "<td>" + dirWarehouse.DirWarehouseName + "</td>" +          //склад документа
                          "<td>" + remParty.dirWarehouse.DirWarehouseName + "</td>" + //склад партии
                          "</tr>" +
                          "</table>" +

                          Classes.Language.Sklad.Language.msg105_1
                          );
            }
            #endregion

            #region 3. Организация: организация документа должен соответствовать каждой списуемой партии!
            if (remParty.DirContractorIDOrg != doc.DirContractorIDOrg)
            {
                //Это нужно, т.к. к нам от клиента не пришли все значения модели: "docServicePurch.dirWarehouse.DirWarehouseName"
                Models.Sklad.Dir.DirContractor dirContractor = await db.DirContractors.FindAsync(doc.DirContractorIDOrg);

                throw new System.InvalidOperationException(
                          Classes.Language.Sklad.Language.msg106 +

                          "<tr>" +
                          "<td>" + docServicePurch2Tab.RemPartyID + "</td>" +              //партия
                          "<td>" + docServicePurch2Tab.DirNomenID + "</td>" +              //Код товара
                          "<td>" + dirContractor.DirContractorName + "</td>" +             //организация спецификации
                          "<td>" + remParty.dirContractorOrg.DirContractorName + "</td>" + //организация партии
                          "</tr>" +
                          "</table>" +

                          Classes.Language.Sklad.Language.msg106_1
                          );
            }
            #endregion

            #endregion


            #region Сохранение

            Models.Sklad.Rem.RemPartyMinus remPartyMinus = new Models.Sklad.Rem.RemPartyMinus();
            remPartyMinus.RemPartyMinusID         = null;
            remPartyMinus.RemPartyID              = docServicePurch2Tab.RemPartyID;
            remPartyMinus.DirNomenID              = Convert.ToInt32(docServicePurch2Tab.DirNomenID);
            remPartyMinus.Quantity                = 1; // docServicePurch2Tab.Quantity;
            remPartyMinus.DirCurrencyID           = docServicePurch2Tab.DirCurrencyID;
            remPartyMinus.DirCurrencyMultiplicity = docServicePurch2Tab.DirCurrencyMultiplicity;
            remPartyMinus.DirCurrencyRate         = docServicePurch2Tab.DirCurrencyRate;
            remPartyMinus.DirVatValue             = docServicePurch.DirVatValue;
            remPartyMinus.DirWarehouseID          = docServicePurch.DirWarehouseID;
            remPartyMinus.DirContractorIDOrg      = doc.DirContractorIDOrg;
            remPartyMinus.DirContractorID         = doc.DirContractorIDOrg;
            remPartyMinus.DocID         = Convert.ToInt32(docServicePurch.DocID);
            remPartyMinus.PriceCurrency = docServicePurch2Tab.PriceCurrency;
            remPartyMinus.PriceVAT      = docServicePurch2Tab.PriceVAT;
            remPartyMinus.FieldID       = Convert.ToInt32(docServicePurch2Tab.DocServicePurch2TabID);
            remPartyMinus.Reserve       = false; //docServicePurch.Reserve;

            remPartyMinus.DirEmployeeID = doc.DirEmployeeID;
            remPartyMinus.DocDate       = doc.DocDate;

            db.Entry(remPartyMinus).State = EntityState.Added;
            await db.SaveChangesAsync();

            #endregion


            #endregion


            #endregion


            return(docServicePurch2Tab);
        }
        internal async Task <DirWarehouse> mPutPostDirWarehouse(
            DbConnectionSklad db,
            DirWarehouse dirWarehouse,
            EntityState entityState,          //EntityState.Added, Modified

            Classes.Account.Login.Field field //Дополнительные данные о сотруднике
            )
        {
            if (dirWarehouse.SmenaClose && (dirWarehouse.SmenaCloseTime == null || dirWarehouse.SmenaCloseTime.Length != 5))
            {
                throw new System.InvalidOperationException("Не верное времмя закрытия смены ККМ!");
            }


            db.Entry(dirWarehouse).State = entityState;
            await Task.Run(() => db.SaveChangesAsync());


            #region Sub (Локации)

            //Если создаём новый склад, то создаём новые под-склады
            if (entityState == EntityState.Added)
            {
                //1.1. Списание
                Models.Sklad.Dir.DirWarehouse dirWarehouse1 = new DirWarehouse();
                dirWarehouse1.Sub                 = dirWarehouse.DirWarehouseID;
                dirWarehouse1.DirBankID           = dirWarehouse.DirBankID;
                dirWarehouse1.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                dirWarehouse1.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                dirWarehouse1.Phone               = dirWarehouse.Phone;
                dirWarehouse1.DirWarehouseName    = dirWarehouse.DirWarehouseName + SubWar1;
                dirWarehouse1.DirWarehouseLoc     = 1;

                db.Entry(dirWarehouse1).State = EntityState.Added;
                await Task.Run(() => db.SaveChangesAsync());


                //1.2. Возвраты
                Models.Sklad.Dir.DirWarehouse dirWarehouse2 = new DirWarehouse();
                dirWarehouse2.Sub                 = dirWarehouse.DirWarehouseID;
                dirWarehouse2.DirBankID           = dirWarehouse.DirBankID;
                dirWarehouse2.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                dirWarehouse2.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                dirWarehouse2.Phone               = dirWarehouse.Phone;
                dirWarehouse2.DirWarehouseName    = dirWarehouse.DirWarehouseName + SubWar2;
                dirWarehouse2.DirWarehouseLoc     = 2;

                db.Entry(dirWarehouse2).State = EntityState.Added;
                await Task.Run(() => db.SaveChangesAsync());


                //1.3. Заказы для ремонтов
                Models.Sklad.Dir.DirWarehouse dirWarehouse3 = new DirWarehouse();
                dirWarehouse3.Sub                 = dirWarehouse.DirWarehouseID;
                dirWarehouse3.DirBankID           = dirWarehouse.DirBankID;
                dirWarehouse3.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                dirWarehouse3.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                dirWarehouse3.Phone               = dirWarehouse.Phone;
                dirWarehouse3.DirWarehouseName    = dirWarehouse.DirWarehouseName + SubWar3;
                dirWarehouse3.DirWarehouseLoc     = 3;

                db.Entry(dirWarehouse3).State = EntityState.Added;
                await Task.Run(() => db.SaveChangesAsync());


                //1.4. Предзаказы
                Models.Sklad.Dir.DirWarehouse dirWarehouse4 = new DirWarehouse();
                dirWarehouse4.Sub                 = dirWarehouse.DirWarehouseID;
                dirWarehouse4.DirBankID           = dirWarehouse.DirBankID;
                dirWarehouse4.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                dirWarehouse4.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                dirWarehouse4.Phone               = dirWarehouse.Phone;
                dirWarehouse4.DirWarehouseName    = dirWarehouse.DirWarehouseName + SubWar4;
                dirWarehouse4.DirWarehouseLoc     = 4;

                db.Entry(dirWarehouse4).State = EntityState.Added;
                await Task.Run(() => db.SaveChangesAsync());


                //1.5. БУ.Разбор
                Models.Sklad.Dir.DirWarehouse dirWarehouse5 = new DirWarehouse();
                dirWarehouse5.Sub                 = dirWarehouse.DirWarehouseID;
                dirWarehouse5.DirBankID           = dirWarehouse.DirBankID;
                dirWarehouse5.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                dirWarehouse5.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                dirWarehouse5.Phone               = dirWarehouse.Phone;
                dirWarehouse5.DirWarehouseName    = dirWarehouse.DirWarehouseName + SubWar5;
                dirWarehouse5.DirWarehouseLoc     = 5;

                db.Entry(dirWarehouse5).State = EntityState.Added;
                await Task.Run(() => db.SaveChangesAsync());
            }
            else
            {
                //1.1. Списание
                var query1 = await db.DirWarehouses.Where(x => x.Sub == dirWarehouse.DirWarehouseID && x.DirWarehouseLoc == 1).ToListAsync();

                if (query1.Count() > 0)
                {
                    Models.Sklad.Dir.DirWarehouse dirWarehouse1 = query1[0];
                    dirWarehouse1.DirBankID           = dirWarehouse.DirBankID;
                    dirWarehouse1.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                    dirWarehouse1.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                    dirWarehouse1.Phone            = dirWarehouse.Phone;
                    dirWarehouse1.DirWarehouseName = dirWarehouse.DirWarehouseName + SubWar1;
                    dirWarehouse1.DirWarehouseLoc  = 1;

                    db.Entry(dirWarehouse1).State = EntityState.Modified;
                    await Task.Run(() => db.SaveChangesAsync());
                }


                //1.2. Возвраты
                var query2 = await db.DirWarehouses.Where(x => x.Sub == dirWarehouse.DirWarehouseID && x.DirWarehouseLoc == 2).ToListAsync();

                if (query2.Count() > 0)
                {
                    Models.Sklad.Dir.DirWarehouse dirWarehouse1 = query2[0];
                    dirWarehouse1.DirBankID           = dirWarehouse.DirBankID;
                    dirWarehouse1.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                    dirWarehouse1.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                    dirWarehouse1.Phone            = dirWarehouse.Phone;
                    dirWarehouse1.DirWarehouseName = dirWarehouse.DirWarehouseName + SubWar2;
                    dirWarehouse1.DirWarehouseLoc  = 2;

                    db.Entry(dirWarehouse1).State = EntityState.Modified;
                    await Task.Run(() => db.SaveChangesAsync());
                }


                //1.3. Заказы для ремонтов
                var query3 = await db.DirWarehouses.Where(x => x.Sub == dirWarehouse.DirWarehouseID && x.DirWarehouseLoc == 3).ToListAsync();

                if (query3.Count() > 0)
                {
                    Models.Sklad.Dir.DirWarehouse dirWarehouse1 = query3[0];
                    dirWarehouse1.DirBankID           = dirWarehouse.DirBankID;
                    dirWarehouse1.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                    dirWarehouse1.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                    dirWarehouse1.Phone            = dirWarehouse.Phone;
                    dirWarehouse1.DirWarehouseName = dirWarehouse.DirWarehouseName + SubWar3;
                    dirWarehouse1.DirWarehouseLoc  = 3;

                    db.Entry(dirWarehouse1).State = EntityState.Modified;
                    await Task.Run(() => db.SaveChangesAsync());
                }


                //1.4. Предзаказы
                var query4 = await db.DirWarehouses.Where(x => x.Sub == dirWarehouse.DirWarehouseID && x.DirWarehouseLoc == 4).ToListAsync();

                if (query4.Count() > 0)
                {
                    Models.Sklad.Dir.DirWarehouse dirWarehouse1 = query4[0];
                    dirWarehouse1.DirBankID           = dirWarehouse.DirBankID;
                    dirWarehouse1.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                    dirWarehouse1.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                    dirWarehouse1.Phone            = dirWarehouse.Phone;
                    dirWarehouse1.DirWarehouseName = dirWarehouse.DirWarehouseName + SubWar4;
                    dirWarehouse1.DirWarehouseLoc  = 4;

                    db.Entry(dirWarehouse1).State = EntityState.Modified;
                    await Task.Run(() => db.SaveChangesAsync());
                }


                //1.5. БУ.Разбор
                var query5 = await db.DirWarehouses.Where(x => x.Sub == dirWarehouse.DirWarehouseID && x.DirWarehouseLoc == 5).ToListAsync();

                if (query5.Count() > 0)
                {
                    Models.Sklad.Dir.DirWarehouse dirWarehouse1 = query5[0];
                    dirWarehouse1.DirBankID           = dirWarehouse.DirBankID;
                    dirWarehouse1.DirCashOfficeID     = dirWarehouse.DirCashOfficeID;
                    dirWarehouse1.DirWarehouseAddress = dirWarehouse.DirWarehouseAddress;
                    dirWarehouse1.Phone            = dirWarehouse.Phone;
                    dirWarehouse1.DirWarehouseName = dirWarehouse.DirWarehouseName + SubWar5;
                    dirWarehouse1.DirWarehouseLoc  = 5;

                    db.Entry(dirWarehouse1).State = EntityState.Modified;
                    await Task.Run(() => db.SaveChangesAsync());
                }
            }


            #endregion


            return(dirWarehouse);
        }