diff --git a/VBA/build.frm b/VBA/build.frm index c3de5f4..3affa42 100644 --- a/VBA/build.frm +++ b/VBA/build.frm @@ -28,12 +28,12 @@ Private Sub cmdOK_Click() End Sub Public Sub Initialize(part As String, billTo As String, shipTo As String) - cbPart.list = shSupportingData.ListObjects("ITEM").DataBodyRange.value - cbPart.value = part - cbBill.list = shSupportingData.ListObjects("CUSTOMER").DataBodyRange.value - cbBill.value = billTo - cbShip.list = shSupportingData.ListObjects("CUSTOMER").DataBodyRange.value - cbShip.value = shipTo + cbPart.list = shSupportingData.ListObjects("ITEM").DataBodyRange.Value + cbPart.Value = part + cbBill.list = shSupportingData.ListObjects("CUSTOMER").DataBodyRange.Value + cbBill.Value = billTo + cbShip.list = shSupportingData.ListObjects("CUSTOMER").DataBodyRange.Value + cbShip.Value = shipTo useval = False End Sub diff --git a/VBA/build.frx b/VBA/build.frx index 3276752..56e83ff 100644 Binary files a/VBA/build.frx and b/VBA/build.frx differ diff --git a/VBA/changes.frm b/VBA/changes.frm index 7e26192..c450239 100644 --- a/VBA/changes.frm +++ b/VBA/changes.frm @@ -28,7 +28,7 @@ Private Sub lbHist_Change() For i = 0 To Me.lbHist.ListCount - 1 If Me.lbHist.Selected(i) Then - Me.tbPrint.value = X(i, 7) + Me.tbPrint.Value = X(i, 7) Exit Sub End If Next i @@ -43,20 +43,6 @@ Private Sub UserForm_Activate() Exit Sub End If Me.lbHist.list = X - - 'lbHEAD.ColumnCount = lbHist.ColumnCount - 'lbHEAD.ColumnWidths = lbHist.ColumnWidths - - ' add header elements -' lbHEAD.clear -' lbHEAD.AddItem -' lbHEAD.list(0, 0) = "Modifier" -' lbHEAD.list(0, 1) = "Owner" -' lbHEAD.list(0, 2) = "When" -' lbHEAD.list(0, 3) = "Tag" -' lbHEAD.list(0, 4) = "Comment" -' lbHEAD.list(0, 5) = "Sales" -' lbHEAD.list(0, 6) = "id" Call Utils.frmListBoxHeader(Me.lbHEAD, Me.lbHist, "Modifier", "Owner", "When", "Tag", "Comment", "Sales", "id") End Sub @@ -74,7 +60,7 @@ Sub delete_selected() If Me.lbHist.Selected(i) Then Call handler.undo_changes(X(i, 6), fail) If fail Then - MsgBox ("undo did not work") + MsgBox ("Undo did not work.") Exit Sub End If End If diff --git a/VBA/changes.frx b/VBA/changes.frx index 9260c15..187d7f5 100644 Binary files a/VBA/changes.frx and b/VBA/changes.frx differ diff --git a/VBA/fpvt.frm b/VBA/fpvt.frm index e27572d..caaab9a 100644 --- a/VBA/fpvt.frm +++ b/VBA/fpvt.frm @@ -13,24 +13,13 @@ Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False -Public mod_adjust As Boolean +Option Explicit + Private month() As Variant -Private mload() As Variant Private adjust As Object -Private nomonth As Boolean -Private mline As Integer -Private clear_lb As Boolean Private load_tb As Boolean Private set_Price As Boolean Private sp As Object -Private basket() As Variant -Private cust() As Variant -Private vSwap() As Variant -Private swapline As Integer -Private set_swapalt As Boolean -Private return_swap As Boolean -Private jswap As Object -Private cswap As Object Private bVol As Double Private bVal As Double @@ -45,21 +34,6 @@ Private fVol As Double Private fVal As Double Private fPrc As Double -Private bVolm As Double -Private bValm As Double -Private bPrcm As Double -Private pVolm As Double -Private pValm As Double -Private pPrcm As Double -Private aVolm As Double -Private aValm As Double -Private aPrcm As Double -Private fVolm As Double -Private fValm As Double -Private fPrcm As Double - -Option Explicit - '===================================================================================================== ' Developers' backdoor to enter or exit debug mode: Ctrl-RightClick on the "Selected Scenario" ' label at the top of the form. Debug Mode shows the Pending Changes tab in the form, as well @@ -74,46 +48,26 @@ End Sub Private Sub butAdjust_Click() Dim fail As Boolean - Dim doc As String - - If tbAPI.text = "" Then - MsgBox ("No adjustments provided") + Dim msg As String + + If tbAPI.text = "" Then msg = "No adjustments provided." + If cbTAG.text = "" Then msg = "No tag was selected." + If tbAPI.text = "" Then msg = "No adjustements are ready." + + If msg <> "" Then + MsgBox msg, vbOKOnly Or vbExclamation Exit Sub End If - If cbTAG.text = "" Then - MsgBox ("no tag was selected") - Exit Sub - End If - - Select Case fpvt.mp.SelectedItem.Name - Case "pageSWAP" - doc = tbAPI.text - If doc = "" Then - MsgBox ("no part swap setup") - Exit Sub - End If - Case "pAnn" - doc = tbAPI.text - If doc = "" Then - MsgBox ("no adjustements are ready") - Exit Sub - End If - Case Else - doc = tbAPI.text - 'MsgBox ("not on an adjustable tab") - 'Exit Sub - End Select - - Call handler.request_adjust(doc, fail) + Call handler.request_adjust(tbAPI.text, fail) If fail Then - MsgBox ("adjustment was not made due to error") + MsgBox "Adjustment was not made due to error.", vbOKOnly Or vbExclamation Exit Sub End If Me.tbCOM = "" Me.cbTAG.text = "" - + Me.Hide Set adjust = Nothing @@ -123,28 +77,11 @@ Private Sub butCancel_Click() Me.Hide End Sub -Private Sub butMAdjust_Click() - Dim i As Integer - Dim fail As Boolean - - For i = 1 To 12 - If month(i, 10) <> "" Then - Call handler.request_adjust(CStr(month(i, 10)), fail) - End If - Next i - - Me.Hide -End Sub - -Private Sub butMCancel_Click() - Me.Hide -End Sub - Private Sub cbGoSheet_Click() - shMonthView.Range("MonthComment").value = "" - shMonthView.Range("MonthTag").value = "" - shMonthView.Range("QtyPctChange").value = 0 - shMonthView.Range("PricePctChange").value = 0 + shMonthView.Range("MonthComment").Value = "" + shMonthView.Range("MonthTag").Value = "" + shMonthView.Range("QtyPctChange").Value = 0 + shMonthView.Range("PricePctChange").Value = 0 shMonthView.Visible = xlSheetVisible shMonthView.Select Me.Hide @@ -154,137 +91,15 @@ Private Sub cbTAG_Change() Dim j As Object If tbAPI.text = "" Then tbAPI.text = "{}" Set j = JsonConverter.ParseJson(tbAPI.text) - j("tag") = cbTAG.value + j("tag") = cbTAG.Value tbAPI.text = JsonConverter.ConvertToJson(j) End Sub -Private Sub lbMonth_Change() - If clear_lb Or load_tb Then Exit Sub - - Dim i As Long - For i = 0 To 13 - If lbMonth.Selected(i) Then - mline = i - If i <> 0 And i <> 13 Then - Me.load_var - Me.load_mbox - Else - load_tb = True - tbMBaseVal.value = "" - tbMBaseVol.value = "" - tbMBasePrice.value = "" - tbmPAVal.value = "" - tbMPAVol.value = "" - tbMPAPrice.value = "" - tbMFVal.value = "" - tbMFVol.value = "" - tbMFPrice.value = "" - tbMAVal.value = "" - tbMAVol.value = "" - tbMAPrice.value = "" - load_tb = False - End If - Exit For - End If - Next i -End Sub - -Private Sub cbPLIST_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) - If KeyCode <> 13 Then Exit Sub - Dim i As Long - If set_swapalt Then Exit Sub - Dim vtable() As Variant - Dim ptable As String - - Dim rx As Object - Set rx = CreateObject("vbscript.regexp") - rx.Global = True - rx.Pattern = " - .*" - - For i = 0 To Me.lbSWAP.ListCount - 1 - If Me.lbSWAP.Selected(i) Then - vSwap(swapline, 2) = rx.Replace(cbPLIST.value, "") - return_swap = True - lbSWAP.list = vSwap - return_swap = False - End If - Next i - - vtable = Utils.ARRAYp_TransposeVar(vSwap) - vtable = Utils.ARRAYp_zerobased_addheader(vtable, "original", "sales", "replace", "fit") - vtable = Utils.ARRAYp_TransposeVar(vtable) - ptable = Utils.json_from_table_zb(vtable, "rows", True, False) - Set jswap("swap") = JsonConverter.ParseJson(ptable) - - jswap("scenario")("version") = handler.plan - jswap("scenario")("iter") = handler.basis - jswap("stamp") = Format(Date + time, "yyyy-mm-dd hh:mm:ss") - jswap("user") = Application.UserName - jswap("source") = "adj" - jswap("message") = tbCOM.text - jswap("tag") = cbTAG.text - jswap("type") = "swap" - - tbAPI.text = JsonConverter.ConvertToJson(jswap) -End Sub - -Private Sub dbGETSWAP_Click() - Dim doc As String - Dim j As Object - Dim fail As Boolean - Dim l() As Variant - Dim ptable As String - Dim vtable() As Variant - - Set j = JsonConverter.ParseJson("{""scenario"":" & handler.scenario & "}") - 'Set j = JsonConverter.ParseJson(doc) - j("new_mold") = pickSWAP.text - doc = JsonConverter.ConvertToJson(j) - vSwap = handler.get_swap_fit(doc, fail) - lbSWAP.list = vSwap - 'Call x.frmListBoxHeader(lbSWAPH, lbSWAP, "Original", "Sales", "Replacement", "Fit") - - cbPLIST.list = shSupportingData.ListObjects("ITEM").DataBodyRange.value - - '---------build change------------- - Set jswap = j - vtable = Utils.ARRAYp_TransposeVar(vSwap) - vtable = Utils.ARRAYp_zerobased_addheader(vtable, "original", "sales", "replace", "fit") - vtable = Utils.ARRAYp_TransposeVar(vtable) - ptable = Utils.json_from_table_zb(vtable, "rows", True, False) - Set jswap("swap") = JsonConverter.ParseJson(ptable) - - jswap("scenario")("version") = handler.plan - jswap("scenario")("iter") = handler.basis - jswap("stamp") = Format(Date + time, "yyyy-mm-dd hh:mm:ss") - jswap("user") = Application.UserName - jswap("source") = "adj" - jswap("message") = tbCOM.text - jswap("tag") = cbTAG.text - jswap("type") = "swap" - - tbAPI.text = JsonConverter.ConvertToJson(jswap) -End Sub - -Private Sub lbSWAP_Change() - Dim i As Long - If return_swap Then Exit Sub - - For i = 0 To Me.lbSWAP.ListCount - 1 - If Me.lbSWAP.Selected(i) Then - set_swapalt = True - cbPLIST.value = vSwap(i, 2) - set_swapalt = False - swapline = i - End If - Next i -End Sub - Private Sub opEditPrice_Click() opPlugVol.Visible = False opPlugPrice.Visible = False - opPlugPrice.value = True - opPlugVol.value = False + opPlugPrice.Value = True + opPlugVol.Value = False tbFcPrice.Enabled = True tbFcPrice.BackColor = &H80000018 @@ -320,36 +135,6 @@ Private Sub opEditSales_Click() tbpd.Enabled = True End Sub -Private Sub opEditPriceM_Click() - opmvol.Enabled = False - opmprice.Enabled = False - opmvol.Visible = False - opmprice.Visible = False - opmprice.value = True - opmvol.value = True - - tbMFPrice.Enabled = True - tbMFPrice.BackColor = &H80000018 - tbMFVal.Enabled = False - tbMFVal.BackColor = &H80000005 - tbMFVol.Enabled = True - tbMFVol.BackColor = &H80000018 -End Sub - -Private Sub opEditSalesM_Click() - opmvol.Enabled = True - opmprice.Enabled = True - opmvol.Visible = True - opmprice.Visible = True - - tbMFPrice.Enabled = False - tbMFPrice.BackColor = &H80000005 - tbMFVal.Enabled = True - tbMFVal.BackColor = &H80000018 - tbMFVol.Enabled = False - tbMFVol.BackColor = &H80000005 -End Sub - Private Sub opPlugPrice_Click() calc_val End Sub @@ -359,15 +144,15 @@ Private Sub opPlugVol_Click() End Sub Private Sub sbpd_Change() - tbpd.value = sbpd.value + tbpd.Value = sbpd.Value End Sub Private Sub sbpp_Change() - tbpp.value = sbpp.value + tbpp.Value = sbpp.Value End Sub Private Sub sbpv_Change() - tbpv.value = sbpv.value + tbpv.Value = sbpv.Value End Sub Private Sub tbCOM_Change() @@ -394,75 +179,41 @@ Private Sub tbFcVol_Change() If opEditPrice Then calc_price End Sub -'--------------------------------monthly buttons-------------------------------------- - -Private Sub opmPrice_Click() - calc_mval -End Sub - -Private Sub opmVol_Click() - calc_mval -End Sub - -Private Sub tbmfPrice_Change() - If mline = 0 Then Exit Sub - If clear_lb Or load_tb Then Exit Sub - set_Price = True - If opEditPriceM Then calc_mprice - set_Price = False -End Sub - -Private Sub tbMFVal_Change() - If mline = 0 Then Exit Sub - If clear_lb Or load_tb Then Exit Sub - If opEditSalesM Then calc_mval -End Sub - -Private Sub tbmfVol_Change() - If mline = 0 Then Exit Sub - If clear_lb Or load_tb Then Exit Sub - If opEditPriceM Then calc_mprice -End Sub - Private Sub tbpd_Change() If load_tb Then Exit Sub - If Not VBA.IsNumeric(tbpd.value) Then + If Not VBA.IsNumeric(tbpd.Value) Then tbpd = "0" End If - tbFcVal = (bVal + pVal) * (1 + tbpd.value / 100) + tbFcVal = (bVal + pVal) * (1 + tbpd.Value / 100) End Sub Private Sub tbpp_Change() If load_tb Then Exit Sub - If Not VBA.IsNumeric(tbpd.value) Then + If Not VBA.IsNumeric(tbpd.Value) Then tbpd = "0" End If - tbFcPrice = (bPrc + pPrc) * (1 + tbpp.value / 100) + tbFcPrice = (bPrc + pPrc) * (1 + tbpp.Value / 100) Me.load_mbox_ann End Sub Private Sub tbpv_Change() If load_tb Then Exit Sub - If Not VBA.IsNumeric(tbpv.value) Then + If Not VBA.IsNumeric(tbpv.Value) Then tbpd = "0" End If - tbFcVol = (bVol + pVol) * (1 + tbpv.value / 100) + tbFcVol = (bVol + pVol) * (1 + tbpv.Value / 100) End Sub Private Sub UserForm_Activate() - Dim i As Long - Dim j As Long - Dim k As Long - Dim ok As Boolean - - Me.Caption = "Forecast Adjust " & shConfig.Range("version").value & " Loading..." + Me.Caption = "Forecast Adjust " & shConfig.Range("version").Value & " Loading..." Me.mp.Visible = False Me.fraExit.Visible = False + Dim ok As Boolean Set sp = handler.scenario_package("{""scenario"":" & scenario & "}", ok) Call Utils.frmListBoxHeader(Me.lbSHDR, Me.lbSDET, "Field", "Selection") - Me.Caption = "Forecast Adjust " & shConfig.Range("version").value + Me.Caption = "Forecast Adjust " & shConfig.Range("version").Value If Not ok Then fpvt.Hide @@ -471,7 +222,6 @@ Private Sub UserForm_Activate() End If '---show existing adjustment if there is one---- - fpvt.mod_adjust = False pVol = 0 pVal = 0 pPrc = 0 @@ -484,14 +234,16 @@ Private Sub UserForm_Activate() fVal = 0 fVol = 0 fPrc = 0 - Me.tbAPI.value = "" + Me.tbAPI.Value = "" If IsNull(sp("package")("totals")) Then + MsgBox "An unexpected error has occurred when retrieving the scenario.", vbOKOnly Or vbExclamation, "Error" fpvt.Hide Application.StatusBar = False Exit Sub End If + Dim i As Long For i = 1 To sp("package")("totals").Count Select Case sp("package")("totals")(i)("order_season") Case 2024 @@ -534,7 +286,6 @@ Private Sub UserForm_Activate() '---------------------------------------populate monthly------------------------------------------------------- - k = 0 '--parse json into variant array for loading-- ReDim month(sp("package")("mpvt").Count + 1, 10) @@ -554,82 +305,29 @@ Private Sub UserForm_Activate() month(i, 9) = "scale" End If Next i - - month(0, 0) = "month" - month(13, 0) = "total" - month(0, 1) = "2023 qty" - month(0, 2) = "2024 base qty" - month(0, 3) = "2024 adj qty" - month(0, 4) = "2024 qty" - month(0, 5) = "2023 val" - month(0, 6) = "2024 base val" - month(0, 7) = "2024 adj val" - month(0, 8) = "2024 val" - + Me.crunch_array ReDim basket(sp("package")("basket").Count, 3) - -' basket(0, 0) = "order_season" -' basket(0, 1) = "order_month" -' basket(0, 2) = "version" -' basket(0, 3) = "iter" -' basket(0, 4) = "part_descr" -' basket(0, 5) = "bill_cust_descr" -' basket(0, 6) = "ship_cust_descr" -' basket(0, 7) = "units" -' basket(0, 8) = "value_usd" basket(0, 0) = "part_descr" basket(0, 1) = "bill_cust_descr" basket(0, 2) = "ship_cust_descr" basket(0, 3) = "mix" For i = 1 To UBound(basket, 1) - 'basket(i, 0) = sp("package")("base")(i)("order_season") - 'basket(i, 1) = sp("package")("base")(i)("order_month") - 'basket(i, 2) = sp("package")("base")(i)("version") - 'basket(i, 3) = sp("package")("base")(i)("iter") - 'basket(i, 4) = sp("package")("base")(i)("part_descr") - 'basket(i, 5) = sp("package")("base")(i)("bill_cust_descr") - 'basket(i, 6) = sp("package")("base")(i)("ship_cust_descr") - 'basket(i, 7) = sp("package")("base")(i)("units") - 'basket(i, 8) = sp("package")("base")(i)("value_usd") basket(i, 0) = sp("package")("basket")(i)("part_descr") basket(i, 1) = sp("package")("basket")(i)("bill_cust_descr") basket(i, 2) = sp("package")("basket")(i)("ship_cust_descr") basket(i, 3) = sp("package")("basket")(i)("mix") Next i - '---------------get list of customers---------------------------- - - ReDim cust(sp("package")("customers").Count - 1, 3) - - For i = 0 To UBound(cust, 1) - cust(i, 0) = sp("package")("customers")(i + 1)("bill_cust_descr") - cust(i, 1) = "" - cust(i, 2) = sp("package")("customers")(i + 1)("ship_cust_descr") - cust(i, 3) = "" - Next i - - Call Utils.frmListBoxHeader(lbCUSTH, lbCUST, "Bill-To", "Replace", "Ship-To", "Replace") - '-------------load tags------------------------------- - cbTAG.list = shConfig.ListObjects("TAGS").DataBodyRange.value + cbTAG.list = shConfig.ListObjects("TAGS").DataBodyRange.Value '----------reset spinner buttons---------------------- - sbpv.value = 0 - sbpp.value = 0 - sbpd.value = 0 - - '--------reset swap tab------------------------------- - lbSWAP.clear - pickSWAP.value = "" - pickSWAP.text = Mid(sp("package")("basket")(1)("part_descr"), 1, 8) - pickSWAP.list = shSupportingData.ListObjects("MOLD").DataBodyRange.value - cbBT.list = shSupportingData.ListObjects("CUSTOMER").DataBodyRange.value - cbST.list = shSupportingData.ListObjects("CUSTOMER").DataBodyRange.value - lbCUST.list = cust - Call Utils.frmListBoxHeader(Me.lbSWAPH, Me.lbSWAP, "Original", "Sales", "Replacement", "Fit") + sbpv.Value = 0 + sbpp.Value = 0 + sbpd.Value = 0 Call handler.month_tosheet(month, basket) Application.StatusBar = False @@ -670,75 +368,6 @@ Sub crunch_array() mload(i, 3) = Format(month(i, 5), "#,###") mload(i, 4) = Format(month(i, 8), "#,###") Next i - - 'mline = 0 - clear_lb = True - lbMonth.clear - lbMonth.list = mload - clear_lb = False -End Sub - -Private Sub lbCUST_Change() - Dim i As Long - Dim X() As Variant - - X = lbCUST.list - For i = 0 To UBound(X, 1) - If lbCUST.Selected(i) Then Exit For - Next i - cbBT.text = X(i, 0) - cbST.text = X(i, 2) -End Sub - -Private Sub cbBT_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) - If KeyCode <> 13 Then Exit Sub - - Dim i As Long - Dim X() As Variant - - X = lbCUST.list - For i = 0 To UBound(X, 1) - If lbCUST.Selected(i) Then X(i, 1) = Me.rev_cust(cbBT.text) - Next i - lbCUST.list = X - Call Me.build_cust_swap -End Sub - -Private Sub cbST_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) - If KeyCode <> 13 Then Exit Sub - - Dim i As Long - Dim X() As Variant - - X = lbCUST.list - For i = 0 To UBound(X, 1) - If lbCUST.Selected(i) Then X(i, 3) = Me.rev_cust(cbST.text) - Next i - lbCUST.list = X - Call Me.build_cust_swap -End Sub - -Sub build_cust_swap() - - Dim vtable() As Variant - Dim ptable As String - vtable = lbCUST.list - vtable = Utils.ARRAYp_TransposeVar(vtable) - vtable = Utils.ARRAYp_zerobased_addheader(vtable, "bill", "bill_r", "ship", "ship_r") - vtable = Utils.ARRAYp_TransposeVar(vtable) - ptable = Utils.json_from_table_zb(vtable, "rows", True, False) - Set cswap = JsonConverter.ParseJson("{""scenario"":" & handler.scenario & "}") - cswap("scenario")("version") = handler.plan - cswap("scenario")("iter") = handler.basis - cswap("stamp") = Format(Date + time, "yyyy-mm-dd hh:mm:ss") - cswap("user") = Application.UserName - cswap("source") = "adj" - cswap("message") = tbCOM.text - cswap("tag") = cbTAG.text - cswap("type") = "cust_swap" - Set cswap("swap") = JsonConverter.ParseJson(ptable) - - tbAPI.text = JsonConverter.ConvertToJson(cswap) End Sub Public Function rev_cust(cust As String) As String @@ -755,61 +384,6 @@ Public Function rev_cust(cust As String) As String End Function -Sub load_var() - - 'base - bVolm = co_num(month(mline, 2), 0) - bValm = co_num(month(mline, 6), 0) - - 'prior adjust - pVolm = co_num(month(mline, 3), 0) - pValm = co_num(month(mline, 7), 0) - - 'current forecast - fVolm = co_num(month(mline, 4), 0) - fValm = co_num(month(mline, 8), 0) - - 'adjustment - aVolm = fVolm - (bVolm + pVolm) - aValm = fValm - (bValm + pValm) - - If month(mline, 9) = "addmonth" Then - nomonth = True - bPrcm = month(13, 6) / month(13, 2) - fPrcm = month(13, 8) / month(13, 4) - - Else - 'prices - If bVolm <> 0 Then bPrcm = bValm / bVolm - If (bVolm + pVolm) <> 0 Then pPrcm = (pValm + bValm) / (bVolm + pVolm) - bPrcm - If fVolm <> 0 Then fPrcm = fValm / fVolm - aPrcm = fPrcm - (bPrcm + pPrcm) - End If -End Sub - -Sub load_mbox() - - load_tb = True - - tbMBaseVol = Format(bVolm, "#,###") - tbMBaseVal = Format(bValm, "#,###") - tbMBasePrice = Format(bPrcm, "0.00000") - - tbMPAVol = Format(pVolm, "#,###") - tbmPAVal = Format(pValm, "#,###") - tbMPAPrice = Format(pPrcm, "0.00000") - - tbMFVol = Format(fVolm, "#,###") - tbMFVal = Format(fValm, "#,###") - If Not set_Price Then tbMFPrice = Format(fPrcm, "0.#####") - - tbMAVol = Format(aVolm, "#,###") - tbMAVal = Format(aValm, "#,###") - tbMAPrice = Format(aPrcm, "0.00000") - - load_tb = False -End Sub - Sub load_mbox_ann() load_tb = True @@ -833,23 +407,6 @@ Sub load_mbox_ann() load_tb = False End Sub -Sub load_array() - - 'base - month(mline, 2) = bVolm - month(mline, 6) = bValm - - 'prior adjust - month(mline, 3) = pVolm - month(mline, 7) = pValm - - 'current forecast - month(mline, 4) = fVolm - month(mline, 8) = fValm - - Me.crunch_array -End Sub - Function co_num(ByRef one As Variant, ByRef two As Variant) As Variant If Not IsNumeric(one) Or IsNull(one) Then @@ -864,9 +421,9 @@ Sub calc_val() Dim pchange As Double - If IsNumeric(tbFcVal.value) Then + If IsNumeric(tbFcVal.Value) Then 'get textbox value - fVal = tbFcVal.value + fVal = tbFcVal.Value 'do calculations aVal = fVal - bVal - pVal @@ -875,7 +432,7 @@ Sub calc_val() If (Round(pVal, 2) + Round(bVal, 2)) = 0 Then pchange = 0 If co_num(pVal, bVal) = 0 Then - MsgBox ("zero times any number is zero, cannot scale to get to the target") + MsgBox "Zero times any number is zero. Cannot scale to get to the target." Else fVol = fVal / (co_num(bVal, pVal) / co_num(bVol, pVol)) End If @@ -932,15 +489,8 @@ Sub calc_val() End Sub Sub calc_price() - - 'If IsNumeric(tbFcPrice.value) And tbFcPrice.value <> 0 And IsNumeric(tbFcVol.value) And tbFcVol.value <> 0 Then - 'If IsNumeric(tbFcPrice.value) And IsNumeric(tbFcVol.value) And tbFcVol.value <> 0 Then - - 'If IsNumeric(tbFcPrice.value) And IsNumeric(tbFcVol.value) Then - 'capture currently changed item - - fVol = co_num(tbFcVol.value, 0) - fPrc = co_num(tbFcPrice.value, 0) + fVol = co_num(tbFcVol.Value, 0) + fPrc = co_num(tbFcPrice.Value, 0) 'calc fVal = fPrc * fVol aVal = fVal - bVal - pVal @@ -989,163 +539,6 @@ Sub calc_price() tbAPI = JsonConverter.ConvertToJson(adjust) End Sub -Sub calc_mval() - - Dim pchange As Double - Dim j As Object - - If IsNumeric(tbMFVal.value) Then - 'get textbox value - fValm = tbMFVal.value - 'do calculations - aValm = fValm - bValm - pValm - - '---------if volume adjustment method is selected, scale the volume up---------------------------------- - If nomonth Then - fVolm = fValm / bPrcm - fPrcm = bPrcm - Else - If opmvol Then - pchange = fValm / (pValm + bValm) - fVolm = (pVolm + bVolm) * pchange - Else - fVolm = pVolm + bVolm - End If - End If - If fVolm = 0 Then - fPrcm = 0 - Else - fPrcm = fValm / fVolm - End If - aVolm = fVolm - (bVolm + pVolm) - aPrcm = fPrcm - (bPrcm + pPrcm) - Else - aVolm = fVolm - bVolm - pVolm - aPrcm = 0 - End If - tbMFVal = Format(tbMFVal, "#,###") - - 'build json - - Set j = JsonConverter.ParseJson("{""scenario"":" & scenario & "}") - j("scenario")("version") = handler.plan - j("scenario")("iter") = handler.basis - j("stamp") = Format(Date + time, "yyyy-mm-dd hh:mm:ss") - j("user") = Application.UserName - j("source") = "adj" - If opEditSalesM Then - If opmvol Then - If nomonth Then - j("type") = "addmonth_v" - j("month") = month(mline, 0) - Else - j("type") = "scale_v" - j("scenario")("order_month") = month(mline, 0) - End If - j("amount") = aValm - Else - If nomonth Then - j("type") = "addmonth_p" - j("month") = month(mline, 0) - Else - j("type") = "scale_p" - j("scenario")("order_month") = month(mline, 0) - End If - j("amount") = aValm - End If - Else - If nomonth Then - j("type") = "addmonth_vp" - j("month") = month(mline, 0) - Else - j("type") = "scale_vp" - j("scenario")("order_month") = month(mline, 0) - End If - j("qty") = aVolm - j("amount") = aValm - End If - - month(mline, 10) = JsonConverter.ConvertToJson(j) - tbAPI = JsonConverter.ConvertToJson(j) - - Me.load_mbox - Me.load_array -End Sub - -Sub calc_mprice() - - Dim j As Object - - If IsNumeric(tbMFPrice.value) And tbMFPrice.value <> 0 And IsNumeric(tbMFVol.value) And tbMFVol.value <> 0 Then - 'capture currently changed item - fVolm = tbMFVol.value - fPrcm = tbMFPrice.value - 'calc - fValm = fPrcm * fVolm - aValm = fValm - bValm - pValm - aVolm = fVolm - (bVolm + pVolm) - If nomonth Then - aPrcm = fValm / fVolm - bPrcm - Else - aPrcm = fValm / fVolm - ((bValm + pValm) / (bVolm + pVolm)) - End If - Else - fValm = 0 - aValm = fValm - bValm - pValm - End If - - 'build json - Set j = JsonConverter.ParseJson("{""scenario"":" & scenario & "}") - j("scenario")("version") = handler.plan - j("scenario")("iter") = handler.basis - j("stamp") = Format(Date + time, "yyyy-mm-dd hh:mm:ss") - j("user") = Application.UserName - j("source") = "adj" - If opEditSalesM Then - If opmvol Then - If nomonth Then - j("type") = "addmonth_v" - j("month") = month(mline, 0) - Else - j("type") = "scale_v" - j("scenario")("order_month") = month(mline, 0) - End If - j("amount") = aValm - Else - If nomonth Then - 'this scenario should be prevented - j("type") = "addmonth_v" - j("month") = month(mline, 0) - Else - j("type") = "scale_p" - j("scenario")("order_month") = month(mline, 0) - End If - j("amount") = aValm - End If - Else - If nomonth Then - j("type") = "addmonth_vp" - j("month") = month(mline, 0) - Else - If aVolm = 0 Then - j("type") = "scale_p" - Else - j("type") = "scale_vp" - End If - j("scenario")("order_month") = month(mline, 0) - End If - j("qty") = aVolm - j("amount") = aValm - End If - - month(mline, 10) = JsonConverter.ConvertToJson(j) - tbAPI = JsonConverter.ConvertToJson(j) - - If clear_lb Then MsgBox ("clear") - Me.load_mbox - Me.load_array -End Sub - Function iter_def(ByVal iter As String) As String Dim i As Integer @@ -1169,3 +562,4 @@ Function iter_def(ByVal iter As String) As String End Function + diff --git a/VBA/fpvt.frx b/VBA/fpvt.frx index 4b8bc34..15ef92f 100644 Binary files a/VBA/fpvt.frx and b/VBA/fpvt.frx differ diff --git a/VBA/handler.bas b/VBA/handler.bas index 017ef44..32d4a7e 100644 --- a/VBA/handler.bas +++ b/VBA/handler.bas @@ -217,7 +217,7 @@ Function request_adjust(doc As String, ByRef fail As Boolean) As Object 'json("stamp") = Format(Now, "yyyy-mm-dd hh:mm:ss") 'doc = JsonConverter.ConvertToJson(doc) - server = shConfig.Range("server").value + server = shConfig.Range("server").Value With req .Option(WinHttpRequestOption_SslErrorIgnoreFlags) = SslErrorFlag_Ignore_All @@ -255,12 +255,12 @@ Function request_adjust(doc As String, ByRef fail As Boolean) As Object Set json = JsonConverter.ParseJson(wr) If IsNull(json("x")) Then - MsgBox ("no adjustment was made") + MsgBox ("No adjustment was made.") fail = False Exit Function End If - ReDim res(json("x").Count - 1, 33) + ReDim res(json("x").Count - 1, 34) For i = 0 To UBound(res, 1) res(i, 0) = json("x")(i + 1)("bill_cust_descr") @@ -297,6 +297,7 @@ Function request_adjust(doc As String, ByRef fail As Boolean) As Object res(i, 31) = json("x")(i + 1)("logid") res(i, 32) = json("x")(i + 1)("tag") res(i, 33) = json("x")(i + 1)("comment") + res(i, 34) = json("x")(i + 1)("pounds") Next i Set json = Nothing @@ -331,7 +332,7 @@ Sub load_config() Dim i As Integer '----server to use--------------------------------------------------------- - handler.server = shConfig.Range("server").value + handler.server = shConfig.Range("server").Value '---basis----------------------------------------------------------------- With shConfig.ListObjects("BASIS") For i = 1 To .DataBodyRange.Rows.Count @@ -354,7 +355,7 @@ Sub load_config() Next End With '---plan version-------------------------------------------------------------- - handler.plan = shConfig.Range("budget").value + handler.plan = shConfig.Range("budget").Value End Sub @@ -369,7 +370,7 @@ Sub month_tosheet(ByRef pkg() As Variant, ByRef basket() As Variant) Set j = JsonConverter.ParseJson("{""scenario"":" & scenario & "}") .Cells(1, 16) = JsonConverter.ConvertToJson(j) - For i = 0 To 12 + For i = 1 To 12 '------------volume------------------- .Cells(i + 1, 1) = co_num(pkg(i, 1), 0) .Cells(i + 1, 2) = co_num(pkg(i, 2), 0) @@ -454,9 +455,9 @@ Sub month_tosheet(ByRef pkg() As Variant, ByRef basket() As Variant) .Range("U1:AC100000").ClearContents Call Utils.SHTp_DumpVar(basket, .Name, 1, 21, False, False, True) Call Utils.SHTp_DumpVar(basket, .Name, 1, 26, False, False, True) - shConfig.Range("rebuild").value = 0 - shConfig.Range("show_basket").value = 0 - shConfig.Range("new_part").value = 0 + shConfig.Range("rebuild").Value = 0 + shConfig.Range("show_basket").Value = 0 + shConfig.Range("new_part").Value = 0 shMonthView.LoadSheet @@ -489,7 +490,7 @@ Function list_changes(doc As String, ByRef fail As Boolean) As Variant() Exit Function End If - server = shConfig.Range("server").value + server = shConfig.Range("server").Value With req .Option(WinHttpRequestOption_SslErrorIgnoreFlags) = SslErrorFlag_Ignore_All @@ -503,7 +504,7 @@ Function list_changes(doc As String, ByRef fail As Boolean) As Variant() Set json = JsonConverter.ParseJson(wr) If IsNull(json("x")) Then - MsgBox ("no history") + MsgBox ("No history.") fail = True Exit Function End If @@ -563,7 +564,7 @@ Function undo_changes(ByVal logid As Integer, ByRef fail As Boolean) As Variant( Next i If j = 0 Then - MsgBox ("current data set is not tracking changes, cannot isolate change locally") + MsgBox ("Current data set is not tracking changes. Cannot isolate change locally.") fail = True Exit Function End If @@ -602,7 +603,7 @@ Function get_swap_fit(doc As String, ByRef fail As Boolean) As Variant() Exit Function End If - server = shConfig.Range("server").value + server = shConfig.Range("server").Value With req .Option(WinHttpRequestOption_SslErrorIgnoreFlags) = SslErrorFlag_Ignore_All @@ -616,7 +617,7 @@ Function get_swap_fit(doc As String, ByRef fail As Boolean) As Variant() Set json = JsonConverter.ParseJson(wr) If IsNull(json("x")) Then - MsgBox ("no history") + MsgBox ("No history.") fail = True Exit Function End If diff --git a/VBA/openf.frm b/VBA/openf.frm index 06b398c..398c913 100644 --- a/VBA/openf.frm +++ b/VBA/openf.frm @@ -21,10 +21,10 @@ End Sub Private Sub cbOK_Click() - Application.StatusBar = "Retrieving data for " & cbDSM.value & "....." + Application.StatusBar = "Retrieving data for " & cbDSM.Value & "....." - openf.Caption = "retrieving data......" - Call handler.pg_main_workset(cbDSM.value) + openf.Caption = "Retrieving data......" + Call handler.pg_main_workset(cbDSM.Value) shOrders.PivotTables("ptOrders").PivotCache.Refresh Application.StatusBar = False openf.Hide @@ -33,8 +33,8 @@ End Sub Private Sub UserForm_Activate() - handler.server = shConfig.Range("server").value - cbDSM.list = shSupportingData.ListObjects("DSM").DataBodyRange.value + handler.server = shConfig.Range("server").Value + cbDSM.list = shSupportingData.ListObjects("DSM").DataBodyRange.Value End Sub diff --git a/VBA/openf.frx b/VBA/openf.frx index d14a180..9ca5cc7 100644 Binary files a/VBA/openf.frx and b/VBA/openf.frx differ diff --git a/VBA/part.frm b/VBA/part.frm index 7c23040..f73ae0c 100644 --- a/VBA/part.frm +++ b/VBA/part.frm @@ -29,7 +29,7 @@ End Sub Private Sub UserForm_Activate() useval = False - cbPart.list = shSupportingData.ListObjects("ITEM").DataBodyRange.value + cbPart.list = shSupportingData.ListObjects("ITEM").DataBodyRange.Value End Sub diff --git a/VBA/part.frx b/VBA/part.frx index f223fbe..9f15b7e 100644 Binary files a/VBA/part.frx and b/VBA/part.frx differ diff --git a/VBA/shConfig.cls b/VBA/shConfig.cls index 9fc9c32..f2a123d 100644 --- a/VBA/shConfig.cls +++ b/VBA/shConfig.cls @@ -10,7 +10,9 @@ Attribute VB_Exposed = True Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) - If shConfig.Range("debug_mode").value Then + If Intersect(Target, shConfig.Range("debug_mode")) Is Nothing Then Exit Sub + + If shConfig.Range("debug_mode").Value Then shConfig.Visible = xlSheetVisible shData.Visible = xlSheetVisible shMonthView.Visible = xlSheetVisible diff --git a/VBA/shMonthView.cls b/VBA/shMonthView.cls index 8c347d1..9e28a11 100644 --- a/VBA/shMonthView.cls +++ b/VBA/shMonthView.cls @@ -30,7 +30,7 @@ Public Sub MPP_Down() ' Handler for down-triangle on price percent change. If newpart Then Exit Sub With shMonthView.Range("PricePctChange") - .value = WorksheetFunction.Max(-0.1, .value - 0.01) + .Value = WorksheetFunction.Max(-0.1, .Value - 0.01) End With MPP_Change End Sub @@ -39,7 +39,7 @@ Public Sub MPP_Up() ' Handler for up-triangle on price percent change. If newpart Then Exit Sub With shMonthView.Range("PricePctChange") - .value = WorksheetFunction.Min(0.1, .value + 0.01) + .Value = WorksheetFunction.Min(0.1, .Value + 0.01) End With MPP_Change End Sub @@ -70,7 +70,7 @@ Public Sub MPV_Down() ' Handler for down-triangle on qty percent change. If newpart Then Exit Sub With shMonthView.Range("QtyPctChange") - .value = WorksheetFunction.Max(-0.1, .value - 0.01) + .Value = WorksheetFunction.Max(-0.1, .Value - 0.01) End With MPV_Change End Sub @@ -79,7 +79,7 @@ Public Sub MPV_Up() ' Handler for up-triangle on qty percent change. If newpart Then Exit Sub With shMonthView.Range("QtyPctChange") - .value = WorksheetFunction.Min(0.1, .value + 0.01) + .Value = WorksheetFunction.Min(0.1, .Value + 0.01) End With MPV_Change End Sub @@ -106,6 +106,10 @@ Private Sub MPV_Change() Application.ScreenUpdating = True End Sub +Public Sub ToggleVolumePrice() + shMonthView.Range("MonthAdjustVolume").Value = (shMonthView.Range("MonthAdjustVolume").Value <> True) + shMonthView.Range("MonthAdjustPrice").Value = Not shMonthView.Range("MonthAdjustVolume").Value +End Sub Private Sub Worksheet_Change(ByVal Target As Range) '---this needs checked prior to busy check because % increase spinners are flagged as dumps @@ -121,7 +125,7 @@ Private Sub Worksheet_Change(ByVal Target As Range) IntersectsWith(Target, Range("sales"))) And _ Target.Columns.Count > 1 _ Then - MsgBox ("you can only change one column at a time - your change will be undone") + MsgBox "You can only change one column at a time. Your change will be undone." busy = True Application.Undo busy = False @@ -135,7 +139,7 @@ Private Sub Worksheet_Change(ByVal Target As Range) If IntersectsWith(Target, Range("SalesNewAdj")) Then Call Me.ms_adj If IntersectsWith(Target, Range("SalesFinal")) Then Call Me.ms_set - If IntersectsWith(Target, Range("basket")) And shConfig.Range("show_basket").value = 1 Then + If IntersectsWith(Target, Range("basket")) And shConfig.Range("show_basket").Value = 1 Then If RemoveEmptyBasketLines Then ' Lines were removed GetEditBasket shMonthView.Range("basket").Resize(1, 1) ' Don't "touch" the mix column, so as to rescale all rows proportionally to 100% total. Else @@ -145,7 +149,7 @@ Private Sub Worksheet_Change(ByVal Target As Range) End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) - If IntersectsWith(Target, Union(Range("basket_new_item"), Range("basket"))) And shConfig.Range("show_basket").value = 1 Then + If IntersectsWith(Target, Union(Range("basket_new_item"), Range("basket"))) And shConfig.Range("show_basket").Value = 1 Then Cancel = True Call Me.basket_pick(Target) Target.Select @@ -154,7 +158,7 @@ End Sub Sub picker_shortcut() - If IntersectsWith(Selection, Range("basket")) And shConfig.Range("show_basket").value = 1 Then + If IntersectsWith(Selection, Range("basket")) And shConfig.Range("show_basket").Value = 1 Then Call Me.basket_pick(Selection) End If @@ -417,7 +421,7 @@ Private Sub BuildJson() Set np("scenario")("iter") = JsonConverter.ParseJson("[""copy""]") np("source") = "adj" np("type") = "new_basket" - np("tag") = shMonthView.Range("MonthTag").value + np("tag") = shMonthView.Range("MonthTag").Value Set m = JsonConverter.ParseJson("{}") End If @@ -427,7 +431,7 @@ Private Sub BuildJson() Set o = JsonConverter.ParseJson("{}") o("amount") = sales(pos, 5) o("qty") = units(pos, 5) - Set m(shMonthView.Range("OrderMonths").Cells(pos, 1).value) = JsonConverter.ParseJson(JsonConverter.ConvertToJson(o)) + Set m(shMonthView.Range("OrderMonths").Cells(pos, 1).Value) = JsonConverter.ParseJson(JsonConverter.ConvertToJson(o)) End If Else 'if something is changing @@ -475,10 +479,10 @@ Private Sub BuildJson() If Me.newpart Then Set np("months") = JsonConverter.ParseJson(JsonConverter.ConvertToJson(m)) - np("newpart") = shMonthView.Range("basket").Cells(1, 1).value + np("newpart") = shMonthView.Range("basket").Cells(1, 1).Value 'get the basket from the sheet Dim basket() As Variant - basket = shMonthUpdate.Range("U1").CurrentRegion.value + basket = shMonthUpdate.Range("U1").CurrentRegion.Value Set m = JsonConverter.ParseJson(Utils.json_from_table(basket, "basket", False)) If UBound(basket, 1) <= 2 Then Set np("basket") = JsonConverter.ParseJson("[" & Utils.json_from_table(basket, "basket", False) & "]") @@ -559,13 +563,13 @@ Sub reset() End Sub Sub switch_basket() - shConfig.Range("show_basket").value = 1 - shConfig.Range("show_basket").value + shConfig.Range("show_basket").Value = 1 - shConfig.Range("show_basket").Value Call Me.print_basket End Sub Sub print_basket() - If shConfig.Range("show_basket").value = 0 Then + If shConfig.Range("show_basket").Value = 0 Then busy = True shMonthView.Range("basket").ClearContents busy = False @@ -580,10 +584,10 @@ Sub print_basket() shMonthView.Range("basket").ClearContents For i = 2 To UBound(basket, 1) - shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 0).value = basket(i, 1) - shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 4).value = basket(i, 2) - shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 10).value = basket(i, 3) - shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 15).value = basket(i, 4) + shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 0).Value = basket(i, 1) + shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 4).Value = basket(i, 2) + shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 10).Value = basket(i, 3) + shMonthView.Range("basket").Resize(1, 1).Offset(i - 2, 15).Value = basket(i, 4) Next i busy = False @@ -600,9 +604,9 @@ Sub basket_pick(ByRef Target As Range) If build.useval Then busy = True - .Cells(Target.row + i, 2) = build.cbPart.value - .Cells(Target.row + i, 6) = rev_cust(build.cbBill.value) - .Cells(Target.row + i, 12) = rev_cust(build.cbShip.value) + .Cells(Target.row + i, 2) = build.cbPart.Value + .Cells(Target.row + i, 6) = rev_cust(build.cbBill.Value) + .Cells(Target.row + i, 12) = rev_cust(build.cbShip.Value) busy = False GetEditBasket Selection @@ -715,7 +719,7 @@ Sub post_adjust() If WorksheetFunction.CountA(shMonthUpdate.Range("P2:P13")) = 0 Then msg = "Make sure at least one month has Final values for Volume, Price, and Sales." End If - If IsEmpty(shMonthView.Range("MonthTag").value) Then msg = "You need to specify a tag for this update." + If IsEmpty(shMonthView.Range("MonthTag").Value) Then msg = "You need to specify a tag for this update." If msg <> "" Then MsgBox msg, vbOKOnly Or vbExclamation @@ -728,8 +732,8 @@ Sub post_adjust() If Me.newpart Then Set adjust = JsonConverter.ParseJson(shMonthUpdate.Cells(2, 16)) - adjust("message") = shMonthView.Range("MonthComment").value - adjust("tag") = shMonthView.Range("MonthTag").value + adjust("message") = shMonthView.Range("MonthComment").Value + adjust("tag") = shMonthView.Range("MonthTag").Value jdoc = JsonConverter.ConvertToJson(adjust) Call handler.request_adjust(jdoc, fail) If fail Then Exit Sub @@ -737,8 +741,8 @@ Sub post_adjust() For i = 2 To 13 If shMonthUpdate.Cells(i, 16) <> "" Then Set adjust = JsonConverter.ParseJson(shMonthUpdate.Cells(i, 16)) - adjust("message") = shMonthView.Range("MonthComment").value - adjust("tag") = shMonthView.Range("MonthTag").value + adjust("message") = shMonthView.Range("MonthComment").Value + adjust("tag") = shMonthView.Range("MonthTag").Value jdoc = JsonConverter.ConvertToJson(adjust) Call handler.request_adjust(jdoc, fail) If fail Then Exit Sub @@ -752,7 +756,7 @@ End Sub Sub build_new() - shConfig.Range("rebuild").value = 1 + shConfig.Range("rebuild").Value = 1 Dim i As Long Dim j As Long Dim basket() As Variant @@ -800,7 +804,7 @@ Sub new_part() cust = Utils.SHTp_Get(shMonthUpdate.Name, 1, 27, True) If Not Utils.TBLp_Aggregate(cust, True, True, True, Array(0, 1), Array("S", "S"), Array(2)) Then - MsgBox ("error building customer mix") + MsgBox ("Error building customer mix.") End If '--------inquire for new part to join with cust mix-------------------------------------------- @@ -816,14 +820,14 @@ Sub new_part() With shMonthView.Range("basket") .ClearContents For i = 1 To UBound(cust, 2) - .Cells(i, 1) = part.cbPart.value + .Cells(i, 1) = part.cbPart.Value .Cells(i, 5) = cust(0, i) .Cells(i, 11) = cust(1, i) .Cells(i, 16) = CDbl(cust(2, i)) Next i End With - shConfig.Range("new_part").value = 1 + shConfig.Range("new_part").Value = 1 '------copy revised basket to _month storage--------------------------------------------------- @@ -886,18 +890,18 @@ Sub new_part() 'force basket to show to demonstrate the part was changed - shConfig.Range("show_basket").value = 1 + shConfig.Range("show_basket").Value = 1 Call Me.print_basket busy = False End Sub Function newpart() As Boolean - newpart = shConfig.Range("new_part").value = 1 + newpart = shConfig.Range("new_part").Value = 1 End Function Private Sub Worksheet_Deactivate() - Forecasting.shMonthView.Visible = IIf(shConfig.Range("debug_mode").value, xlSheetVisible, xlSheetHidden) + Forecasting.shMonthView.Visible = IIf(shConfig.Range("debug_mode").Value, xlSheetVisible, xlSheetHidden) End Sub diff --git a/build/build_baseline_from_FAnalysis.sql b/build/build_baseline_from_FAnalysis.sql new file mode 100644 index 0000000..8bc89e6 --- /dev/null +++ b/build/build_baseline_from_FAnalysis.sql @@ -0,0 +1,795 @@ +-- Connection: usmidsql01.FAnalysis +/* + +******************************************************************************************************************************************* +** Phil Runninger, 4/27/2023 ************************************************************************************************************* +** +** Here is how you use this script. This procedure is only temporary, as the entire +** system will be rewritten for the 2025 season. +** +** 1. In SSMS... +** a. Turn on the option: Query Results, Sql Server, Results to Grid, Include column headers.... +** b. Connect to usmidsql01. +** c. Run this script in the FAnalysis database. +** d. Right-click in the results grid, and choose Save Results As... +** 2. In a proper text editor, aka Neovim, remove all instances of NULL from the exported file, leaving nothing between the commas. +** 3. In DBeaver, +** a. Log into usmidsap01 +** b. Navigate to the ubm.rlarp.osm_pool table +** c. Right-click, and choose Import Data. +** d. Follow the self-explanatory steps in the wizard. Make sure to choose the option to empty the table first. +** e. Verify the import worked correctly. +** f. Run the following statements to finish setting up the system. +** DELETE FROM rlarp.osm_log WHERE id > 1; +** ALTER SEQUENCE rlarp.osm_log_id_seq RESTART 1; +** +******************************************************************************************************************************************* +******************************************************************************************************************************************* + + + +Baseline Data New Method: + +Forecasting on Orders Basis + +1 -- Pull 2023 Sales & Volumes + 2023 Promised Sales & Volumes +2 - Backout 2024 Open Orders -- +3 -- Sum 1 and 2, Group By ShiptoGroup, Partgroup +4 - Pull 2019 Orders Group By ShipToGroup, Partgroup, OrderMonth +5 - Map 3 (total) to 4 (by order month) +ShipTo and Partgroup in both + * Shipto and Partgroup does not exist in 2019 --> Subtract from 2023 Ship 90 +Exists in 2019, does not exists in 2023 -- > Ignore + +On the Orders Worksheet +Show 2019 Orders as Reference + +Rollup - As part of process. + + */ + +---------------------------------------------------------------------- +--BASE DATA VALUES RECAST WITH Last Price Paid instead of Spot Price +--------------------------------------------------------------------- + +SELECT * INTO #BASE_DATA +FROM +( SELECT + [Bill-To] AS bill_cust_descr + ,[Bill-To Group] AS billto_group + ,[Ship-To] AS ship_cust_descr + ,[Ship-To Group] AS shipto_group + ,CASE WHEN [Quota Rep] LIKE '[0-9][0-9][0-9][0-9][0-9] -%' THEN LEFT([Quota Rep],5) ELSE NULL END AS [dsm] + ,CASE WHEN [Quota Rep] LIKE '[0-9][0-9][0-9][0-9][0-9] -%' THEN SUBSTRING(RTRIM([Quota Rep]), 9, LEN([Quota Rep])-8) ELSE LTRIM(RTRIM([Quota Rep])) END AS [quota_rep_descr] + ,[Director] AS [director] + ,[Segment] AS [segm] + ,CASE WHEN [Major Group] LIKE '610%' THEN 'Fiber' ELSE 'Plastic' END [substance] + ,[Channel] AS [chan] + ,[Channel Sub] AS [chansub] + ,[Channel - Retail] AS [chan_retail] + ,[Part Code] AS [part] + ,[Part Group Descr] AS [part_descr] + ,[Part Group] AS [part_group] + ,[Branding Flag] AS [branding] + ,LEFT([Major Group],5) + ' ' + [Major Group] AS [majg_descr] + ,LEFT([Minor Group],5) + ' ' + [Minor Group] AS [ming_descr] + ,LEFT([Major Sales Group],5) + ' ' + [Major Sales Group] AS [majs_descr] + ,LEFT([Minor Sales Group],5) + ' ' + [Minor Sales Group] AS [mins_descr] + ,[Order Date] AS [order_date] + ,[Order Season] AS [order_season] + ,[Order Month] AS [order_month] + ,[Ship Date] AS [ship_date] + ,[Ship Season] AS [ship_season] + ,[Ship Month] AS [ship_month] + ,[Request Date] AS [request_date] + ,[Request Season] AS [request_season] + ,[Request Month] AS [request_month] + ,[Promo Code] AS [promo] + ,[Financial Statement Line] as [fs_line] + ,[Inventory Currency] as [r_currency] + ,[Order Currency] as [c_currency] + ,PRICE.LPP_loc * BASE.Units AS [value_loc] + ,PRICE.LPP_USD * BASE.Units AS [value_usd] + ,[Standard Cost Local - Historic] AS [cost_loc] + ,[Std Cost USD - Historic] AS [cost_usd] + ,[Units] AS [units] + ,[Pounds] AS [pounds] + ,'b24' AS [version] + ,'copy' AS [iter] + ,1 AS [logid] + ,'baseline' AS [tag] + ,'don''t undo' AS [comment] + ,[Promise Month] AS [Promise Month] + ,[Data Source] AS [Data Source] + ,[Order Status] AS [Order Status] + ,[Promise Season] AS [Promise Season] + FROM [FAnalysis].[RLARP].[osm_stack_pretty_wSTATUS] AS BASE + LEFT OUTER JOIN + ( + SELECT shipto_group, [part_descr], /*[Order Number], */ [price_loc] AS [LPP_loc], [price_USD] AS [LPP_USD] + FROM + ( SELECT + ROW_NUMBER() OVER (PARTITION BY [Ship-To Group], [Part Code Descr] ORDER BY [Order Date] DESC, [Order Number] DESC) AS LPP_RANK + -- ,[Order Date] AS [Order Date] + -- ,[Order Number] AS [Order Number] + ,[Ship-To Group] AS shipto_group + ,[Part Code Descr] AS [part_descr] + -- ,[value local] AS [value_loc] + -- ,[value usd] AS [value_usd] + -- ,[Units] AS [units] + ,[Value Local] / NULLIF([Units],0) AS [price_loc] + ,[Value USD] / NULLIF([Units],0) AS [price_USD] + FROM [FAnalysis].[RLARP].[osm_stack_pretty_wSTATUS] + WHERE + ( + ([Data Source] = 'Actual' AND [Order Status] = 'Open - Current' AND [Promise Season] >= 2023) OR + ([Data Source] = 'Actual' AND [Ship Season] = 2023) + ) AND + [Ship-To] IS NOT NULL AND + [Ship-To Group] IS NOT NULL AND + [Order Date] IS NOT NULL + --ORDER BY [shipto_group], [part_descr], LPP_RANK ASC + ) AS LPP_RESULT + WHERE LPP_RESULT.LPP_RANK = 1 + ) PRICE + ON BASE.[Ship-To Group] = PRICE.shipto_group AND + BASE.[Part Code Descr] = PRICE.part_descr + WHERE + ( + (BASE.[Data Source] = 'Actual' AND BASE.[Order Status] = 'Open - Current' AND BASE.[Promise Season] >= 2023) OR + (BASE.[Data Source] = 'Actual' AND BASE.[Ship Season] = 2023) + ) AND + BASE.[Ship-To] IS NOT NULL AND + BASE.[Ship-To Group] IS NOT NULL +) AS A + +CREATE CLUSTERED INDEX IDX_CBASE_DATA_STG ON #BASE_DATA(shipto_group) +CREATE INDEX IDX_CFYBASE_DATA_PG ON #BASE_DATA(part_group) + +/* Backout orders that already have been placed for FY2024 from the Order Forecast Baseline */ + +UPDATE #BASE_DATA SET + [value_loc] = -1 * [value_loc] + ,[value_usd] = -1 * [value_usd] + ,[cost_loc] = -1 * [cost_loc] + ,[cost_usd] = -1 * [cost_usd] + ,[units] = -1 * [Units] + ,[pounds] = -1 * [Pounds] +WHERE [Data Source] = 'Actual' AND [Order Status] = 'Open - Current' AND [Promise Season] > 2023 + +---------------------------------------------------------------------------------------------------- +--CREATE TEMP TABLES: * Shipto and Partgroup does not exist in 2019 --> Subtract from 2023 Ship 90 +--SELECT #BASE_DATA. FROM #BASE_DATA +---------------------------------------------------------------------------------------------------- + +SELECT * INTO #FY2023 FROM +( SELECT + [shipto_group] + ,[part_group] + ,[ship_month] + ,[value_loc] + ,[value_usd] + ,[cost_loc] + ,[cost_usd] + ,[units] + ,[pounds] + ,[Promise Month] + ,CASE + WHEN A.ship_month IS NULL THEN + CASE + WHEN CAST(LEFT(A.[Promise Month],2) AS INT) - 3 < 1 THEN CAST(LEFT(A.[Promise Month],2) AS INT) + 9 + ELSE CAST(LEFT(A.[Promise Month],2) AS INT) - 3 + END --2023 Promised, Not Shipped + ELSE + CASE + WHEN CAST(LEFT(A.ship_month,2) AS INT) - 3 < 1 THEN CAST(LEFT(A.ship_month,2) AS INT) + 9 + ELSE CAST(LEFT(A.ship_month,2) AS INT) - 3 + END + END AS order_month_idx + FROM + ( SELECT + shipto_group + ,[part_group] + ,[ship_month] + ,SUM([value_loc]) AS [value_loc] + ,SUM([value_usd]) AS [value_usd] + ,SUM([cost_loc]) AS [cost_loc] + ,SUM([cost_usd]) AS [cost_usd] + ,SUM([units]) AS [units] + ,SUM([pounds]) AS [pounds] + ,MAX([Promise Month]) AS [Promise Month] + FROM #BASE_DATA + WHERE + ( + ([Data Source] = 'Actual' AND [ship_season] = 2023) OR + ([Data Source] = 'Actual' AND [Order Status] = 'Open - Current' AND [Promise Season] = 2023) + ) AND + [shipto_group] IS NOT NULL AND + [part_group] <> '' + GROUP BY [shipto_group], [part_group], [ship_month] + ) AS A +) AS FY23 + +CREATE CLUSTERED INDEX IDX_CFY2023_STG ON #FY2023(shipto_group) +CREATE INDEX IDX_CFY2023_PG ON #FY2023(part_group) + +SELECT * INTO #FY2019 FROM +( SELECT + [Ship-To Group] AS shipto_group + ,[Part Group] AS [part_group] + ,MAX([Order Month]) AS [order_month] + FROM [FAnalysis].[RLARP].[osm_stack_pretty_wSTATUS] + WHERE + [Data Source] = 'Actual' AND + [Order Season] = 2019 AND + [Ship-To Group] IS NOT NULL AND + [part group] <> '' + GROUP BY [Ship-To Group], [Part Group] +) AS FY19 + +CREATE CLUSTERED INDEX IDX_CFY2019_STG ON #FY2019(shipto_group) +CREATE INDEX IDX_CFY2019_PG ON #FY2019(part_group) + +------------------------ +-- BEGIN MASTER QUERY +------------------------- + +SELECT + CASE + WHEN DETAIL.[ship_season] IS NULL THEN CAST(DETAIL.[promise_season] % 100 AS varchar) + LEFT(DETAIL.[promise_month], 2) + ELSE CAST(DETAIL.[ship_season] % 100 AS varchar) + LEFT(DETAIL.[ship_month], 2) + END AS [fspr] + ,NULL as [plnt] + ,DETAIL.[promo] + ,NULL as [terms] + ,DETAIL.bill_cust_descr + ,DETAIL.ship_cust_descr + ,DETAIL.[dsm] + ,DETAIL.[quota_rep_descr] + ,DETAIL.[director] + ,DETAIL.billto_group + ,DETAIL.shipto_group + ,DETAIL.[chan] + ,DETAIL.[chansub] + ,DETAIL.[chan_retail] + ,DETAIL.[part] + ,DETAIL.[part_descr] + ,DETAIL.[part_group] + ,DETAIL.[branding] + ,DETAIL.[majg_descr] + ,DETAIL.[ming_descr] + ,DETAIL.[majs_descr] + ,DETAIL.[mins_descr] + ,DETAIL.[segm] + ,DETAIL.[substance] + ,DETAIL.[fs_line] + ,DETAIL.[r_currency] + ,DETAIL.[value_usd]/nullif(DETAIL.[value_loc],0) as [r_rate] + ,DETAIL.[c_currency] + ,DETAIL.[cost_usd]/nullif(DETAIL.[cost_loc],0) as [c_rate] + ,ROUND(DETAIL.[Units] * MAPPED.Distribution_Factor,0) AS [units] + ,DETAIL.[value_loc] * MAPPED.Distribution_Factor AS [value_loc] + ,DETAIL.[value_usd] * MAPPED.Distribution_Factor AS [value_usd] + ,DETAIL.[cost_loc] * MAPPED.Distribution_Factor AS [cost_loc] + ,DETAIL.[cost_usd] * MAPPED.Distribution_Factor AS [cost_usd] + ,'CLOSED' as [calc_status] + ,'SHIPMENT' as [flag] + ,DETAIL.[order_date] + ,MAPPED.[order_month] + ,2024 AS [order_season] + ,DETAIL.[request_date] + ,DETAIL.[request_month] + ,DETAIL.[request_season] + ,DETAIL.[ship_date] + ,DETAIL.[ship_month] + ,DETAIL.[ship_season] + ,[version] + ,'copy' AS [iter] -- {'copy'--> baseline data, 'actuals' --> reference data} + ,[logid] + ,[tag] + ,[comment] + ,'build_pool' as [module] + ,DETAIL.[Pounds] * MAPPED.Distribution_Factor AS [pounds] +FROM +( SELECT + FY23_SALES.shipto_group + ,FY23_SALES.part_group + ,FY19_ORDERS.order_month AS order_month + ,FY23_SALES.value_loc * FY19_ORDERS.Distribution_Factor AS value_loc + ,FY23_SALES.value_usd * FY19_ORDERS.Distribution_Factor AS value_usd + ,FY23_SALES.cost_loc * FY19_ORDERS.Distribution_Factor AS cost_loc + ,FY23_SALES.cost_usd * FY19_ORDERS.Distribution_Factor AS cost_usd + ,FY23_SALES.units * FY19_ORDERS.Distribution_Factor AS units + ,FY23_SALES.pounds * FY19_ORDERS.Distribution_Factor AS pounds + ,FY19_ORDERS.Distribution_Factor AS Distribution_Factor + FROM + ( SELECT + shipto_group + ,[part_group] + ,SUM([value_loc]) AS [value_loc] + ,SUM([value_usd]) AS [value_usd] + ,SUM([cost_loc]) AS [cost_loc] + ,SUM([cost_usd]) AS [cost_usd] + ,SUM([units]) AS [units] + ,SUM([pounds]) AS [pounds] + FROM + ( SELECT /* SHIPPED IN 2023 */ + bill_cust_descr + ,billto_group + ,ship_cust_descr + ,[shipto_group] + ,[quota_rep_descr] + ,[director] + ,[segm] + ,[substance] + ,[chan] + ,[chansub] + ,[part_descr] + ,[part_group] + ,[branding] + ,[majg_descr] + ,[ming_descr] + ,[majs_descr] + ,[mins_descr] + ,[order_season] + ,[order_month] + ,[ship_date] + ,[ship_season] + ,[ship_month] + ,[request_season] + ,[request_month] + ,[promo] + ,[value_loc] + ,[value_usd] + ,[cost_loc] + ,[cost_usd] + ,[units] + ,[pounds] + ,[version] + ,[iter] + ,[logid] + ,[tag] + ,[comment] + FROM #BASE_DATA + WHERE [Data Source] = 'Actual' AND [ship_season] = 2023 + UNION ALL + SELECT /* OPEN Promised 2023*/ + bill_cust_descr + ,billto_group + ,ship_cust_descr + ,shipto_group + ,[quota_rep_descr] + ,[director] + ,[segm] + ,[substance] + ,[chan] + ,[chansub] + ,[part_descr] + ,[part_group] + ,[branding] + ,[majg_descr] + ,[ming_descr] + ,[majs_descr] + ,[mins_descr] + ,[order_season] + ,[order_month] + ,[ship_date] + ,[ship_season] + ,[ship_month] + ,[request_season] + ,[request_month] + ,[promo] + ,[value_loc] + ,[value_usd] + ,[cost_loc] + ,[cost_usd] + ,[units] + ,[pounds] + ,[version] + ,[iter] + ,[logid] + ,[tag] + ,[comment] + FROM #BASE_DATA + WHERE [Data Source] = 'Actual' AND [Order Status] = 'Open - Current' AND [Promise Season] = 2023 + UNION ALL + SELECT /* OPEN 2024 AND LATER */ + bill_cust_descr + ,billto_group + ,ship_cust_descr + ,shipto_group + ,[quota_rep_descr] + ,[director] + ,[segm] + ,[substance] + ,[chan] + ,[chansub] + ,[part_descr] + ,[part_group] + ,[branding] + ,[majg_descr] + ,[ming_descr] + ,[majs_descr] + ,[mins_descr] + ,[order_season] + ,[order_month] + ,[ship_date] + ,[ship_season] + ,[ship_month] + ,[request_season] + ,[request_month] + ,[promo] + ,[value_loc] AS [value_loc] /* These values are negative in #BASE_DATA to backout order that already have been placed for FY2024 */ + ,[value_usd] AS [value_usd] + ,[cost_loc] AS [cost_loc] + ,[cost_usd] AS [cost_usd] + ,[Units] AS [units] + ,[Pounds] AS [pounds] + ,[version] + ,[iter] + ,[logid] + ,[tag] + ,[comment] + FROM #BASE_DATA + WHERE [Data Source] = 'Actual' AND [Order Status] = 'Open - Current' AND [Promise Season] > 2023 + ) AS A + WHERE part_group <>'' AND shipto_group IS NOT NULL + GROUP BY A.shipto_group, A.part_group + ) AS FY23_SALES + LEFT OUTER JOIN + ( SELECT * /* 4 - Pull 2019 Orders Group By ShipToGroup, Partgroup, OrderMonth Distribution */ + FROM + ( SELECT + [shipto_group] + ,[part_group] + ,[order_month] + ,SUM([value_loc]) AS [value_loc] + ,SUM([value_usd]) AS [value_usd] + ,SUM([cost_loc]) AS [cost_loc] + ,SUM([cost_usd]) AS [cost_usd] + ,SUM([units]) AS [units] + ,SUM([pounds]) AS [pounds] + ,SUM([Distribution_Factor]) AS [Distribution_Factor] + FROM + ( SELECT /* 2019 Orders*/ + CASE + WHEN SUM([units]) OVER (Partition by [Ship-To Group], [Part Group]) <> 0 THEN [units] / SUM([units]) OVER (Partition by [Ship-To Group], [Part Group]) + ELSE NULL + END AS [Distribution_Factor] + ,[Bill-To] AS bill_cust_descr + ,[Bill-To Group] AS billto_group + ,[Ship-To] AS ship_cust_descr + ,[Ship-To Group] AS shipto_group + ,CASE WHEN Right(Left([Quota Rep], 7), 1) = '-' THEN RIGHT(LTRIM(RTRIM([Quota Rep])), Len([Quota Rep]) - 7) ELSE LTRIM(RTRIM([Quota Rep])) END AS [quota_rep_descr] + ,[Director] AS [director] + ,[Segment] AS [segm] + ,CASE WHEN [Major Group] LIKE '610%' THEN 'Fiber' ELSE 'Plastic' END [substance] + ,[Channel] AS [chan] + ,[Channel Sub] AS [chansub] + ,[Part Group Descr] AS [part_descr] + ,[Part Group] AS [part_group] + ,[Branding Flag] AS [branding] + ,LEFT([Major Group],5) + ' ' + [Major Group] AS [majg_descr] + ,LEFT([Minor Group],5) + ' ' + [Minor Group] AS [ming_descr] + ,LEFT([Major Sales Group],5) + ' ' + [Major Sales Group] AS [majs_descr] + ,LEFT([Minor Sales Group],5) + ' ' + [Minor Sales Group] AS [mins_descr] + ,[Order Season] AS [order_season] + ,[Order Month] AS [order_month] + ,[Ship Season] AS [ship_season] + ,[Ship Month] AS [ship_month] + ,[Request Season] AS [request_season] + ,[Request Month] AS [request_month] + ,[Promo Code] AS [promo] + ,[value local] AS [value_loc] + ,[value usd] AS [value_usd] + ,[Standard Cost Local - Historic] AS [cost_loc] + ,[Std Cost USD - Historic] AS [cost_usd] + ,[Units] AS [units] + ,[Pounds] AS [pounds] + ,'b24' AS [version] + ,'copy' AS [iter] + ,1 AS [logid] + ,'baseline' AS [tag] + ,'don''t undo' AS [comment] + FROM [FAnalysis].[RLARP].[osm_stack_pretty_wSTATUS] + WHERE [Data Source] = 'Actual' AND [Order Season] = 2019 + ) AS B + GROUP BY B.shipto_group, B.part_group, B.order_month + ) AS C + --ORDER BY shipto_group, part_group, order_month + ) AS FY19_ORDERS + ON FY23_SALES.shipto_group = FY19_ORDERS.shipto_group AND FY23_SALES.part_group = FY19_ORDERS.part_group + WHERE FY19_ORDERS.Order_month is NOT NULL + --ORDER BY part_group ASC, order_month ASC + UNION ALL + SELECT + C.shipto_group + ,C.part_group + ,D.order_month + ,C.value_loc AS value_loc + ,C.value_usd AS value_usd + ,C.cost_loc AS cost_loc + ,C.cost_usd AS cost_usd + ,C.units AS units + ,C.pounds AS pounds + --,1 AS Distribution_Factor + --,CASE WHEN SUM(C.[units]) OVER (Partition by [C.shipto_group], [C.part_group]) <> 0 THEN C.[units] / SUM(C.[units]) OVER (Partition by [C.shipto_group], [C.part_group]) ELSE NULL END AS [Distribution_Factor] + ,C.Distribution_Factor AS Distribution_Factor + FROM + ( SELECT + A.shipto_group + ,A.part_group + ,A.order_month_idx + ,A.value_loc AS value_loc + ,A.value_usd AS value_usd + ,A.cost_loc AS cost_loc + ,A.cost_usd AS cost_usd + ,A.units AS units + ,A.pounds AS pounds + ,CASE + WHEN SUM(A.[units]) OVER (Partition by A.[shipto_group], A.[part_group]) <> 0 THEN A.[units] / SUM(A.[units]) OVER (Partition by A.[shipto_group], A.[part_group]) + ELSE NULL + END AS [Distribution_Factor] + FROM #FY2023 A + LEFT OUTER JOIN #FY2019 B + ON A.shipto_group = B.shipto_group AND A.part_group = B.part_group + WHERE + b.[order_month] IS NULL AND + A.shipto_group IS NOT NULL + ) AS C + INNER JOIN + ( SELECT DISTINCT CAST(Left([order_month],2) AS INT) AS [order_month_idx], [order_month] + FROM #FY2019 + ) AS D ON C.order_month_idx = D.Order_month_idx +) AS MAPPED +INNER JOIN +( SELECT + MAX([bill_cust_descr]) AS bill_cust_descr + ,MAX([billto_group]) AS billto_group + ,MAX([ship_cust_descr]) AS ship_cust_descr + ,shipto_group + ,MAX([dsm]) AS dsm + ,MAX([quota_rep_descr]) AS quota_rep_descr + ,MAX([director]) AS [director] + ,MAX([segm]) AS [segm] + ,MAX([substance]) AS [substance] + ,MAX([chan]) AS [chan] + ,MAX([chansub]) AS [chansub] + ,MAX([chan_retail]) AS [chan_retail] + ,MAX([part]) AS [part] + ,[part_descr] + ,[part_group] + ,MAX([branding]) AS [branding] + ,MAX([majg_descr]) AS [majg_descr] + ,MAX([ming_descr]) AS [ming_descr] + ,MAX([majs_descr]) AS [majs_descr] + ,MAX([mins_descr]) AS [mins_descr] + ,MAX([order_date]) AS [order_date] + ,MAX([order_season]) AS [order_season] + ,MAX([order_month]) AS [order_month] + ,MAX([ship_date]) AS [ship_date] + ,MAX([ship_season]) AS [ship_season] + ,MAX([ship_month]) AS [ship_month] + ,MAX([request_date]) AS [request_date] + ,MAX([request_season]) AS [request_season] + ,MAX([request_month]) AS [request_month] + ,MAX([promo]) AS [promo] + ,MAX([fs_line]) as [fs_line] + ,MAX([r_currency]) as [r_currency] + ,MAX([c_currency]) as [c_currency] + ,SUM([value_loc]) AS [value_loc] + ,SUM([value_usd]) AS [value_usd] + ,SUM([cost_loc]) AS [cost_loc] + ,SUM([cost_usd]) AS [cost_usd] + ,SUM([units]) AS [units] + ,SUM([pounds]) AS [pounds] + ,MAX([version]) AS [version] + ,MAX([iter]) AS [iter] + ,MAX([logid]) AS [logid] + ,MAX([tag]) AS [tag] + ,MAX([comment]) AS [comment] + ,MAX([Promise Month]) AS [promise_month] + ,MAX([Data Source]) AS [Data Source] + ,MAX([Order Status])AS [Order Status] + ,MAX([Promise Season]) AS [promise_season] + FROM #BASE_DATA + GROUP BY shipto_group, /*[part],*/ [part_descr], [part_group] +) AS DETAIL +ON MAPPED.shipto_group = DETAIL.shipto_group AND MAPPED.part_group = DETAIL.part_group +-- ORDER BY shipto_group, part_group, order_season, order_month +-- +UNION ALL +-- +-- 2019 ORDERS & 2022 ORDERS for Reference -- +SELECT + CASE + WHEN [Ship Season] IS NULL THEN CAST([Promise Season] % 100 AS varchar) + LEFT([Promise Month], 2) + ELSE CAST([Ship Season] % 100 AS varchar) + LEFT([Ship Month], 2) + END AS [fspr] + ,NULL as [plnt] + ,[Promo Code] AS [promo] + ,NULL as [terms] + ,[Bill-To] AS bill_cust_descr + ,[Ship-To] AS ship_cust_descr + ,CASE WHEN [Quota Rep] LIKE '[0-9][0-9][0-9][0-9][0-9] -%' THEN LEFT([Quota Rep],5) ELSE NULL END AS [dsm] + ,CASE WHEN [Quota Rep] LIKE '[0-9][0-9][0-9][0-9][0-9] -%' THEN SUBSTRING(RTRIM([Quota Rep]), 9, LEN([Quota Rep])-8) ELSE LTRIM(RTRIM([Quota Rep])) END AS [quota_rep_descr] + ,[Director] AS [director] + ,[Bill-To Group] AS billto_group + ,[Ship-To Group] AS shipto_group + ,[Channel] AS [chan] + ,[Channel Sub] AS [chansub] + ,[Channel - Retail] AS [chan_retail] + ,[Part Code] AS [part] + ,[Part Group Descr] AS [part_descr] + ,[Part Group] AS [part_group] + ,[Branding Flag] AS [branding] + ,LEFT([Major Group],5) + ' ' + [Major Group] AS [majg_descr] + ,LEFT([Minor Group],5) + ' ' + [Minor Group] AS [ming_descr] + ,LEFT([Major Sales Group],5) + ' ' + [Major Sales Group] AS [majs_descr] + ,LEFT([Minor Sales Group],5) + ' ' + [Minor Sales Group] AS [mins_descr] + ,[Segment] AS [segm] + ,CASE WHEN [Major Group] LIKE '610%' THEN 'Fiber' ELSE 'Plastic' END [substance] + ,[Financial Statement Line] as [fs_line] + ,[Inventory Currency] as [r_currency] + ,[Value USD]/nullif([Value Local],0) as [r_rate] + ,[Order Currency] as [c_currency] + ,[Std Cost USD - Current]/nullif([Std Cost Local - Current],0) as [c_rate] + ,[Units] AS [units] + ,[value local] AS [value_loc] + ,[value usd] AS [value_usd] + ,[Standard Cost Local - Historic] AS [cost_loc] + ,[Std Cost USD - Historic] AS [cost_usd] + ,'CLOSED' as [calc_status] + ,'SHIPMENT' as [flag] + ,[Order Date] AS [order_date] + ,[Order Month] AS [order_month] + ,[Order Season] AS [order_season] + ,[Request Date] AS [request_date] + ,[Request Month] AS [request_month] + ,[Request Season] AS [request_season] + ,[Ship Date] AS [ship_date] + ,[Ship Month] AS [ship_month] + ,[Ship Season] AS [ship_season] + ,'b24' AS [version] + ,'actuals' AS [iter] + ,1 AS [logid] + ,'baseline' AS [tag] + ,'don''t undo' AS [comment] + ,'build_pool' as [module] + ,[Pounds] AS [pounds] + FROM [FAnalysis].[RLARP].[osm_stack_pretty_wSTATUS] + WHERE ([Data Source] = 'Actual' AND [Order Season] IN(2019,2022)) AND [Ship-To Group] IS NOT NULL AND [part group] <> '' --jps04/25/2023 Included 2022 Data for refernece per users request +-- +UNION ALL +-- +-- OPEN ORDERS GOING INTO THE BEGINNING OF 2024 SEASON -- +-- THESE WERE BACKED OUT OF THE 2024 BASELINE -- +SELECT + CASE + WHEN [Ship Season] IS NULL THEN CAST([Promise Season] % 100 AS varchar) + LEFT([Promise Month], 2) + ELSE CAST([Ship Season] % 100 AS varchar) + LEFT([Ship Month], 2) + END AS [fspr] + ,NULL as [plnt] + ,[Promo Code] AS [promo] + ,NULL as [terms] + ,[Bill-To] AS bill_cust_descr + ,[Ship-To] AS ship_cust_descr + ,CASE WHEN [Quota Rep] LIKE '[0-9][0-9][0-9][0-9][0-9] -%' THEN LEFT([Quota Rep],5) ELSE NULL END AS [dsm] + ,CASE WHEN [Quota Rep] LIKE '[0-9][0-9][0-9][0-9][0-9] -%' THEN SUBSTRING(RTRIM([Quota Rep]), 9, LEN([Quota Rep])-8) ELSE LTRIM(RTRIM([Quota Rep])) END AS [quota_rep_descr] + ,[Director] AS [director] + ,[Bill-To Group] AS billto_group + ,[Ship-To Group] AS shipto_group + ,[Channel] AS [chan] + ,[Channel Sub] AS [chansub] + ,[Channel - Retail] AS [chan_retail] + ,[Part Code] AS [part] + ,[Part Group Descr] AS [part_descr] + ,[Part Group] AS [part_group] + ,[Branding Flag] AS [branding] + ,LEFT([Major Group],5) + ' ' + [Major Group] AS [majg_descr] + ,LEFT([Minor Group],5) + ' ' + [Minor Group] AS [ming_descr] + ,LEFT([Major Sales Group],5) + ' ' + [Major Sales Group] AS [majs_descr] + ,LEFT([Minor Sales Group],5) + ' ' + [Minor Sales Group] AS [mins_descr] + ,[Segment] AS [segm] + ,CASE WHEN [Major Group] LIKE '610%' THEN 'Fiber' ELSE 'Plastic' END [substance] + ,[Financial Statement Line] as [fs_line] + ,[Inventory Currency] as [r_currency] + ,[Value USD]/nullif([Value Local],0) as [r_rate] + ,[Order Currency] as [c_currency] + ,[Std Cost USD - Current]/nullif([Std Cost Local - Current],0) as [c_rate] + ,[Units] AS [units] + ,[value local] AS [value_loc] + ,[value usd] AS [value_usd] + ,[Standard Cost Local - Historic] AS [cost_loc] + ,[Std Cost USD - Historic] AS [cost_usd] + ,'BACKORDER' as [calc_status] + ,'REMAINDER' as [flag] + ,[Order Date] AS [order_date] + ,[Order Month] AS [order_month] + ,'2024' AS [order_season] --jps04/25/2023 Changed order season to 2024 so these show up under 2024 in pivot table + ,[Request Date] AS [request_date] + ,[Request Month] AS [request_month] + ,[Request Season] AS [request_season] + ,[Ship Date] AS [ship_date] + ,[Ship Month] AS [ship_month] + ,[Ship Season] AS [ship_season] + ,'b24' AS [version] + ,'actuals' AS [iter] + ,1 AS [logid] + ,'open-orders' AS [tag] --jps04/25/2023 Change to 'Open-orders' to stinguish these records from the 2024 baseline records + ,'don''t undo' AS [comment] + ,'build_pool' as [module] + ,[Pounds] AS [pounds] + FROM [FAnalysis].[RLARP].[osm_stack_pretty_wSTATUS] + WHERE [Data Source] = 'Actual' AND [Order Status] = 'Open - Current' AND [Promise Season] > 2023 + +--- CLEANUP -- +DROP TABLE #FY2019 +DROP TABLE #FY2023 +DROP TABLE #BASE_DATA + +/* + /* OUTPUTS FOR DEBUG AND VALIDATION*/ + + -- Select * FROM #BASE_DATA + -- ORDER BY shipto_group, part_group + -- + -- Select * FROM #FY2019 + -- ORDER BY shipto_group, part_group + -- + -- SELECT + -- [shipto_group] + -- ,[part_group] + -- ,[order_month] + -- ,SUM([value_loc]) AS [value_loc] + -- ,SUM([value_usd]) AS [value_usd] + -- ,SUM([cost_loc]) AS [cost_loc] + -- ,SUM([cost_usd]) AS [cost_usd] + -- ,SUM([units]) AS [units] + -- ,SUM([pounds]) AS [pounds] + -- ,SUM([Distribution_Factor]) AS [Distribution_Factor] + -- FROM( + -- Select /* 2019 Orders*/ + -- CASE WHEN SUM([units]) OVER (Partition by [Ship-To Group], [Part Group]) <> 0 THEN [units] / SUM([units]) OVER (Partition by [Ship-To Group], [Part Group]) ELSE NULL END AS [Distribution_Factor] + -- ,[Bill-To] AS bill_cust_descr + -- ,[Bill-To Group] AS billto_group + -- ,[Ship-To] AS ship_cust_descr + -- ,[Ship-To Group] AS shipto_group + -- ,CASE WHEN Right(Left([Quota Rep], 7), 1) = '-' THEN RIGHT(LTRIM(RTRIM([Quota Rep])), Len([Quota Rep]) - 7) ELSE LTRIM(RTRIM([Quota Rep])) END AS [quota_rep_descr] + -- ,[Director] AS [director] + -- ,[Segment] AS [segm] + -- ,CASE WHEN [Major Group] LIKE '610%' THEN 'Fiber' ELSE 'Plastic' END [substance] + -- ,[Channel] AS [chan] + -- ,[Channel Sub] AS [chansub] + -- ,[Part Group Descr] AS [part_descr] + -- ,[Part Group] AS [part_group] + -- ,[Branding Flag] AS [branding] + -- ,LEFT([Major Group],5) + ' ' + [Major Group] AS [majg_descr] + -- ,LEFT([Minor Group],5) + ' ' + [Minor Group] AS [ming_descr] + -- ,LEFT([Major Sales Group],5) + ' ' + [Major Sales Group] AS [majs_descr] + -- ,LEFT([Minor Sales Group],5) + ' ' + [Minor Sales Group] AS [mins_descr] + -- ,[Order Season] AS [order_season] + -- ,[Order Month] AS [order_month] + -- ,[Ship Season] AS [ship_season] + -- ,[Ship Month] AS [ship_month] + -- ,[Request Season] AS [request_season] + -- ,[Request Month] AS [request_month] + -- ,[Promo Code] AS [promo] + -- ,[value local] AS [value_loc] + -- ,[value usd] AS [value_usd] + -- ,[Standard Cost Local - Historic] AS [cost_loc] + -- ,[Std Cost USD - Historic] AS [cost_usd] + -- ,[Units] AS [units] + -- ,[Pounds] AS [pounds] + -- ,'b24' AS [version] + -- ,'actuals' AS [iter] + -- ,1 AS [logid] + -- ,'baseline' AS [tag] + -- ,'don''t undo' AS [comment] + -- FROM [FAnalysis].[RLARP].[osm_stack_pretty_wSTATUS] + -- WHERE [Data Source] = 'Actual' AND [Order Season] = 2019 + -- ) AS B + -- GROUP BY B.shipto_group, B.part_group, B.order_month + -- ORDER BY shipto_group, part_group, order_month + -- +*/ diff --git a/index.js b/index.js index 1d205c6..2cb7af3 100644 --- a/index.js +++ b/index.js @@ -77,7 +77,7 @@ server.get('/get_pool', bodyParser.json(), function(req, res) { var path = './route_sql/get_pool.sql'; var callback = function(arg) { sql = arg; - console.log(new Date().toISOString() + "-------------------------get pool:----------------------------"); + console.log(new Date().toISOString() + " GET (pool) file: " + path + "-._.".repeat(20)); console.log(req.body.quota_rep); sql = sql.replace("rep_replace", req.body.quota_rep); console.log(sql); @@ -124,7 +124,7 @@ server.get('/scenario_package', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "-------------------------get scenario:------------------------------") + console.log(new Date().toISOString() + " GET (scenario package) file: " + path + "-._.".repeat(20)) console.log(req.body); //parse the where clause into the main sql statement sql = sql.replace(new RegExp("where_clause", 'g'), w) @@ -163,7 +163,7 @@ server.get('/swap_fit', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "-------------------------get swap fit:------------------------------") + console.log(new Date().toISOString() + "get swap fit: " + path + "-._.".repeat(20)) console.log(req.body); //parse the where clause into the main sql statement sql = sql.replace(new RegExp("where_clause", 'g'), w); @@ -203,7 +203,7 @@ server.post('/swap', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "-------------------------post swap:------------------------------") + console.log(new Date().toISOString() + "post swap: " + path + "-._.".repeat(20)) console.log(req.body); //parse the where clause into the main sql statement sql = sql.replace(new RegExp("where_clause", 'g'), w); @@ -246,7 +246,7 @@ server.post('/cust_swap', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "-------------------------cust swap:------------------------------") + console.log(new Date().toISOString() + " POST (cust swap) file: " + path + "-._.".repeat(20)) console.log(req.body); //parse the where clause into the main sql statement sql = sql.replace(new RegExp("where_clause", 'g'), w); @@ -282,7 +282,7 @@ server.get('/list_changes', bodyParser.json(), function(req, res) { var callback = function(arg) { sql = arg; - console.log(new Date().toISOString() + "-------------------------list changes:------------------------------") + console.log(new Date().toISOString() + "GET (list changes) file: " + path + "-._.".repeat(20)) console.log(req.body); //parse the where clause into the main sql statement sql = sql.replace(new RegExp("replace_user", 'g'), req.body.scenario.quota_rep_descr) @@ -313,7 +313,7 @@ server.get('/undo_change', bodyParser.json(), function(req, res) { var callback = function(arg) { sql = arg; - console.log(new Date().toISOString() + "-------------------------undo change:------------------------------") + console.log(new Date().toISOString() + " GET (undo change) file: " + path + "-._.".repeat(20)) console.log(req.body); //parse the where clause into the main sql statement sql = sql.replace(new RegExp("replace_id", 'g'), JSON.stringify(req.body.logid)) @@ -352,7 +352,7 @@ server.post('/addmonth_v', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "-----------------------------add month volume:---------------------------------"); + console.log(new Date().toISOString() + " POST (add month volume) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -386,7 +386,7 @@ server.post('/addmonth_vp', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "------------------add month volume and price:-------------------"); + console.log(new Date().toISOString() + " POST (add month volume and price) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -429,7 +429,7 @@ server.post('/scale_v', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "-----------------------scale volume:------------------------------"); + console.log(new Date().toISOString() + " POST (scale volume) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -470,7 +470,7 @@ server.post('/scale_p', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "--------------------scale price:-------------------"); + console.log(new Date().toISOString() + " POST (scale price) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -511,7 +511,7 @@ server.post('/scale_vp', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "--------------------scale volume & price:-------------------"); + console.log(new Date().toISOString() + " POST (scale volume & price) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -553,7 +553,7 @@ server.post('/scale_vp_sales', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "--------------------scale volume & price sales:-------------------"); + console.log(new Date().toISOString() + " POST (scale volume & price sales) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -595,7 +595,7 @@ server.post('/new_part', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "--------------------new part:-------------------"); + console.log(new Date().toISOString() + " POST (new part) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -639,7 +639,7 @@ server.post('/new_basket', bodyParser.json(), function(req, res) { res.send("no body was sent"); return; } - console.log(new Date().toISOString() + "--------------------new basket:-------------------"); + console.log(new Date().toISOString() + " POST (new basket) file: " + path + "-._.".repeat(20)); req.body.stamp = new Date().toISOString() console.log(req.body); //console.log(args); @@ -696,7 +696,7 @@ function build_where(req, c, w, d, args) { if (req.body.stamp) { w = w + ` - AND order_date >= least('` + req.body.stamp + "'::date,'2021-06-01')"; + AND order_date >= least('` + req.body.stamp + "'::date,'2022-06-01')"; } return { c, w, d }; } diff --git a/route_sql/addmonth_vupd.sql b/route_sql/addmonth_vupd.sql index 8300395..5a7c073 100644 --- a/route_sql/addmonth_vupd.sql +++ b/route_sql/addmonth_vupd.sql @@ -224,6 +224,7 @@ SELECT ,sum(coalesce(o.value_usd,0)) value_usd ,sum(coalesce(o.cost_loc,0)) cost_loc ,sum(coalesce(o.cost_usd,0)) cost_usd + ,sum(coalesce(o.pounds,0)) pounds ,o.calc_status ,o.flag FROM @@ -338,6 +339,7 @@ SELECT ,COALESCE(log.doc->>'tag','') "tag" ,log.doc->>'message' "comment" ,log.doc->>'type' module + ,round(b.pounds*s.factor*m.momix, 2) pounds FROM basemix b CROSS JOIN vscale s @@ -428,6 +430,7 @@ SELECT ,COALESCE(log.doc->>'tag','') "tag" ,log.doc->>'message' "comment" ,log.doc->>'type' module + ,0::numeric pounds FROM volume b CROSS JOIN pscale p @@ -481,6 +484,7 @@ FROM ,sum(cost_loc) cost_loc ,sum(cost_usd) cost_usd ,sum(units) units + ,sum(pounds) pounds FROM ins GROUP BY diff --git a/route_sql/new_basket.sql b/route_sql/new_basket.sql index 12e741d..c081570 100644 --- a/route_sql/new_basket.sql +++ b/route_sql/new_basket.sql @@ -339,6 +339,7 @@ SELECT ,COALESCE(log.doc->>'tag','') "tag" ,log.doc->>'message' "comment" ,log.doc->>'type' module + ,round(b.units * i.nwht * CASE i.nwun WHEN 'KG' THEN 2.2046 ELSE 1 END, 2) pounds FROM basemix b CROSS JOIN log @@ -354,11 +355,11 @@ FROM LEFT OUTER JOIN rlarp.repc r ON r.rcode = CASE WHEN i.ming = 'B52' THEN 'PW' ELSE --if the gl expense code is 1RE use the retail rep assigned to the bill-to customer if available - CASE WHEN COALESCE(seg.segm,'') = 'Retail' AND COALESCE((SELECT currep FROM lgpgm.usrcust where cucust = bc.bvcust),'') <> '' - THEN + CASE WHEN COALESCE(seg.segm,'') = 'Retail' AND COALESCE((SELECT currep FROM lgpgm.usrcust where cucust = bc.bvcust),'') <> '' + THEN (SELECT currep FROM lgpgm.usrcust where cucust = bc.bvcust) --default logic - ELSE + ELSE CASE SUBSTR(bc.bvclas,2,3) WHEN 'DIS' THEN sc.bvsalm ELSE bc.bvsalm @@ -435,6 +436,7 @@ FROM ,sum(cost_loc) cost_loc ,sum(cost_usd) cost_usd ,sum(units) units + ,sum(pounds) pounds FROM ins GROUP BY diff --git a/route_sql/scale_pd.sql b/route_sql/scale_pd.sql index 811ccaf..1680c56 100644 --- a/route_sql/scale_pd.sql +++ b/route_sql/scale_pd.sql @@ -1,19 +1,19 @@ -WITH +WITH target AS (select target_increment incr) ,basemix AS ( SELECT fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -26,18 +26,19 @@ target AS (select target_increment incr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data ,sum(coalesce(units,0)) units --history value ,sum(coalesce(value_loc,0)) value_loc --history value - ,sum(coalesce(value_usd,0)) value_usd --0 + ,sum(coalesce(value_usd,0)) value_usd --0 ,sum(coalesce(cost_loc,0)) cost_loc --history part mix ,sum(coalesce(cost_usd,0)) cost_usd - ,calc_status --0 - ,flag --0 + ,sum(coalesce(pounds,0)) pounds + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -56,18 +57,18 @@ target AS (select target_increment incr) AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments AND order_date <= ship_date GROUP BY - fspr - ,plnt ---master data + fspr + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -80,13 +81,13 @@ target AS (select target_increment incr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data - ,calc_status --0 - ,flag --0 + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -104,7 +105,7 @@ target AS (select target_increment incr) ,CASE WHEN (SELECT sum(value_loc * r_rate) FROM basemix) = 0 THEN 0 ELSE - (SELECT incr::numeric FROM target)/(SELECT sum(value_loc * r_rate) FROM basemix) + (SELECT incr::numeric FROM target)/(SELECT sum(value_loc * r_rate) FROM basemix) END factor ,CASE WHEN (SELECT sum(value_loc * r_rate) FROM basemix) = 0 THEN CASE WHEN ((SELECT incr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM basemix)) <> 0 THEN @@ -123,17 +124,17 @@ target AS (select target_increment incr) ,final AS ( SELECT fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -146,18 +147,18 @@ target AS (select target_increment incr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data ,0::numeric units ,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price/b.r_rate ELSE b.value_loc*s.factor END)::numeric,2) value_loc ,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price ELSE b.value_usd*s.factor END)::numeric ,2) value_usd ,0::numeric cost_loc ,0::numeric cost_usd - ,calc_status --0 - ,flag --0 + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -173,6 +174,7 @@ target AS (select target_increment incr) ,COALESCE(log.doc->>'tag','') "tag" ,log.doc->>'message' "comment" ,log.doc->>'type' module + ,0::numeric pounds FROM basemix b CROSS JOIN scale s @@ -227,6 +229,7 @@ target AS (select target_increment incr) ,sum(cost_loc) cost_loc ,sum(cost_usd) cost_usd ,sum(units) units + ,sum(pounds) pounds FROM ins GROUP BY diff --git a/route_sql/scale_vd.sql b/route_sql/scale_vd.sql index 472b4c9..6ef2ad9 100644 --- a/route_sql/scale_vd.sql +++ b/route_sql/scale_vd.sql @@ -1,4 +1,4 @@ -WITH +WITH target AS (select incr_qty qincr) ,testv AS ( SELECT @@ -39,17 +39,17 @@ target AS (select incr_qty qincr) ,basemix AS ( SELECT fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -62,18 +62,19 @@ target AS (select incr_qty qincr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data ,sum(coalesce(units,0)) units --history value ,sum(coalesce(value_loc,0)) value_loc --history value - ,sum(coalesce(value_usd,0)) value_usd --0 + ,sum(coalesce(value_usd,0)) value_usd --0 ,sum(coalesce(cost_loc,0)) cost_loc --history part mix ,sum(coalesce(cost_usd,0)) cost_usd - ,calc_status --0 - ,flag --0 + ,sum(coalesce(pounds,0)) pounds + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -89,7 +90,7 @@ target AS (select incr_qty qincr) -----------------scenario---------------------------- where_clause -----------------additional params------------------- - AND CASE (SELECT flag FROM flagv) + AND CASE (SELECT flag FROM flagv) WHEN 'scale all' THEN true WHEN 'scale copy' THEN iter IN ('copy','plan','diff') WHEN 'scale new part' THEN module = 'new basket' @@ -98,17 +99,17 @@ target AS (select incr_qty qincr) AND order_date <= ship_date GROUP BY fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -121,13 +122,13 @@ target AS (select incr_qty qincr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data - ,calc_status --0 - ,flag --0 + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -152,17 +153,17 @@ target AS (select incr_qty qincr) ,final AS ( SELECT fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -175,18 +176,18 @@ target AS (select incr_qty qincr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data ,round(units*s.factor ,2) units ,round(value_loc*s.factor,2) value_loc ,round(value_usd*s.factor,2) value_usd ,round(cost_loc*s.factor ,2) cost_loc ,round(cost_usd*s.factor ,2) cost_usd - ,calc_status --0 - ,flag --0 + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -202,6 +203,7 @@ target AS (select incr_qty qincr) ,COALESCE(log.doc->>'tag','') "tag" ,log.doc->>'message' "comment" ,log.doc->>'type' module + ,round(pounds*s.factor, 2) pounds FROM basemix b CROSS JOIN scale s @@ -254,6 +256,7 @@ FROM ,sum(cost_loc) cost_loc ,sum(cost_usd) cost_usd ,sum(units) units + ,sum(pounds) pounds FROM ins GROUP BY diff --git a/route_sql/scale_vupd.sql b/route_sql/scale_vupd.sql index add0d58..14fa60f 100644 --- a/route_sql/scale_vupd.sql +++ b/route_sql/scale_vupd.sql @@ -1,4 +1,4 @@ -WITH +WITH target AS (select target_vol vincr, target_prc pincr) ,testv AS ( SELECT @@ -39,17 +39,17 @@ target AS (select target_vol vincr, target_prc pincr) ,basemix AS ( SELECT fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -62,18 +62,19 @@ target AS (select target_vol vincr, target_prc pincr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data ,sum(coalesce(units,0)) units --history value ,sum(coalesce(value_loc,0)) value_loc --history value - ,sum(coalesce(value_usd,0)) value_usd --0 + ,sum(coalesce(value_usd,0)) value_usd --0 ,sum(coalesce(cost_loc,0)) cost_loc --history part mix ,sum(coalesce(cost_usd,0)) cost_usd - ,calc_status --0 - ,flag --0 + ,sum(coalesce(pounds,0)) pounds + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -89,7 +90,7 @@ target AS (select target_vol vincr, target_prc pincr) -----------------scenario---------------------------- where_clause -----------------additional params------------------- - AND CASE (SELECT flag FROM flagv) + AND CASE (SELECT flag FROM flagv) WHEN 'scale all' THEN true WHEN 'scale copy' THEN iter IN ('plan','diff','copy') WHEN 'scale new part' THEN module = 'new basket' @@ -97,18 +98,18 @@ target AS (select target_vol vincr, target_prc pincr) AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments AND order_date <= ship_date GROUP BY - fspr - ,plnt ---master data + fspr + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -121,13 +122,13 @@ target AS (select target_vol vincr, target_prc pincr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data - ,calc_status --0 - ,flag --0 + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -151,17 +152,17 @@ target AS (select target_vol vincr, target_prc pincr) ,volume AS ( SELECT fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -174,18 +175,18 @@ target AS (select target_vol vincr, target_prc pincr) ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data ,round(units*s.factor ,2) units ,round(value_loc*s.factor,2) value_loc ,round(value_usd*s.factor,2) value_usd ,round(cost_loc*s.factor ,2) cost_loc ,round(cost_usd*s.factor ,2) cost_usd - ,calc_status --0 - ,flag --0 + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -201,6 +202,7 @@ target AS (select target_vol vincr, target_prc pincr) ,COALESCE(log.doc->>'tag','') "tag" ,log.doc->>'message' "comment" ,log.doc->>'type' module + ,round(pounds*s.factor, 2) pounds FROM basemix b CROSS JOIN vscale s @@ -232,17 +234,17 @@ FROM ,pricing AS ( SELECT fspr - ,plnt ---master data + ,plnt ---master data ,promo --history date mix ,terms ,bill_cust_descr --history cust mix ,ship_cust_descr --history cust mix ,dsm - ,quota_rep_descr --master data + ,quota_rep_descr --master data ,director - ,billto_group --master data + ,billto_group --master data ,shipto_group - ,chan --master data + ,chan --master data ,chansub ,chan_retail ,part @@ -255,18 +257,18 @@ FROM ,mins_descr ,segm ,substance - ,fs_line --master data + ,fs_line --master data ,r_currency --history cust mix - ,r_rate --master data - ,c_currency --master data - ,c_rate --master data + ,r_rate --master data + ,c_currency --master data + ,c_rate --master data ,0::numeric units ,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price/b.r_rate ELSE b.value_loc*s.factor END)::numeric,2) value_loc ,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price ELSE b.value_usd*s.factor END)::numeric ,2) value_usd ,0::numeric cost_loc ,0::numeric cost_usd - ,calc_status --0 - ,flag --0 + ,calc_status --0 + ,flag --0 ,order_date --history date mix ,order_month ,order_season @@ -282,6 +284,7 @@ FROM ,COALESCE(log.doc->>'tag','') "tag" ,log.doc->>'message' "comment" ,log.doc->>'type' module + ,0::numeric pounds FROM volume b CROSS JOIN pscale s @@ -336,6 +339,7 @@ FROM ,sum(cost_loc) cost_loc ,sum(cost_usd) cost_usd ,sum(units) units + ,sum(pounds) pounds FROM ins GROUP BY diff --git a/route_sql/scenario_package.sql b/route_sql/scenario_package.sql index a710afa..a5f0a74 100644 --- a/route_sql/scenario_package.sql +++ b/route_sql/scenario_package.sql @@ -36,7 +36,6 @@ FROM rlarp.osm_pool WHERE where_clause - --quota_rep_descr = 'MATTHEW STAAL' AND order_season IN (2023,2024) GROUP BY order_season