From 86225ea7e508d60d5f2f7d40384b351e2e6b887b Mon Sep 17 00:00:00 2001 From: PhilRunninger Date: Thu, 27 Apr 2023 16:54:37 -0400 Subject: [PATCH] Get pounds to update for each forecast adjustment. Lots of cleanup here too, removing large swaths of code that are no longer needed. Many improvements the Excel workbook, which is kept in Teams, not git. These changes may or may not have had accompanying VBA changes. --- VBA/build.frm | 12 +- VBA/build.frx | Bin 3608 -> 3608 bytes VBA/changes.frm | 18 +- VBA/changes.frx | Bin 3096 -> 3096 bytes VBA/fpvt.frm | 698 ++------------------- VBA/fpvt.frx | Bin 25624 -> 15896 bytes VBA/handler.bas | 29 +- VBA/openf.frm | 10 +- VBA/openf.frx | Bin 3096 -> 3096 bytes VBA/part.frm | 2 +- VBA/part.frx | Bin 3096 -> 3096 bytes VBA/shConfig.cls | 4 +- VBA/shMonthView.cls | 70 ++- build/build_baseline_from_FAnalysis.sql | 795 ++++++++++++++++++++++++ index.js | 32 +- route_sql/addmonth_vupd.sql | 4 + route_sql/new_basket.sql | 8 +- route_sql/scale_pd.sql | 71 ++- route_sql/scale_vd.sql | 69 +- route_sql/scale_vupd.sql | 92 +-- route_sql/scenario_package.sql | 1 - 21 files changed, 1056 insertions(+), 859 deletions(-) create mode 100644 build/build_baseline_from_FAnalysis.sql 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 3276752c3edb77198576886b5a59e7a673180217..56e83ffe47695e42e46a3398bc617a4013ebbddf 100644 GIT binary patch delta 64 zcmbOsGec%W3kzGoNd*aq%FSIYZ&(;pCzo^93sf>NFo`f|FaRkAh6aD{$#z`on{~N3 T7#SHRn{kIR8gB08?q&i2K2#6q delta 68 zcmbOsGec%W3kzF=Z`5q@^37c=Z&(;pCYN*83o$S-Fo`f|fG7rr27mA3?8y#XN{o4% WwYj($8B-^lafdM)Z|>#pW&!|;6%l3t 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 9260c15c168587d44b242fd059accc54eb3ca9e1..187d7f5d8a3d76af97a7ca75935d2e5b804bf128 100644 GIT binary patch delta 65 zcmbOsF+*ZQ3k#dU8zl*c%FSIYFPIq_CKq!Y2a?sCc9U&6Z6_PDs87DjnKU__ONfJk V;R*u-!#w86hFsd4Tezk$0sy816G#96 delta 67 zcmbOsF+*ZQ3k%x?f#})d<(s=$UNAEjO)lm*&X_v6oYNjiT65Y>HfB+oe3vt6aypmn XWD_n~j&z1A3=9nOm^U|aO=koE2h|lk 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 4b8bc3468b1f09512fde819d16c0431a32e3827f..15ef92fca728882a4b1374e2dd5a8a09ad1fcfce 100644 GIT binary patch delta 2570 zcmeH}ZA?>F7{|}K^p>|4DTQ*Cq6GmJEFu&IMCHZ#LeYX)5Z^|N71&A(tZY-ZQPC`h z$p$=M$TWM&mMq!!L4*6SWO14-i^(>^2Q`|w#YM9(+cKB>(A2Obv#heHc>+?}zU`c8Z-I^N_F#F^hRwVK1%0_~VZ}Av1(wxkxajn?m?(%n;=@xH9cb_*s%>%X3B0j-BC& zS$Sf1fNgewCuW-`W@V_)rfp?|mxlV!DaZr)pa3ib%fSl3ZHu5QffE!1nzcEa z*21U&m7of&1Jz(X;7%K%HJ}#MfqJkB@Vm`1-3r|X8UWQ~I##y8*af_R8@54rgLbe7 z>;?P4en2NP?cM*W}WEIA}ub& zn}-qyY8L9IIE0wnNY_l~WG9W8TZVb>c-#7{w>BTyIAb|~6@lkVjdJVp_vZrdy-Rb- zb@PSYnlBt*Y;!Ddyv@fKw|QE8@i^G##ZL_|_V@nT{!@sU)QHL<`6*fKZj}#KJO{mn zhdvFs^oSBsj!#=xnjoZ1L=8K{adoGs@ar448Ou9U_^`GH54V2w!zd}Od6h7te%|pX z^_gFUIi*o+vy`;YP$HAboPJD}(1dYF+Q@A8sJtE~c2VV1<06Z#$i-{H{2%gmiSP`Q zroC-7>8p+$p{Gj@!%DK`SxH+sG8_@Bqkp0XIT7&Aa13zTVw?N0-mDbjCu9NaUbHq8 z8uSI#5oD5RQy_G(C)DMr@Aied0(@5H3Zf^v%jYkPDIfnwi=v5g)EH?jFN-qrGO5O3 zrYUPgTFIO}ta6I~LXSg^zEt|rajbyro|LyAi?Y$2oyDBwIKgoieNvalf-EVwwUBcm z=fQu`eAGHZCYy<-jFBC!=py;xb1~$JttO#oW5Wd@dO1K}{b%vG2^Vh8DMuWWy`1H5 z%ejp?Eof1G6}^&gN>)U?=&Nnow#idZxAL8&Ime9wB+}$;dTp6q2?yz0=LV%aOs3*& zL)mI^nJ&6AC!Oh}6&$7Z@=_U~ljVzLkUlB*$kp^$c{c5CxFExNR@!ZM$t^UtW>|d& zPW17KQa8XlN)y>0sgcjVO8!C<@k6TX;rl{Zy<{=FRZbXL`l(w2YlE0f%BEqz5?^krkok*Wm=S`~n^nY9?reMa+gZ%sBx*kpLZ*H15yQ*YKR*sq1Zjeq0!>Or1ptxQfo^g0-chAD2`v-yvKSTo#bG z_{U7l_9h8h(ospXRf&}CFCx3rfGy}!s_7dg4c3<{Gw1^)4WnE}ry-=PtVwm@-&8Gv Ar~m)} literal 25624 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 delta 83 zcmV-Z0IdI*7?>Eagaih#QCOQ7ce9EFjWs}bcG!*~<0vG@& p00006004kPVQyn(Y;FLP;0Pm=I|*Nt!3sZ<*$H$30JBaC$^joM7^MIJ 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 f223fbe79a441419e366b29424828b4846cacf87..9f15b7e6d39a56a642bd05d63900f980559b3f4a 100644 GIT binary patch delta 100 zcmbOsF+*ZQ3kw^=3l#~6%FSIYt}Ki>lP_=>i{>yeNib+IFfgz&Ff=$P<|U`*Fyu`3 x;ZzbTVPIeq0ZTCfrTo3~QbEFuC6n_x!-3>+&R(X()X8C7+KeTeo4BSi0s!Y?89)F4 delta 100 zcmbOsF+*ZQ3k#dVmFU^x<(s=$Tv-?yCSTw%7G+>yl3>taU|?WlU}$ho%u7zqVPKf- w!>J?$6k`$rOECeZ{Jo1ZLBc?7`JCa5sgsX$_A(h3PY&bKW-Q*^#5Ii(0HYokg#Z8m 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