using BWP.B3Sale.BL; using Forks.EnterpriseServices.BusinessInterfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using TSingSoft.WebControls2; namespace BWP.Web.Pages { public class MainToSecondConvertRowManger { readonly DFEditGridColumn _unitNumInput; readonly DFEditGridColumn _mainNumberInput; readonly DFEditGridColumn _secondNumberInput; readonly DFEditGridColumn _priceInput; readonly DFEditGridColumn _willOutStoreSecondNumberInput; readonly DFEditGridColumn _willOutStoreUnitNumInput; readonly DFEditGridColumn _invoicedUnitNumInput; readonly DFEditGridColumn _invoicedMoneyInput; readonly DFEditGridColumn _moneyInput; readonly DFEditGridColumn NetPriceInput; readonly DFEditGridColumn PriceCostInput; readonly string _unitNumField; readonly string _mainNumberField; readonly string _secondNumberField; readonly string _moneyField; readonly string _rebateField; readonly string _rebateMoneyField; readonly string _willOutStoreUnitNumField; readonly string _willOutStoreSecondNumberField; readonly string _invoicedUnitNumField; readonly string _invoicedMoneyField; readonly string _discountMoneyfield; bool _hasPrice; bool _hasMoney; bool _hasRebate; bool _hasRebateMoney; bool _hasDiscountMoney; bool _hasUnitNum; public MainToSecondConvertRowManger(DFGridBase grid) : this(grid, "UnitNum", "Number", "SecondNumber", "Money", "Rebate", "RebateMoney", "WillOutStoreUnitNum", "WillOutStoreSecondNumber", "InvoicedUnitNum", "InvoicedMoney", "DiscountMoney") { } public MainToSecondConvertRowManger(DFGridBase grid, string unitNumfield, string mainfield, string secondfield, string moneyfield, string rebatefield, string rebateMoneyfield, string willOutStoreUnitNumfield, string willOutStoreSecondNumberfield, string invoicedUnitNumfield, string invoicedMoneyfield, string discountMoneyfield) { _unitNumField = unitNumfield; _mainNumberField = mainfield; _secondNumberField = secondfield; _moneyField = moneyfield; _rebateField = rebatefield; _rebateMoneyField = rebateMoneyfield; _willOutStoreUnitNumField = willOutStoreUnitNumfield; _willOutStoreSecondNumberField = willOutStoreSecondNumberfield; _discountMoneyfield = discountMoneyfield; _invoicedUnitNumField = invoicedUnitNumfield; _invoicedMoneyField = invoicedMoneyfield; _discountMoneyfield = discountMoneyfield; _hasMoney = _hasPrice = _hasRebate = _hasRebateMoney = _hasDiscountMoney = false; foreach (DFGridColumn column in grid.Columns) { if (column is DFEditGridColumn) { var c = (DFEditGridColumn)column; if (c.Name == unitNumfield) { _unitNumInput = c; _hasUnitNum = true; } else if (c.Name == mainfield) _mainNumberInput = c; else if (c.Name == secondfield) _secondNumberInput = c; else if (c.Name == "Price") { _priceInput = c; _hasPrice = true; } else if (c.Name == moneyfield) { _moneyInput = c; _hasMoney = true; } else if (c.Name == "NetPrice") NetPriceInput = c; else if (c.Name == "PriceCost") PriceCostInput = c; else if (c.Name == willOutStoreUnitNumfield) _willOutStoreUnitNumInput = c; else if (c.Name == willOutStoreSecondNumberfield) _willOutStoreSecondNumberInput = c; else if (c.Name == invoicedUnitNumfield) _invoicedUnitNumInput = c; else if (c.Name == invoicedMoneyfield) _invoicedMoneyInput = c; } else if (column is DFEditGridColumn) { var c1 = (DFEditGridColumn)column; if (c1.Name == _moneyField) { _hasMoney = true; } else if (c1.Name == "Price") { _hasPrice = true; } else if (c1.Name == _rebateField) { _hasRebate = true; } else if (c1.Name == _rebateMoneyField) { _hasRebateMoney = true; } else if (c1.Name == _discountMoneyfield) { _hasDiscountMoney = true; } else if (c1.Name == _unitNumField) { _hasUnitNum = true; } } } SetClientScript(); } string SetMainNumber { get { return string.Format("dfContainer.setValue('{0}', (dfContainer.getValue('{1}')*{2}/{3}).toFixed(6));", _mainNumberField, _secondNumberField, MainUnitRatio, SecondUnitRatio); } } string SetSecondNumber { get { return string.Format("dfContainer.setValue('{0}', (dfContainer.getValue('{1}')*{2}/{3}).toFixed(6));", _secondNumberField, _mainNumberField, SecondUnitRatio, MainUnitRatio); } } string SetMoney { get { return string.Format("dfContainer.setValue('{0}', (dfContainer.getValue('Price')*dfContainer.getValue('{1}')).toFixed(2));", _moneyField, _unitNumField); } } string SetRebateMoney { get { return string.Format("dfContainer.setValue('RebateMoney', (dfContainer.getValue('Money')*dfContainer.getValue('Rebate')/100).toFixed(2));"); } } string SetDiscountMoney { get { return string.Format("dfContainer.setValue('DiscountMoney', dfContainer.getValue('Money')-dfContainer.getValue('RebateMoney'));"); } } private const string ConvertDirection = "dfContainer.getValue('Goods_UnitConvertDirection')"; private const string MainUnitRatio = "dfContainer.getValue('Goods_MainUnitRatio')"; private const string SecondUnitRatio = "dfContainer.getValue('Goods_SecondUnitRatio')"; private const string LeftRatio = "dfContainer.getValue('LeftRatio')"; private const string RightRatio = "dfContainer.getValue('RightRatio')"; private void SetClientScript() { SetUnitNumChanged(); SetMainNumberChanged(); SetSecondNumberChanged(); SetPriceChanged(); SetWillOutStoreUnitNumChanged(); SetWillOutStoreSecondNumberChanged(); SetinvoicedUnitNumChanged(); SetinvoicedMoneyChanged(); SetMoneyChanged(); SetNetPriceChanged(); SetPriceCostChanged(); } private void SetinvoicedUnitNumChanged() { if (_invoicedUnitNumInput == null || _invoicedMoneyInput == null) return; if (_hasPrice && _hasRebate) { _invoicedUnitNumInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = "if(dfContainer.getValue('Price')!=0){dfContainer.setValue('InvoicedMoney', (dfContainer.getValue('InvoicedUnitNum')*dfContainer.getValue('Price')*dfContainer.getValue('Rebate')/100).toFixed(2));}"; }; } } private void SetMoneyChanged() { if (_moneyInput == null) return; if (_hasPrice && _hasUnitNum) { var str = @" var number = dfContainer.getValue('" + _unitNumField + @"'); if(number==''|| number=='0'){ number = 1; dfContainer.setValue('" + _unitNumField + @"','1' ) }; dfContainer.setValue('Price', (dfContainer.getValue('" + _moneyField + "')/ number).toFixed(6));"; _moneyInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = str; }; } } private void SetinvoicedMoneyChanged() { if (_invoicedUnitNumInput == null && _invoicedMoneyInput == null) return; if (_hasPrice) { _invoicedMoneyInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = string.Format("dfContainer.setValue('{0}', (dfContainer.getValue('{1}')*100/dfContainer.getValue('Rebate')/dfContainer.getValue('Price')).toFixed(2));", _invoicedUnitNumField, _invoicedMoneyField); }; } } string SetWillOutStoreSecondNumberByUnitNum { get { return string.Format("var number = dfContainer.getValue('{0}')/{1}*{2}; dfContainer.setValue('{3}', (number /{4}*{5}).toFixed(6));", _willOutStoreUnitNumField, LeftRatio, RightRatio, _willOutStoreSecondNumberField, MainUnitRatio, SecondUnitRatio); } } private void SetWillOutStoreUnitNumChanged() { if (_willOutStoreUnitNumInput == null) return; var builder = new StringBuilder(); if (_willOutStoreSecondNumberInput != null) { builder.Append(@"if({convertDirection}=='双向转换'||{convertDirection}=='由主至辅'){if({unitRatioLeft} > 0 && {unitRatioRight}>0 && {ratioRight}>0 && {ratioLeft}>0){SetWillOutStoreSecondNumberByUnitNum}}" .Replace("{convertDirection}", ConvertDirection) .Replace("{ratioLeft}", MainUnitRatio) .Replace("{ratioRight}", SecondUnitRatio) .Replace("{unitRatioLeft}", LeftRatio) .Replace("{unitRatioRight}", RightRatio) .Replace("{SetWillOutStoreSecondNumberByUnitNum}", SetWillOutStoreSecondNumberByUnitNum) ); } _willOutStoreUnitNumInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = builder.ToString(); }; } string SetWillOutStoreUnitNumBySecondNumber { get { return string.Format("var number = dfContainer.getValue('{0}')*{1}/{2};dfContainer.setValue('{3}', (number/{4}*{5}).toFixed(2));", _willOutStoreSecondNumberField, MainUnitRatio, SecondUnitRatio, _willOutStoreUnitNumField, RightRatio, LeftRatio); } } private void SetWillOutStoreSecondNumberChanged() { if (_willOutStoreSecondNumberInput == null) return; var builder = new StringBuilder(); if (_willOutStoreUnitNumInput != null) { builder.Append(@"if({convertDirection}=='双向转换'||{convertDirection}=='由辅至主'){ if({ratioRight}>0 && {ratioLeft}>0 && {unitRatioLeft} > 0 && {unitRatioRight}>0) {SetWillOutStoreUnitNumBySecondNumber}}" .Replace("{convertDirection}", ConvertDirection) .Replace("{ratioRight}", SecondUnitRatio) .Replace("{ratioLeft}", MainUnitRatio) .Replace("{unitRatioLeft}", LeftRatio) .Replace("{unitRatioRight}", RightRatio) .Replace("{SetWillOutStoreUnitNumBySecondNumber}", SetWillOutStoreUnitNumBySecondNumber)); } _willOutStoreSecondNumberInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = builder.ToString(); }; } string SetNumberByUnitNum { get { return string.Format("dfContainer.setValue('{0}', (dfContainer.getValue('{1}')/{2}*{3}).toFixed(6));", _mainNumberField, _unitNumField, LeftRatio, RightRatio); } } string SetSecondNumberByUnitNum { get { return string.Format("var number = dfContainer.getValue('{0}')/{1}*{2}; dfContainer.setValue('{3}', (number /{4}*{5}).toFixed(6));", _unitNumField, LeftRatio, RightRatio, _secondNumberField, MainUnitRatio, SecondUnitRatio); } } private void SetUnitNumChanged() { if (_unitNumInput == null) return; var builder = new StringBuilder(); if (_mainNumberInput != null) { builder.Append(@"if({unitRatioLeft} > 0 && {unitRatioRight}>0){ {SetNumberByUnitNum}}".Replace("{unitRatioLeft}", LeftRatio) .Replace("{unitRatioRight}", RightRatio) .Replace("{SetNumberByUnitNum}", SetNumberByUnitNum) ); } if (_secondNumberInput != null) { builder.Append(@"if({convertDirection}=='双向转换'||{convertDirection}=='由主至辅'){if({unitRatioLeft} > 0 && {unitRatioRight}>0 && {ratioRight}>0 && {ratioLeft}>0){{SetSecondNumberByUnitNum}}}" .Replace("{convertDirection}", ConvertDirection) .Replace("{ratioLeft}", MainUnitRatio) .Replace("{ratioRight}", SecondUnitRatio) .Replace("{unitRatioLeft}", LeftRatio) .Replace("{unitRatioRight}", RightRatio) .Replace("{SetSecondNumberByUnitNum}", SetSecondNumberByUnitNum) ); } if (_hasPrice && _hasMoney) { builder.Append(SetMoney); if (_hasRebate && _hasRebateMoney) { builder.Append(SetRebateMoney); } if (_hasRebate && _hasDiscountMoney) { builder.Append(SetDiscountMoney); } } _unitNumInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = builder.ToString(); }; } private void SetSecondNumberChanged() { if (_secondNumberInput == null) return; var builder = new StringBuilder(); if (_mainNumberInput != null) { builder.Append(@"if({convertDirection}=='双向转换'||{convertDirection}=='由辅至主'){ if({ratioRight}>0 && {ratioLeft}>0) {setMainNumber}}" .Replace("{convertDirection}", ConvertDirection) .Replace("{ratioRight}", SecondUnitRatio) .Replace("{ratioLeft}", MainUnitRatio) .Replace("{setMainNumber}", SetMainNumber)); } if (_unitNumInput != null) { builder.Append(@"if({convertDirection}=='双向转换'||{convertDirection}=='由辅至主'){ if({ratioRight}>0 && {ratioLeft}>0 && {unitRatioLeft} > 0 && {unitRatioRight}>0) {{setUnitNum}}}" .Replace("{convertDirection}", ConvertDirection) .Replace("{ratioRight}", SecondUnitRatio) .Replace("{ratioLeft}", MainUnitRatio) .Replace("{unitRatioLeft}", LeftRatio) .Replace("{unitRatioRight}", RightRatio) .Replace("{setUnitNum}", SetUnitNumBySecondNumber)); } if (_hasPrice && _hasMoney) { builder.Append(SetMoney); if (_hasRebate && _hasRebateMoney) { builder.Append(SetRebateMoney); } if (_hasRebate && _hasDiscountMoney) { builder.Append(SetDiscountMoney); } } _secondNumberInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = builder.ToString(); }; } string SetUnitNumBySecondNumber { get { return string.Format("var number = dfContainer.getValue('{0}')*{1}/{2};dfContainer.setValue('{3}', (number/{4}*{5}).toFixed(2));", _secondNumberField, MainUnitRatio, SecondUnitRatio, _unitNumField, RightRatio, LeftRatio); } } string SetUnitNumByNumber { get { return string.Format("dfContainer.setValue('{0}', (dfContainer.getValue('{1}')/{2}*{3}).toFixed(2));", _unitNumField, _mainNumberField, RightRatio, LeftRatio); } } private void SetMainNumberChanged() { if (_mainNumberInput == null) return; var builder = new StringBuilder(); if (_secondNumberInput != null) { builder.Append(@"if({convertDirection}=='双向转换'||{convertDirection}=='由主至辅'){ if({ratioLeft}>0 && {ratioRight}>0){setSecondNumber}}" .Replace("{convertDirection}", ConvertDirection) .Replace("{ratioLeft}", MainUnitRatio) .Replace("{ratioRight}", SecondUnitRatio) .Replace("{setSecondNumber}", SetSecondNumber) ); } if (_unitNumInput != null) { builder.Append(@"if({convertDirection}=='双向转换'||{convertDirection}=='由主至辅'){if({unitRatioLeft} > 0 && {unitRatioRight}>0){setUnitNum}}" .Replace("{convertDirection}", ConvertDirection) .Replace("{unitRatioLeft}", MainUnitRatio) .Replace("{unitRatioRight}", SecondUnitRatio) .Replace("{setUnitNum}", SetUnitNumByNumber) ); } if (_hasPrice && _hasMoney) { builder.Append(SetMoney); if (_hasRebate && _hasRebateMoney) { builder.Append(SetRebateMoney); } if (_hasRebate && _hasDiscountMoney) { builder.Append(SetDiscountMoney); } } _mainNumberInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = builder.ToString(); }; } ISaleForecastBL bl = BIFactory.Create(); private void SetPriceChanged() { if (_priceInput == null) return; var builder = new StringBuilder(); if (_hasMoney && _unitNumInput != null) { builder.Append(SetMoney); if (_hasRebate && _hasRebateMoney) { builder.Append(SetRebateMoney); } if (_hasRebate && _hasDiscountMoney) { builder.Append(SetDiscountMoney); } } string SetPriceCost = "dfContainer.setValue('PriceCost',(dfContainer.getValue('Price')*1.00-dfContainer.getValue('NetPrice')*1.00));"; if (NetPriceInput != null && PriceCostInput != null && !bl.LockCostPrice) builder.Append(SetPriceCost); _priceInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = builder.ToString(); }; } private void SetNetPriceChanged() { if (_priceInput == null) return; if (PriceCostInput == null) return; string SetPriceByNetPrice = "dfContainer.setValue('Price',(dfContainer.getValue('NetPrice')*1.00+dfContainer.getValue('PriceCost')*1.00));"; if (NetPriceInput != null) { NetPriceInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = SetPriceByNetPrice; }; } } private void SetPriceCostChanged() { if (_priceInput == null) return; if (NetPriceInput == null) return; string SetPriceByNetPrice = "dfContainer.setValue('Price',(dfContainer.getValue('NetPrice')*1.00+dfContainer.getValue('PriceCost')*1.00));"; if (PriceCostInput != null) { PriceCostInput.InitEditControl += delegate (object sender, InitEditControlEventArgs e) { e.Control.Attributes["onchange"] = SetPriceByNetPrice; }; } } } }