/// <summary> /// Событие, устанавливающее параметры фильтрации /// </summary> /// <param name="sender">Контрол</param> private void DBSelect_BeforeSearch(object sender) { _currentDbSelectCtrl.Filter.Type.Clear(); if (!string.IsNullOrEmpty(_type)) { _currentDbSelectCtrl.Filter.Type.Add(_type, DocTypeQueryType.Equals); } _currentDbSelectCtrl.Filter.Date.Clear(); if (!string.IsNullOrEmpty(V4Page.Doc.Date.ToString("yyyyMMdd"))) { _currentDbSelectCtrl.Filter.Date.DateSearchType = DateSearchType.MoreThan; _currentDbSelectCtrl.Filter.Date.Add(V4Page.Doc.Date.ToString("yyyyMMdd")); } _currentDbSelectCtrl.Filter.IDs.Clear(); if (!string.IsNullOrEmpty(_linkedDocs)) { var col = Convert.Str2Collection(_linkedDocs); foreach (var id in col) { _currentDbSelectCtrl.Filter.IDs.Add(id); } if (col.Count > 0) { _currentDbSelectCtrl.Filter.IDs.Inverse = true; } } }
/// <summary> /// Пересчет полей в соответствии с доп. ед.изм. /// </summary> private void SetAdvUnitInfo(string _oldVal) { var oldVal = 0; int.TryParse(_oldVal, out oldVal); if (oldVal == 0) { return; } //Unit old = new Unit(_oldVal.ToString(CultureInfo.InvariantCulture)); var old = GetObjectById(typeof(Unit), _oldVal.ToString(CultureInfo.InvariantCulture)) as Unit; if (old != null && factUsl.Count > 0 && factUsl.ResourceId > 0) { var maxscale = factUsl.Resource.GetScale4Unit(efUnit.Value, 3, Document.PlatelschikField.Value.ToString()); factUsl.Count = Math.Round(factUsl.Count / factUsl.Resource.ConvertionCoefficient(old, factUsl.Unit), maxscale); efCount.Value = Convert.Decimal2StrInit((decimal)factUsl.Count, maxscale); factUsl.CostOutNDS = Math.Round(factUsl.CostOutNDS * (decimal)factUsl.Resource.ConvertionCoefficient(old, factUsl.Unit), Scale); efCostOutNDS.Value = factUsl.CostOutNDS.ToString(CultureInfo.InvariantCulture); ShowCalcMessage(factUsl.Recalc(factUsl.CostOutNDS.ToString(), "2", "CostOutNDS", "0", Scale)); } }
/// <summary> /// </summary> /// <remarks>Скопировано из v2</remarks> private decimal _GetCoefUe2Valuta() { var formula = FormulaField.ValueString; try { return(decimal.Parse(formula.Replace('.', ','))); } catch { } var f = formula.Replace(" ", ""); f = f.Replace("ДатаОплаты", "ДатаОплаты()"); f = f.Replace("ДатаРеализации", "ДатаРеализации()"); f = f.Replace("ДатаСчета", "ДатаСчета()"); f = ReplacePercent(f, "Percent"); f = ReplaceOperator(f, "Multiply", '*'); f = ReplaceOperator(f, "Devide", '/'); f = ReplaceOperator(f, "Minus", '-'); f = ReplaceOperator(f, "Plus", '+'); return(Convert.Round((decimal)Exec(f), 8)); }
/// <summary> /// Загрузка параметров /// </summary> private void LoadParams(StringCollection paramNames) { if (paramNames.Count < 1) { return; } var parametersStr = Convert.Collection2Str(paramNames).Replace(",", "','"); if (string.IsNullOrWhiteSpace(parametersStr)) { return; } var sqlParams = new Dictionary <string, object> { { "@clid", _clid } }; var dt = DBManager.GetData(string.Format(SQLQueries.q_НастройкиОбщие_Получить, parametersStr), Config.DS_user, CommandType.Text, sqlParams); /* * for (int i = 0; i< dt.Rows.Count; i++) * { * string name = dt.Rows[i]["Параметр"].ToString().Trim(); * string value = dt.Rows[i]["Значение"] == DBNull.Value ? string.Empty : dt.Rows[i]["Значение"].ToString(); * AppParamType paramType = (AppParamType)int.Parse(dt.Rows[i]["ТипПараметра"].ToString()); * _params.Add(new AppParameter(name, value, paramType)); * } */ foreach (DataRow r in dt.Rows) { var dbObj = r["Параметр"]; var name = dbObj.ToString(); dbObj = r["Значение"]; var value = dbObj == DBNull.Value ? string.Empty : dbObj.ToString(); dbObj = r["ТипПараметра"]; var paramType = dbObj == DBNull.Value ? AppParamType.NotSaved : (AppParamType)int.Parse(dbObj.ToString()); //dbObj = r["КодНастройкиКлиента"]; //int clid = dbObj == DBNull.Value ? 0 : (int)dbObj; //В первую очередь добавляем параметры с требуемым _clid //if (clid == _clid) // _params.Add(new AppParameter(name, value, paramType)); //else //{ if (!_params.Exists(p => p.Name == name)) { _params.Add(new AppParameter(name, value, paramType)); } //} } }
/// <summary> /// PreRender для количества /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Count_PreRender(object sender, EventArgs e) { var maxscale = Scale; if (!factUsl.UnitId.ToString().IsNullEmptyOrZero()) { maxscale = factUsl.Resource.GetScale4Unit(factUsl.UnitId.ToString(), 3, Document.PlatelschikField.Value.ToString()); } efCount.Value = Convert.Decimal2StrInit((decimal)factUsl.Count, maxscale); efCount.Precision = maxscale; }
/// <summary> /// Кнопка: Сохранить /// </summary> private bool SaveData() { if (string.IsNullOrEmpty(id) || id == "0") { return(false); } var sc = new StringCollection(); Update(sc); if (sc.Count > 0) { var wi = WindowsIdentity.GetCurrent(); var wp = new WindowsPrincipal(wi); if (wp.IsInRole(@"EURO\Domain Admins") /*|| Page.User.IsInRole("TEST\\Programists")*/) { if (Validation()) { var sqlParams = new Dictionary <string, object> { { "@КодСотрудника", id } }; var sql = @"UPDATE Сотрудники SET " + Convert.Collection2Str(sc) + " WHERE КодСотрудника = @КодСотрудника"; DBManager.ExecuteNonQuery(sql, CommandType.Text, Config.DS_user, sqlParams); return(true); } return(false); } if (CurrentUser.HasRole((int)Role.Кадровик) && efStatus.OriginalValue != employee.Status.ToString()) { if (sc.Count > 1) { ShowMessage("Вы можете менять только состояние сотрудника", Resx.GetString("errDoisserWarrning"), MessageStatus.Error); return(false); } var sqlParams = new Dictionary <string, object> { { "@КодСотрудника", id }, { "@Состояние", efStatus.Value } }; try { DBManager.ExecuteNonQuery(SQLQueries.UPDATE_СотрудникСостояние, CommandType.Text, Config.DS_user, sqlParams); } catch (Exception e) { ShowMessage(e.Message, Resx.GetString("errDoisserWarrning"), MessageStatus.Error); return(false); } } else { ShowMessage(Resx.GetString("msgNoAccess"), Resx.GetString("errDoisserWarrning"), MessageStatus.Error); return(false); } } return(true); }
/// <summary> /// Получение строки с ID типов документа /// </summary> /// <returns>Строка с ID типов документа</returns> private string GetDocTypeIDsStr() { if (DocTypeParams.Count > 0) { var typeIDs = new StringCollection(); var selectLRSql = "SELECT КодТипаДокумента FROM ТипыДокументов WHERE L >= @L AND R <= @R; "; var selectParentSql = "SELECT КодТипаДокумента FROM ТипыДокументов WHERE Parent = @Parent; "; DocTypeParams.ForEach( type => { var sql = new StringBuilder(); switch (type.QueryType) { case DocTypeQueryType.Equals: typeIDs.Add(type.DocTypeID); break; case DocTypeQueryType.WithChildren: sql.Append(@" DECLARE @L int, @R int; "); sql.AppendFormat(@" SELECT @L = L, @R = R FROM ТипыДокументов WHERE КодТипаДокумента = {0}; ", type.DocTypeID); sql.Append(selectLRSql); break; case DocTypeQueryType.WithSynonyms: sql.AppendFormat(@" DECLARE @Parent int; SELECT @Parent = Parent FROM ТипыДокументов WHERE КодТипаДокумента = {0}; ", type.DocTypeID); sql.Append(selectParentSql); break; case DocTypeQueryType.WithChildrenSynonyms: sql.Append(@" DECLARE @L int, @R int; "); sql.AppendFormat(@" SELECT @L = ISNULL(Pr.L, Ch.L), @R = ISNULL(Pr.R, Ch.R) FROM ТипыДокументов Ch LEFT JOIN ТипыДокументов Pr ON Pr.КодТипаДокумента = Ch.Parent WHERE Ch.КодТипаДокумента = {0}; ", type.DocTypeID); sql.Append(selectLRSql); break; } if (type.QueryType != DocTypeQueryType.Equals) { var dt = new DataTable(); try { dt = DBManager.GetData(sql.ToString(), Config.DS_document); } catch (Exception ex) { Logger.WriteEx(new DetailedException("Ошибка при получении типов документов в DSODoc", ex)); throw ex; } for (var i = 0; i < dt.Rows.Count; i++) { var typeID = dt.Rows[i][0].ToString(); if (!typeIDs.Contains(typeID)) { typeIDs.Add(typeID); } } } } ); return(Convert.Collection2Str(typeIDs)); } return(string.Empty); }
/// <summary> /// PreRender для поля "всего" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Vsego_PreRender(object sender, EventArgs e) { efVsego.Value = Convert.Decimal2StrInit(factUsl.Vsego, Scale); }
/// <summary> /// PreRender для суммы НДС /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SummaNDS_PreRender(object sender, EventArgs e) { efSummaNDS.Value = Convert.Decimal2StrInit(factUsl.SummaNDS, Scale); }
/// <summary> /// PreRender для цены без НДС /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CostOutNDS_PreRender(object sender, EventArgs e) { efCostOutNDS.Value = Convert.Decimal2StrInit(factUsl.CostOutNDS, Scale); }
/// <summary> /// Обработка клиентских команд /// </summary> /// <param name="cmd">Команды</param> /// <param name="param">Параметры</param> protected override void ProcessCommand(string cmd, NameValueCollection param) { switch (cmd) { case "SaveAndClose": SaveData(true); break; case "SaveData": SaveData(false); break; case "DeleteData": DeleteData(); break; case "CloseWindow": JS.Write("parent.resources_Records_Close();"); break; case "DialogCostRecalc_Yes": var d_kol = factUsl.Count > 0 && !factUsl.Count.Equals("0") ? factUsl.Count : 1; var _costOutNDS = factUsl.CostOutNDS; decimal _summaOutNDS = 0; decimal _summaNDS = 0; decimal _vsego = 0; var stavka = factUsl.StavkaNDS; var prst = (decimal)stavka.Величина * 100; var scale = Document != null && !Document.Unavailable ? Document.CurrencyScale : 2; _vsego = Convert.Round((decimal)(d_kol * (double)_costOutNDS), scale); _summaNDS = Convert.Round(_vsego / (100 + prst) * prst, scale); _summaOutNDS = _vsego - _summaNDS; _costOutNDS = Convert.Round((decimal)((double)_summaOutNDS / d_kol), scale * 2); var maxscale = factUsl.Resource.GetScale4Unit(efUnit.Value, 3, Document.PlatelschikField.Value.ToString()); factUsl.Count = d_kol; efCount.Value = Convert.Decimal2Str((decimal)factUsl.Count, maxscale, false); factUsl.CostOutNDS = _costOutNDS; efCostOutNDS.Value = Convert.Decimal2Str(factUsl.CostOutNDS, scale * 2, false); factUsl.SummaOutNDS = Convert.Round(_summaOutNDS, scale); efSummaOutNDS.Value = Convert.Decimal2Str(factUsl.SummaOutNDS, scale, false); factUsl.SummaNDS = Convert.Round(_summaNDS, scale); efSummaNDS.Value = Convert.Decimal2Str(factUsl.SummaNDS, scale, false); factUsl.Vsego = Convert.Round(_vsego, scale); efVsego.Value = Convert.Decimal2Str(factUsl.Vsego, scale, false); break; case "DialogCostRecalc_No": ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "0", Scale)); break; case "DialogRecalc_Yes": ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "0", Scale)); break; case "DialogRecalc_Recalc": ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "1", Scale)); break; case "DialogRecalc_No": ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "2", Scale)); break; case "DialogRecalc_Change": ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "3", Scale)); break; } }
/// <summary> /// Преобразование коллекции к строке с разделителем ',' /// </summary> public static string Collection2Str(IEnumerable <string> col) { return(Convert.Collection2Str(col)); }
/// <summary> /// Преобразование коллекции к строке с разделителем ',' /// </summary> public static string Collection2Str(StringCollection col) { return(Convert.Collection2Str(col)); }
/// <summary> /// Отрисовка списка документов /// </summary> /// <param name="w"></param> /// <param name="dt"></param> /// <param name="_title"></param> /// <param name="_oneTitle"></param> /// <param name="_type"></param> /// <param name="_linkType"></param> /// <param name="fieldId"></param> /// <param name="field"></param> /// <param name="fieldEn"></param> private void RenderLinkedDocsInfoDetails(TextWriter w, DataTable dt, string _title, string _oneTitle, string _type, string _linkType, string fieldId, string field, string fieldEn) { var dvSys = new DataView(); dvSys.Table = dt; var dv = new DataView(); dv.Table = dt; dv.Sort = "КодРесурса1, ДатаДокумента"; if (dv.Count == 0) { return; } Document d = null; //Currency cur = null; var curSml = " "; var curScale = 2; decimal sum = 0; var dtp = V4Page.GetObjectById(typeof(DocType), _type) as DocType; if (!dtp.Unavailable) { w.Write("<table border=0 style='BORDER-COLLAPSE:collapse;'>"); w.Write("<tr>"); w.Write("<td {0}>", dv.Count == 0 ? "style=\"padding-bottom:15px;\"" : ""); w.Write(" \"" + (V4Page.IsRusLocal ? dtp.Name : dtp.TypeDocEn) + "\""); w.Write(" (" + Resx.GetString("LBL_ПоПолю") + " \"" + (V4Page.IsRusLocal ? field : fieldEn) + "\")"); w.Write(":</td>"); w.Write("</tr>"); w.Write("</table>"); } w.Write("<table border=0 style='BORDER-COLLAPSE:collapse;padding-bottom:15px;'>"); for (var i = 0; i < dv.Count; i++) { d = V4Page.GetObjectById(typeof(Document), dv[i]["КодДокумента"].ToString()) as Document; if (d.Unavailable) { continue; } var res = d.DocumentData.ResourceId1; if (res.HasValue && res > 0) { //todo //cur = Currency.GetCurrency(res.Value); //cur._PersonID = doc._Person1; //if (cur.Unavailable || cur.ParentOf(V2.Resources.Resource._Money)) curSml = " "; //else //{ // curSml = cur.CurrencySymbol; // curScale = int.Parse(cur._UnitScale); //} } else { curSml = " "; } w.Write("<tr>"); w.Write("<td style='PADDING-LEFT:10px;' valign='top'>"); V4Page.RenderLinkDoc(w, d.Id); w.Write("<img src='/styles/DocMain.gif' border=0>"); V4Page.RenderLinkEnd(w); w.Write("</td>"); w.Write("<td noWrap valign='top'>"); V4Page.RenderLinkDoc(w, d.Id); w.Write(d.Number.Length > 0 ? Resx.GetString("lN") + " " + d.Number + " " : ""); if (d.Date != DateTime.MinValue) { w.Write(Resx.GetString("lD") + " " + d.Date.ToString("dd.MM.yyyy")); } V4Page.RenderLinkEnd(w); w.Write("</td>"); w.Write("<td noWrap valign='top'style='PADDING-LEFT:5px;'>"); if (d.Finished) { w.Write(Resx.GetString("listComplete")); } else if (d.Signed) { w.Write(Resx.GetString("listSigned")); } else { w.Write(Resx.GetString("listNotSigned")); } w.Write("</td>"); w.Write("<td align='right' noWrap valign='top' style='PADDING-LEFT:5px;'>"); if (d.DocumentData.Money1.HasValue && d.DocumentData.Money1 > 0) { V4Page.RenderNumber(w, d.DocumentData.Money1.Value.ToString(), curScale); } else { w.Write(" "); } w.Write("</td>"); w.Write("<td valign='top'>"); w.Write(curSml); w.Write("</td>"); w.Write("<td valign='top' style='PADDING-LEFT:5px;'>"); w.Write(d.Description.Length == 0 ? " " : d.Description); w.Write("</td>"); w.Write("</tr>"); if (!dv[i]["КодРесурса1"].Equals(DBNull.Value) && (i < dv.Count - 1 && !dv[i + 1]["КодРесурса1"].Equals(dv[i]["КодРесурса1"]) || i == dv.Count - 1)) { dvSys.RowFilter = "КодРесурса1=" + dv[i]["КодРесурса1"]; if (dvSys.Count > 1) { sum = System.Convert.ToDecimal(dt.Compute("SUM(Money1)", "КодРесурса1=" + dv[i]["КодРесурса1"])); w.Write("<tr>"); w.Write("<td colspan=3 align='right'>"); w.Write(Resx.GetString("listTotal") + ":"); w.Write("</td>"); w.Write("<td align='right' noWrap style='PADDING-LEFT:5px;'>"); V4Page.RenderNumber(w, Convert.Decimal2Str(sum, curScale), curScale); w.Write("</td>"); w.Write("<td>"); w.Write(curSml); w.Write("</td>"); w.Write("<td>"); w.Write(" "); w.Write("</td>"); w.Write("</tr>"); } } curScale = 2; curSml = " "; } w.Write("</table>"); }
/// <summary> /// Пересчет сумм /// </summary> /// <param name="oldValue">Старое значение поля</param> /// <param name="inx">Индекс</param> /// <param name="name">Название поля</param> /// <param name="whatDo">Индекс действия</param> /// <param name="scale">Точность</param> public string Recalc(string oldValue, string inx, string name, string whatDo, int scale) { var message = string.Empty; /* * Элемент = 1 - поле Товар * 2 - поле Цена * 3 - поле Количество * 4 - поле Сумма * 5 - поле НДС * 8 - поле Всего */ if (whatDo.Equals("")) { return(message); } if (whatDo.Equals("2")) { switch (name) { case "Count": Count = Convert.Str2Double(oldValue); break; case "CostOutNDS": CostOutNDS = Convert.Str2Decimal(oldValue); break; case "StavkaNDS": int number; int.TryParse(oldValue, out number); StavkaNDSId = number; break; case "SummaOutNDS": SummaOutNDS = Convert.Str2Decimal(oldValue); break; case "SummaNDS": SummaNDS = Convert.Str2Decimal(oldValue); break; case "Vsego": Vsego = Convert.Str2Decimal(oldValue); break; } return(message); } var d_kol = Count > 0 && !Count.Equals(0) ? Count : 1; var _costOutNDS = CostOutNDS > 0 ? CostOutNDS : 0; var _summaOutNDS = SummaOutNDS > 0 ? SummaOutNDS : 0; var _summaNDS = SummaNDS > 0 ? SummaNDS : 0; var _vsego = Vsego > 0 ? Vsego : 0; var _stavkaNDS = StavkaNDSId > 0 ? StavkaNDS.Величина : 0; switch (int.Parse(inx) * 10 + int.Parse(whatDo)) { case 10: case 20: case 30: //изменение товара, изменение цены, изменение количества if (_costOutNDS == 0 && _summaOutNDS != 0) { _costOutNDS = Convert.Round((decimal)((double)_summaOutNDS / d_kol), 4); } _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 2); _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2); _vsego = _summaOutNDS + _summaNDS; break; case 40: //изменение суммы и перерасчет _summaOutNDS = Convert.Round(_summaOutNDS, 2); _costOutNDS = Convert.Round((decimal)((double)_summaOutNDS / d_kol), 4); _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2); _vsego = _summaOutNDS + _summaNDS; break; case 41: // обратный перерасчет суммы _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 2); _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2); _vsego = _summaOutNDS + _summaNDS; break; case 43: //принудительное задание суммы _summaOutNDS = Convert.Round(_summaOutNDS, 2); break; case 50: // изменение НДС _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2); _summaOutNDS = Convert.Round(_summaOutNDS, 2); _vsego = _summaOutNDS + _summaNDS; break; case 51: //перерасчет обратно НДС _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2); _vsego = _summaOutNDS + _summaNDS; break; case 53: //принудительное задание ндс _summaNDS = Convert.Round(_summaNDS, 2); break; case 60: // изменение Акциза case 61: // перерасчет обратно Акциза case 63: // принудительное задание Акциза break; case 70: // изменение ГСМ case 71: // перерасчет обратно ГСМ case 73: // принудительное задание ГСМ break; case 80: //изменение Всего и перерасчет decimal oldCost = 0; _vsego = Convert.Round(_vsego, 3); _costOutNDS = Convert.Round((decimal)((double)_vsego / ((1 + _stavkaNDS) * d_kol)), 4); _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 3); _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2); do { if (_summaOutNDS + _summaNDS < _vsego) { if (_stavkaNDS != 0) { _summaNDS = _vsego - _summaOutNDS; // В результате округления были слегка завышены налоги. message = "TTN_msgTaxInflated"; } else { _vsego = _summaOutNDS + _summaNDS; // В результате округления было изменено значение Всего. message = "TTN_msgVsegoChanged"; } } else if (_summaOutNDS + _summaNDS > _vsego) { oldCost = _costOutNDS; if (d_kol > 100) { _costOutNDS = _costOutNDS - Convert.Str2Decimal("0.0001"); } else if (d_kol <= 100) { _summaOutNDS = _summaOutNDS - Convert.Str2Decimal("0.01"); _costOutNDS = Convert.Round((decimal)((double)_summaOutNDS / d_kol), 4); } _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 2); _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2); } else { break; } } while (_summaOutNDS + _summaNDS != _vsego || _costOutNDS <= Convert.Str2Decimal("0.0001")); if ((oldCost == _costOutNDS || _costOutNDS <= Convert.Str2Decimal("0.0001")) && _costOutNDS != 0) { if (_costOutNDS == 0) { _costOutNDS = Convert.Str2Decimal("0.0001"); } // Округление прошло не удачно. message = "TTN_msgRoundingNotSuccessful."; } break; case 81: // перерасчет обратно Всего _vsego = _summaOutNDS + _summaNDS; break; case 83: // принудительное задание Всего _vsego = Convert.Round(_vsego, 2); break; } CostOutNDS = Convert.Round(_costOutNDS, scale * 2); SummaOutNDS = Convert.Round(_summaOutNDS, scale); SummaNDS = Convert.Round(_summaNDS, scale); Vsego = Convert.Round(_vsego, scale); return(message); }