Skip to content

Commit 0bdd335

Browse files
committed
v4.0.44 - Purchase order add to components and freight price
1 parent 7971e98 commit 0bdd335

5 files changed

Lines changed: 187 additions & 132 deletions

File tree

ui/dialogs/purchase_order_dialog.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from ui.icons import Icons
3939
from ui.theme import theme_var
4040
from utils.colors import lighten_color
41+
from utils.inventory.category import Category
4142
from utils.inventory.component import Component
4243
from utils.inventory.order import Order, OrderDict
4344
from utils.inventory.sheet import Sheet
@@ -575,6 +576,9 @@ def load_ui(self):
575576
self.textEdit_notes.setText(self.purchase_order.meta_data.notes)
576577
self.textEdit_notes.textChanged.connect(self.meta_data_changed)
577578

579+
self.doubleSpinBox_freight_price.setValue(self.purchase_order.meta_data.freight_price)
580+
self.doubleSpinBox_freight_price.valueChanged.connect(self.meta_data_changed)
581+
578582
self.layout_components.addWidget(self.components_table)
579583
self.pushButto_add_component.clicked.connect(self.add_component)
580584
self.load_components_table()
@@ -606,6 +610,7 @@ def meta_data_changed(self):
606610
self.comboBox_shipping_address.setToolTip(selected_shipping_address.__str__())
607611
self.purchase_order.meta_data.purchase_order_number = int(self.doubleSpinBox_po_number.value())
608612
self.purchase_order.meta_data.notes = self.textEdit_notes.toPlainText()
613+
self.purchase_order.meta_data.freight_price = self.doubleSpinBox_freight_price.value()
609614
self.unsaved_changes = True
610615

611616
if self.comboBox_status.currentIndex() == Status.PURCHASE_ORDER.value:
@@ -676,10 +681,17 @@ def add_component_to_table(self, component: Component):
676681
history_button.setIcon(Icons.button_history_icon)
677682
history_button.setToolTip("Open the component history.")
678683

684+
tooltip_html = f"""
685+
<b>{component.part_name}</b><br>
686+
{component.part_number}<br>
687+
<img src="{component.image_path}" width="150"><br>
688+
<p>Component is present in:<br>{component.print_categories()}</p>
689+
"""
690+
679691
part_name_widget = QTableWidgetItem(part_name)
680-
part_name_widget.setToolTip(f'<img src="{component.image_path}" width="150">')
692+
part_name_widget.setToolTip(tooltip_html)
681693
part_number_widget = QTableWidgetItem(part_number)
682-
part_number_widget.setToolTip(f'<img src="{component.image_path}" width="150">')
694+
part_number_widget.setToolTip(tooltip_html)
683695
price_widget = QTableWidgetItem(f"${unit_price:,.2f}")
684696
price_widget.setToolTip(f"${converted_price:,.2f} {'CAD' if use_exchange_rate else 'USD'}")
685697
quantity_in_stock_widget = QTableWidgetItem(str(quantity_in_stock))
@@ -814,6 +826,20 @@ def apply_orders():
814826
apply_order.triggered.connect(apply_orders)
815827
menu.addAction(apply_order)
816828

829+
def add_component_to_inventory(category: Category):
830+
if selected_components := self.get_selected_components():
831+
for component in selected_components:
832+
component.add_to_category(category)
833+
self.purchase_order_manager.components_inventory.add_component(component, on_finished=self.load_components_table)
834+
835+
add_component_to_inventory_menu = QMenu("Add Component to Inventory", self)
836+
for category in self.purchase_order_manager.components_inventory.get_categories():
837+
action = QAction(category.name, self)
838+
action.triggered.connect(partial(add_component_to_inventory, category))
839+
add_component_to_inventory_menu.addAction(action)
840+
841+
menu.addMenu(add_component_to_inventory_menu)
842+
817843
self.components_table.customContextMenuRequested.connect(partial(self.open_group_menu, menu))
818844

819845
# * \/ SHEETS TABLE \/
@@ -1134,6 +1160,10 @@ def load_purchase_order_data(self, new_po: PurchaseOrder):
11341160
self.textEdit_notes.setText(new_po.meta_data.notes)
11351161
self.textEdit_notes.blockSignals(False)
11361162

1163+
self.doubleSpinBox_freight_price.blockSignals(True)
1164+
self.doubleSpinBox_freight_price.setValue(new_po.meta_data.freight_price)
1165+
self.doubleSpinBox_freight_price.blockSignals(False)
1166+
11371167
self.load_components_table()
11381168
self.load_sheets_table()
11391169
self.meta_data_changed()
@@ -1282,6 +1312,7 @@ def save(self, on_finished: Callable | None = None):
12821312

12831313
self.purchase_order.meta_data.order_date = self.dateEdit_expected_arrival.date().toString("yyyy-MM-dd")
12841314
self.purchase_order.meta_data.notes = self.textEdit_notes.toPlainText()
1315+
self.purchase_order.meta_data.freight_price = self.doubleSpinBox_freight_price.value()
12851316

12861317
self.purchase_order_manager.save_purchase_order(self.purchase_order, on_finished=on_finished)
12871318

ui/dialogs/purchase_order_dialog.ui

Lines changed: 92 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -46,81 +46,89 @@
4646
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
4747
<item>
4848
<layout class="QGridLayout" name="gridLayout">
49-
<item row="1" column="2">
50-
<widget class="QComboBox" name="comboBox_status"/>
51-
</item>
52-
<item row="4" column="0">
53-
<widget class="QLabel" name="label">
49+
<item row="0" column="0">
50+
<widget class="QLabel" name="label_2">
5451
<property name="text">
55-
<string>PO number:</string>
56-
</property>
57-
<property name="alignment">
58-
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
52+
<string>Vendor:</string>
5953
</property>
6054
<property name="buddy">
61-
<cstring>doubleSpinBox_po_number</cstring>
55+
<cstring>comboBox_vendor</cstring>
6256
</property>
6357
</widget>
6458
</item>
65-
<item row="0" column="0">
66-
<widget class="QLabel" name="label_2">
59+
<item row="3" column="2">
60+
<layout class="QHBoxLayout" name="horizontalLayout_7">
61+
<item>
62+
<widget class="QComboBox" name="comboBox_shipping_address"/>
63+
</item>
64+
<item>
65+
<widget class="QPushButton" name="pushButton_edit_shipping_address">
66+
<property name="maximumSize">
67+
<size>
68+
<width>32</width>
69+
<height>32</height>
70+
</size>
71+
</property>
72+
<property name="text">
73+
<string/>
74+
</property>
75+
<property name="flat">
76+
<bool>true</bool>
77+
</property>
78+
</widget>
79+
</item>
80+
</layout>
81+
</item>
82+
<item row="4" column="0">
83+
<widget class="QLabel" name="label">
6784
<property name="text">
68-
<string>Vendor:</string>
69-
</property>
70-
<property name="alignment">
71-
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
85+
<string>PO number:</string>
7286
</property>
7387
<property name="buddy">
74-
<cstring>comboBox_vendor</cstring>
88+
<cstring>doubleSpinBox_po_number</cstring>
7589
</property>
7690
</widget>
7791
</item>
92+
<item row="2" column="2">
93+
<widget class="QComboBox" name="comboBox_shipping_method"/>
94+
</item>
7895
<item row="3" column="0">
7996
<widget class="QLabel" name="label_3">
8097
<property name="text">
8198
<string>Shipping address:</string>
8299
</property>
83-
<property name="alignment">
84-
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
100+
<property name="buddy">
101+
<cstring>comboBox_shipping_address</cstring>
85102
</property>
86103
</widget>
87104
</item>
88-
<item row="4" column="2">
89-
<widget class="QDoubleSpinBox" name="doubleSpinBox_po_number">
90-
<property name="decimals">
91-
<number>0</number>
105+
<item row="1" column="2">
106+
<widget class="QComboBox" name="comboBox_status"/>
107+
</item>
108+
<item row="1" column="0">
109+
<widget class="QLabel" name="label_5">
110+
<property name="text">
111+
<string>Status:</string>
92112
</property>
93-
<property name="maximum">
94-
<double>99999999999999.000000000000000</double>
113+
<property name="buddy">
114+
<cstring>comboBox_status</cstring>
95115
</property>
96116
</widget>
97117
</item>
98-
<item row="2" column="2">
99-
<widget class="QComboBox" name="comboBox_shipping_method"/>
100-
</item>
101118
<item row="5" column="0">
102119
<widget class="QLabel" name="label_6">
103120
<property name="text">
104121
<string>Expected Arrival:</string>
105122
</property>
106-
<property name="alignment">
107-
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
108-
</property>
109123
<property name="buddy">
110124
<cstring>dateEdit_expected_arrival</cstring>
111125
</property>
112126
</widget>
113127
</item>
114-
<item row="1" column="0">
115-
<widget class="QLabel" name="label_5">
116-
<property name="text">
117-
<string>Status:</string>
118-
</property>
119-
<property name="alignment">
120-
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
121-
</property>
122-
<property name="buddy">
123-
<cstring>comboBox_status</cstring>
128+
<item row="5" column="2">
129+
<widget class="QDateEdit" name="dateEdit_expected_arrival">
130+
<property name="calendarPopup">
131+
<bool>true</bool>
124132
</property>
125133
</widget>
126134
</item>
@@ -160,50 +168,60 @@
160168
</item>
161169
</layout>
162170
</item>
163-
<item row="5" column="2">
164-
<widget class="QDateEdit" name="dateEdit_expected_arrival">
165-
<property name="calendarPopup">
166-
<bool>true</bool>
167-
</property>
168-
</widget>
169-
</item>
170171
<item row="2" column="0">
171172
<widget class="QLabel" name="label_8">
172173
<property name="text">
173174
<string>Shipping method:</string>
174175
</property>
175-
<property name="alignment">
176-
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
176+
<property name="buddy">
177+
<cstring>comboBox_shipping_method</cstring>
177178
</property>
178179
</widget>
179180
</item>
180-
<item row="3" column="2">
181-
<layout class="QHBoxLayout" name="horizontalLayout_7">
182-
<item>
183-
<widget class="QComboBox" name="comboBox_shipping_address"/>
184-
</item>
185-
<item>
186-
<widget class="QPushButton" name="pushButton_edit_shipping_address">
187-
<property name="maximumSize">
188-
<size>
189-
<width>32</width>
190-
<height>32</height>
191-
</size>
192-
</property>
193-
<property name="text">
194-
<string/>
195-
</property>
196-
<property name="flat">
197-
<bool>true</bool>
198-
</property>
199-
</widget>
200-
</item>
201-
</layout>
181+
<item row="4" column="2">
182+
<widget class="QDoubleSpinBox" name="doubleSpinBox_po_number">
183+
<property name="decimals">
184+
<number>0</number>
185+
</property>
186+
<property name="maximum">
187+
<double>99999999999999.000000000000000</double>
188+
</property>
189+
</widget>
190+
</item>
191+
<item row="6" column="0">
192+
<widget class="QLabel" name="label_4">
193+
<property name="text">
194+
<string>Freight price:</string>
195+
</property>
196+
<property name="buddy">
197+
<cstring>doubleSpinBox_freight_price</cstring>
198+
</property>
199+
</widget>
200+
</item>
201+
<item row="6" column="2">
202+
<widget class="QDoubleSpinBox" name="doubleSpinBox_freight_price">
203+
<property name="toolTip">
204+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Default is $0.00.&lt;br/&gt;&lt;br/&gt;If set to $0.00, then it will not show on the printouts.&lt;/p&gt;&lt;p&gt;Set to anything above $0.00, then it will show on the printouts.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
205+
</property>
206+
<property name="prefix">
207+
<string>$</string>
208+
</property>
209+
<property name="maximum">
210+
<double>99999999999.000000000000000</double>
211+
</property>
212+
</widget>
202213
</item>
203214
</layout>
204215
</item>
205216
<item>
206217
<layout class="QGridLayout" name="gridLayout_4">
218+
<item row="1" column="0">
219+
<widget class="QTextEdit" name="textEdit_notes">
220+
<property name="placeholderText">
221+
<string>Notes...</string>
222+
</property>
223+
</widget>
224+
</item>
207225
<item row="0" column="0">
208226
<widget class="QLabel" name="label_7">
209227
<property name="text">
@@ -214,13 +232,6 @@
214232
</property>
215233
</widget>
216234
</item>
217-
<item row="1" column="0">
218-
<widget class="QTextEdit" name="textEdit_notes">
219-
<property name="placeholderText">
220-
<string>Notes...</string>
221-
</property>
222-
</widget>
223-
</item>
224235
</layout>
225236
</item>
226237
</layout>
@@ -235,8 +246,8 @@
235246
<rect>
236247
<x>0</x>
237248
<y>0</y>
238-
<width>912</width>
239-
<height>288</height>
249+
<width>908</width>
250+
<height>284</height>
240251
</rect>
241252
</property>
242253
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,1">

0 commit comments

Comments
 (0)