From 397b309a55331dfb10146aacaef91eae845bfbcb Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Fri, 8 Jan 2021 14:51:59 -0500 Subject: [PATCH] init --- .gitignore | 2 + db_schema/extract_for_customer_facing.db2.sql | 104 ++++++++++ db_schema/extract_for_customer_facing.pg.sql | 117 +++++++++++ db_schema/setup.db2.sql | 13 ++ readme.md | 26 +++ vba/pricelist.frm | 196 ++++++++++++++++++ vba/pricelist.frx | Bin 0 -> 4632 bytes 7 files changed, 458 insertions(+) create mode 100644 .gitignore create mode 100644 db_schema/extract_for_customer_facing.db2.sql create mode 100644 db_schema/extract_for_customer_facing.pg.sql create mode 100644 db_schema/setup.db2.sql create mode 100644 readme.md create mode 100644 vba/pricelist.frm create mode 100644 vba/pricelist.frx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3819313 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.swp +*.swo diff --git a/db_schema/extract_for_customer_facing.db2.sql b/db_schema/extract_for_customer_facing.db2.sql new file mode 100644 index 0000000..ebd2e34 --- /dev/null +++ b/db_schema/extract_for_customer_facing.db2.sql @@ -0,0 +1,104 @@ +WITH +pc AS ( + SELECT + STLC + ,COALESCE(COLTIER,'') COLTIER + ,coalesce(BRANDING,'' ) branding + ,COALESCE(ACCS ,'') ACCS + ,COALESCE(SUFF,'') SUFFIX + ----price 1 ----------------- + ,PCKG PCKG1 + ,1 VOLL1 + ,PCKG VOL1_UOM + ,PACK VOL1_PRICE + ----price 2 ----------------- + ,PCKG PCKG2 + ,1 VOLl2 + ,'PLT' VOL2_UOM + ,MP VOL2_PRICE + ----price 3 ----------------- + ,'PLT' PCKG3 + ,1 VOLL3 + ,'PLT' VOL33_UOM + ,BULK VOL3_PRICE + FROM + rlarp.PCORE P +) +,colors AS ( +SELECT + pc.STLC + ,pc.COLTIER + ,pc.branding + ,pc.ACCS + ,pc.SUFFIX + ,listagg( DISTINCT ltrim(rtrim(i.COLC)),', ') clist + ----price 1 ----------------- + ,pc.PCKG1 + ,pc.VOLL1 + ,pc.VOL1_UOM + ,pc.VOL1_PRICE + ----price 2 ----------------- + ,pc.PCKG2 + ,pc.VOLl2 + ,pc.VOL2_UOM + ,pc.VOL2_PRICE + ----price 3 ----------------- + ,pc.PCKG1 + ,pc.VOLL3 + ,pc.VOL33_UOM + ,pc.VOL3_PRICE +FROM + pc + LEFT OUTER JOIN RLARP.ITEMM i ON + i.STLC = pc.stlc + AND i.COLTIER = pc.coltier + --relax relationship to pick up any colors that we run for the mold and color tier + --AND COALESCE(i.BRANDING,'') = pc.branding + --AND COALESCE(i.ACCS,'') = pc.ACCS + --AND COALESCE(i.SUFFIX,'') = pc.suffix + AND APLNT <> 'I' +GROUP BY + pc.STLC + ,pc.COLTIER + ,pc.branding + ,pc.ACCS + ,pc.SUFFIX + ----price 1 ----------------- + ,pc.PCKG1 + ,pc.VOLL1 + ,pc.VOL1_UOM + ,pc.VOL1_PRICE + ----price 2 ----------------- + ,pc.PCKG2 + ,pc.VOLl2 + ,pc.VOL2_UOM + ,pc.VOL2_PRICE + ----price 3 ----------------- + ,pc.PCKG1 + ,pc.VOLL3 + ,pc.VOL33_UOM + ,pc.VOL3_PRICE +) +,items AS ( +SELECT + pc.STLC + ,pc.coltier + ,pc.branding + ,pc.accs + ,pc.suffix + ,row_number() OVER (PARTITION BY pc.stlc, pc.coltier, pc.branding, pc.accs, pc.suffix ORDER BY item DESC) seq + ,item + ,pckg1 + ,vol1_uom + ,'PC' to_uom +FROM + pc + LEFT OUTER JOIN RLARP.ITEMM i ON + i.STLC = pc.stlc + --AND i.COLTIER = pc.coltier + AND COALESCE(i.BRANDING,'') = pc.branding + AND COALESCE(i.ACCS,'') = pc.ACCS + AND COALESCE(i.SUFFIX,'') = pc.suffix + AND APLNT <> 'I' +) +SELECT * FROM items where seq = 1 \ No newline at end of file diff --git a/db_schema/extract_for_customer_facing.pg.sql b/db_schema/extract_for_customer_facing.pg.sql new file mode 100644 index 0000000..97b40ab --- /dev/null +++ b/db_schema/extract_for_customer_facing.pg.sql @@ -0,0 +1,117 @@ +WITH +pc AS materialized ( + SELECT + STLC + ,COALESCE(COLTIER,'') COLTIER + ,coalesce(BRANDING,'' ) branding + ,COALESCE(ACCS ,'') ACCS + ,COALESCE(SUFF,'') SUFFIX + ----price 1 ----------------- + ,PCKG PCKG1 + ,1 VOLL1 + ,PCKG VOL1_UOM + ,PACK VOL1_PRICE + ----price 2 ----------------- + ,PCKG PCKG2 + ,1 VOLl2 + ,'PLT' VOL2_UOM + ,MP VOL2_PRICE + ----price 3 ----------------- + ,'PLT' PCKG3 + ,1 VOLL3 + ,'PLT' VOL3_UOM + ,BULK VOL3_PRICE + FROM + rlarp.PCORE P +) +,colors AS ( +SELECT + pc.STLC + ,pc.COLTIER + ,pc.branding + ,pc.ACCS + ,pc.SUFFIX + ,string_agg( DISTINCT ltrim(rtrim(i.COLC)),', ') clist + ----price 1 ----------------- + ,pc.PCKG1 + ,pc.VOLL1 + ,pc.VOL1_UOM + ,pc.VOL1_PRICE + ----price 2 ----------------- + ,pc.PCKG2 + ,pc.VOLl2 + ,pc.VOL2_UOM + ,pc.VOL2_PRICE + ----price 3 ----------------- + ,pc.PCKG1 + ,pc.VOLL3 + ,pc.VOL3_UOM + ,pc.VOL3_PRICE +FROM + pc + LEFT OUTER JOIN RLARP.ITEMMv i ON + i.STLC = pc.stlc + AND i.COLTIER = pc.coltier + --relax relationship to pick up any colors that we run for the mold and color tier + --AND COALESCE(i.BRANDING,'') = pc.branding + --AND COALESCE(i.ACCS,'') = pc.ACCS + --AND COALESCE(i.SUFFIX,'') = pc.suffix + AND APLNT <> 'I' +GROUP BY + pc.STLC + ,pc.COLTIER + ,pc.branding + ,pc.ACCS + ,pc.SUFFIX + ----price 1 ----------------- + ,pc.PCKG1 + ,pc.VOLL1 + ,pc.VOL1_UOM + ,pc.VOL1_PRICE + ----price 2 ----------------- + ,pc.PCKG2 + ,pc.VOLl2 + ,pc.VOL2_UOM + ,pc.VOL2_PRICE + ----price 3 ----------------- + ,pc.PCKG1 + ,pc.VOLL3 + ,pc.VOL3_UOM + ,pc.VOL3_PRICE +) +-----------since joining to the item master will be differnt for the last bulk columm--------------- +-----------must first pivot the data out then join based on the type of row------------------------- +,items_init AS ( +SELECT + pc.STLC + ,pc.coltier + ,pc.branding + ,pc.accs + ,pc.suffix + ,row_number() OVER (PARTITION BY pc.stlc, pc.coltier, pc.branding, pc.accs, pc.suffix ORDER BY item DESC) seq + ,item + ,vol1_uom + ,vol2_uom + ,vol3_uom + ,'PC' to_uom +FROM + pc + LEFT OUTER JOIN RLARP.ITEMMv i ON + i.STLC = pc.stlc + --AND i.COLTIER = pc.coltier + AND COALESCE(i.BRANDING,'') = pc.branding + AND COALESCE(i.ACCS,'') = pc.ACCS + AND COALESCE(i.SUFFIX,'') = pc.suffix + AND APLNT <> 'I' +) +,items AS ( + SELECT * FROM items_init where seq = 1 +) +,uom AS ( + SELECT item partn, vol1_uom from_uom, 'pc' to_uom FROM items_init + UNION ALL + SELECT item partn, vol2_uom from_uom, 'pc' to_uom FROM items_init + UNION ALL + SELECT item partn, vol3_uom from_uom, 'pc' to_uom FROM items_init +) +SELECT * FROM uom diff --git a/db_schema/setup.db2.sql b/db_schema/setup.db2.sql new file mode 100644 index 0000000..534ac1b --- /dev/null +++ b/db_schema/setup.db2.sql @@ -0,0 +1,13 @@ +CREATE TABLE RLARP.PCORE ( + STLC VARCHAR(8) + COLTIER VARCHAR(1) + BRANDING VARCHAR(8) + ACCS VARCHAR(2) + SUFF VARCHAR(4) + PCKG VARCHAR(3) + PACK DECIMAL(7,2) + MP DECIMAL(7,2) + BULK DECIMAL(7,2) +); + +COMMENT ON TABLE rlarp.pcore IS 'core price list - mold + attributies and 3 static volume breaks'; diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..56fc889 --- /dev/null +++ b/readme.md @@ -0,0 +1,26 @@ +Start with a generic listing of conceptual prices and build a full-20 part listing with volume breaks denominated in per 1000 units. + +| stlc | coltier | branding | accs | suff | pckg | pack | mp | bulk | +| -------- | ------- | -------- | ---- | ---- | ---- | ------- | ---- | ------- | +| HTO10752 | B | | S | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | B | | SH | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | B | | | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | T | | S | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | T | | SH | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | T | | | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | L | | S | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | L | | SH | | CSE | 1337.61 | 1157 | 1099.15 | +| HTO10752 | L | | | | CSE | 1337.61 | 1157 | 1099.15 | + +The mold plus basic attributes form a conceptual framework, and have to be attributed to full-20 codes in order for this to work: +* mold/part group: first 8 digits (`rlarp.itemm.styc`) +* color tier: `rlarp.itemm.coltier` +* branding: `rlarp.branding` +* accessories: `rlarp.accs_ps` +* suffix: `rlarp.suffix` +* package: `rlarp.uomp` + +Any part numbers that match these columns in rlarp.itemm would qualify for listed pricing. +The only exception is that the "bulk column" only applies to `uomp` value `PLT` (bulk pricing only applies to part numbers with `PLT` default pack unit (`v6cntr`)) + +the accs_ps and suff columns in `itemm` are calculated and not materialized anywhere, and are a large dependency \ No newline at end of file diff --git a/vba/pricelist.frm b/vba/pricelist.frm new file mode 100644 index 0000000..b6520ec --- /dev/null +++ b/vba/pricelist.frm @@ -0,0 +1,196 @@ +VERSION 5.00 +Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} pricelist + Caption = "Price List Name" + ClientHeight = 7995 + ClientLeft = 120 + ClientTop = 465 + ClientWidth = 11865 + OleObjectBlob = "pricelist.frx":0000 + StartUpPosition = 1 'CenterOwner +End +Attribute VB_Name = "pricelist" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False + +Public proceed As Boolean +Private pl() As String +Private plv() As Variant +Private plfv() As Variant + + +Private Sub bCANCEL_Click() + proceed = False + Me.Hide +End Sub + +Private Sub bOK_Click() + + If tbPATH = "" Then + MsgBox ("no directory specified") + Exit Sub + End If + + proceed = True + Me.Hide +End Sub + + +Private Sub bPICK_Click() + + '--------Open file------------- + Set fd = Application.FileDialog(msoFileDialogFolderPicker) + fd.Show + + tbPATH.Text = fd.SelectedItems(1) + + +End Sub + + +Private Sub cbInactive_Click() + +End Sub + +Private Sub cbLIST_Change() + + Dim plc() As String + plc = pl + Call FL.x.TBLp_FilterSingle(plc, 0, cbLIST.value, True) + If UBound(plc, 2) = 0 Then Exit Sub + Me.tbD1 = plc(1, 1) + Me.tbD2 = plc(2, 1) + Me.tbD3 = plc(3, 1) + +End Sub + +Private Sub lbLIST_Click() + + Dim i As Long + + For i = 1 To lbLIST.ListCount + If lbLIST.Selected(i) Then + cbLIST.value = lbLIST.list(i, 0) + Exit Sub + End If + Next i + + Me.cbHDR.value = "3 - Update" + +End Sub + +Private Sub UserForm_Initialize() + + + proceed = False + Dim x() As Variant + Dim i As Long + ReDim x(3) + + x(1) = "1 - New" + x(2) = "2 - Replace" + x(3) = "3 - Update" + + Dim dtl() As Variant + ReDim dtl(3) + dtl(1) = "1 - Add" + dtl(2) = "2 - Update" + dtl(3) = "3 - Delete" + + + cbHDR.list = x + cbDTL.list = dtl + +' If login.tbP = "" Then +' login.Show +' If Not login.proceed Then Exit Sub +' If Not FL.x.ADOp_OpenCon(0, ISeries, "S7830956", False, "PTROWBRIDG", "password") Then +' MsgBox (FL.x.ADOo_errstring) +' Exit Sub +' End If +' End If + + If Not FL.x.ADOp_OpenCon(1, ISeries, "S7830956", False, "PTROWBRIDG", "password") Then + MsgBox (FL.x.ADOo_errstring) + Exit Sub + End If + + pl = FL.x.ADOp_SelectS(1, "SELECT plcode, d1,d2,d3 FROM RLARP.PLM p ORDER BY plcode", True, 1000, True) + Call FL.x.ADOp_CloseCon(1) + ReDim plv(1 To UBound(pl, 2)) + For i = 1 To UBound(pl, 2) + plv(i) = pl(0, i) + Next i + + plfv = FL.x.TBLp_StringToVar(FL.x.TBLp_Transpose(pl)) + + + + cbLIST.list = plv + lbLIST.list = plfv + + 'lbHEAD.ColumnCount = lbHist.ColumnCount + 'lbHEAD.ColumnWidths = lbHist.ColumnWidths + + Call FL.x.frmListBoxHeader(lbHEAD, lbLIST, "plcode", "descr1", "descr2", "descr3") + + +End Sub + +Private Sub UserForm_Terminate() + proceed = False +End Sub + +Sub load_lists() + + Dim x() As Variant + Dim i As Long + ReDim x(3) + + x(1) = "1 - New" + x(2) = "2 - Replace" + x(3) = "3 - Update" + + Dim dtl() As Variant + ReDim dtl(3) + dtl(1) = "1 - Add" + dtl(2) = "2 - Update" + dtl(3) = "3 - Delete" + + + cbHDR.list = x + cbDTL.list = dtl + +' If login.tbP = "" Then +' login.Show +' If Not login.proceed Then Exit Sub +' If Not FL.x.ADOp_OpenCon(0, ISeries, "S7830956", False, "PTROWBRIDG", "") Then +' MsgBox (FL.x.ADOo_errstring) +' Exit Sub +' End If +' End If + + If Not FL.x.ADOp_OpenCon(1, ISeries, "S7830956", False, "PTROWBRIDG", "") Then + MsgBox (FL.x.ADOo_errstring) + Exit Sub + End If + + pl = FL.x.ADOp_SelectS(1, "SELECT plcode, d1, d2, d3 FROM RLARP.PLM p ORDER BY plcode", True, 1000, True) + Call FL.x.ADOp_CloseCon(1) + ReDim plv(1 To UBound(pl, 2)) + For i = 1 To UBound(pl, 2) + plv(i) = pl(0, i) + Next i + + plfv = FL.x.TBLp_StringToVar(FL.x.TBLp_Transpose(pl)) + + cbLIST.list = plv + lbLIST.list = plfv + + 'lbHEAD.ColumnCount = lbHist.ColumnCount + 'lbHEAD.ColumnWidths = lbHist.ColumnWidths + + Call FL.x.frmListBoxHeader(lbHEAD, lbLIST, "plcode", "d1", "d2", "d3") +End Sub + diff --git a/vba/pricelist.frx b/vba/pricelist.frx new file mode 100644 index 0000000000000000000000000000000000000000..1e8921c8bd9922391654f32cc60bc067be855b52 GIT binary patch literal 4632 zcmeHKOKcle6umP}(xge-{7KpXlQa~!4QUdme548`u~Tef5;uup!@~A>s=9SN#dfLy zLd*iTd=^OE6o~~Y>H-NC2&qy98xUQzNK~v^38>hyK>T*pob$#Lk4oiyAPZ1lbml$3 zxpRN--urIiQ;j0+vN~c%L|*F``TBa>ckg|)_xsfsmBo`1kUQljY4E+!uqM=K716Qa z?>psk+1(Vua(n!TJn$!U<@phHIK+B@XTAgA-uC!^dthE{{FTIzX~|-x7^fSWtrHz)lBn^@PO3VHH5ub0J_ zN(q7O|7<|M#u`X=>y=MG#hGXrnuMXllAM(}Ny}+>a|6%zP1t_`{PPtV)V&9w{&(j; zZVYJxcvQ_m3$P2=4eSAM1xOpfYo!C|1iFB3;68x$qZjjDU?0#2+z&heJO~&-KQI97 z2L^$M0DkvyWu{NJ$JTj3>Vgt&X>H-T)J-skMIOUiUJ?2H1kO_Z;09u3{&w@*Z(eJ= za2vTj^XUo3&Rbe!N|T1g)G2!@BW!0ZBY4y>Po)Yevt$*D#!_nKAaq2aT_kV4M~-45^Y<~c8S#`5 zy;G2s4!8G3ouOp};LFsY<~Kp52jbR=SVgmtJzL7!d1KTFhDMYc2e(MJo)rDwvd6Yu zHhpq$*`W=~?o<9ly>O2BUU(Lj?JLx|IR*rLzl^DRUIE{E^{8+8E}Y7nR!-LO z9U^s8=RBxnp>8?H?Oetx7$w_SNS(7V54^OpzW8!&MNM=PS@VqHGLj20pth~lc|xAj zK6Bs->1}j|P)8lqPlvS^VeKHiogYwO8LuNqs#xC4Eh87E3kAD?+{jzSkm!9XN9ivy zWa97fe@u>7WYpr1{1cD=tet;kp=6t9tjtR7Jn4~1t=_?>Dz^ffE}uZi+WA%WyD!ft zO=g)a$WI8I58!}*Uv>cb<;tdSBUUMu%^9(hwNx}J(l;x6?Yg2vc8?_cH3ybSK<6oo zgc2gZ@M5f4k2)o(dEbeQ%I-8w+ps($>} zg!G7PFA|1qHYD^3 zjdHwC9cecmese z2W=e7j64tQQnX0^O74^Prt-IIJLPwRj<)ZXUhs`Z<{_VS-yFuK&!#T?@@(4U+4QKM zB<*44^D0lah~(L-ct#fE6`p@6+pBTLHqztS=J7;JLY}k3cvPK03CmJj+f+7oDEOVexzj(OV!zY0E6B=3J2t^Eo^! MzdiBs3$+#d3rUgKPXGV_ literal 0 HcmV?d00001