Compare commits

...

6 Commits

4 changed files with 171 additions and 14 deletions

View File

@ -35,7 +35,7 @@
<x>10</x> <x>10</x>
<y>0</y> <y>0</y>
<width>401</width> <width>401</width>
<height>171</height> <height>176</height>
</rect> </rect>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
@ -53,6 +53,11 @@
</property> </property>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="value_lab"> <widget class="QLabel" name="value_lab">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>Pension value</string> <string>Pension value</string>
</property> </property>
@ -60,6 +65,11 @@
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QDoubleSpinBox" name="value_input"> <widget class="QDoubleSpinBox" name="value_input">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="frame"> <property name="frame">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -82,6 +92,11 @@
</item> </item>
<item row="1" column="0" colspan="2"> <item row="1" column="0" colspan="2">
<widget class="QLabel" name="mix_lab"> <widget class="QLabel" name="mix_lab">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>Investment mix (funds 50% / shares 50%)</string> <string>Investment mix (funds 50% / shares 50%)</string>
</property> </property>
@ -108,6 +123,11 @@
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="share_trades_lab"> <widget class="QLabel" name="share_trades_lab">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>Annual share trades</string> <string>Annual share trades</string>
</property> </property>
@ -115,6 +135,11 @@
</item> </item>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="fund_trades_lab"> <widget class="QLabel" name="fund_trades_lab">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>Annual fund trades</string> <string>Annual fund trades</string>
</property> </property>
@ -122,6 +147,11 @@
</item> </item>
<item row="4" column="1"> <item row="4" column="1">
<widget class="QComboBox" name="fund_trades_combo"> <widget class="QComboBox" name="fund_trades_combo">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -132,6 +162,11 @@
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>Calculate</string> <string>Calculate</string>
</property> </property>
@ -139,6 +174,11 @@
</item> </item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QComboBox" name="share_trades_combo"> <widget class="QComboBox" name="share_trades_combo">
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -151,6 +191,11 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
</widget> </widget>
<widget class="QMenuBar" name="menuBar"> <widget class="QMenuBar" name="menuBar">
<property name="geometry"> <property name="geometry">
@ -161,7 +206,17 @@
<height>33</height> <height>33</height>
</rect> </rect>
</property> </property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<widget class="QMenu" name="menuPlatforms"> <widget class="QMenu" name="menuPlatforms">
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="title"> <property name="title">
<string>File</string> <string>File</string>
</property> </property>
@ -173,6 +228,11 @@
<property name="text"> <property name="text">
<string>Edit Platforms</string> <string>Edit Platforms</string>
</property> </property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
</action> </action>
</widget> </widget>
<tabstops> <tabstops>

View File

@ -34,6 +34,11 @@
<height>250</height> <height>250</height>
</rect> </rect>
</property> </property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
</widget> </widget>
<widget class="QPushButton" name="res_ok_but"> <widget class="QPushButton" name="res_ok_but">
<property name="geometry"> <property name="geometry">
@ -44,6 +49,11 @@
<height>24</height> <height>24</height>
</rect> </rect>
</property> </property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>OK</string> <string>OK</string>
</property> </property>
@ -57,6 +67,11 @@
<height>24</height> <height>24</height>
</rect> </rect>
</property> </property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>Save</string> <string>Save</string>
</property> </property>

View File

@ -368,7 +368,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>11</x> <x>11</x>
<y>314</y> <y>309</y>
<width>611</width> <width>611</width>
<height>31</height> <height>31</height>
</rect> </rect>
@ -445,7 +445,10 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QPushButton" name="new_row_but"> <widget class="QPushButton" name="add_row_but">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>532</x> <x>532</x>
@ -464,6 +467,9 @@
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="del_row_but"> <widget class="QPushButton" name="del_row_but">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>440</x> <x>440</x>
@ -481,6 +487,24 @@
<string>Remove row</string> <string>Remove row</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="val_above_lab">
<property name="geometry">
<rect>
<x>6</x>
<y>479</y>
<width>421</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>on the value above £ there is no charge</string>
</property>
</widget>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>
@ -512,7 +536,7 @@
<tabstop>first_tier_box</tabstop> <tabstop>first_tier_box</tabstop>
<tabstop>first_tier_fee_box</tabstop> <tabstop>first_tier_fee_box</tabstop>
<tabstop>del_row_but</tabstop> <tabstop>del_row_but</tabstop>
<tabstop>new_row_but</tabstop> <tabstop>add_row_but</tabstop>
<tabstop>save_but</tabstop> <tabstop>save_but</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>

View File

@ -76,9 +76,13 @@ class PlatformEdit(QWidget):
for check_box in self.optional_check_boxes: for check_box in self.optional_check_boxes:
check_box.checkStateChanged.connect(self.check_valid) check_box.checkStateChanged.connect(self.check_valid)
self.first_tier_box.valueChanged.connect(self.check_valid)
self.first_tier_fee_box.valueChanged.connect(self.check_valid)
self.first_tier_box.valueChanged.connect(self.update_tier_labels)
# NOTE: Signal defined in UI file to close window when save button clicked # NOTE: Signal defined in UI file to close window when save button clicked
self.save_but.clicked.connect(self.init_variables) self.save_but.clicked.connect(self.init_variables)
self.new_row_but.clicked.connect(self.add_row) self.add_row_but.clicked.connect(self.add_row)
self.del_row_but.clicked.connect(self.remove_row) self.del_row_but.clicked.connect(self.remove_row)
# Set validators # Set validators
@ -105,6 +109,10 @@ class PlatformEdit(QWidget):
# If debugging, save time by hardcoding # If debugging, save time by hardcoding
if self.autofill: if self.autofill:
self.plat_name = "AJBell" self.plat_name = "AJBell"
self.fund_plat_fee = [
[0, 250000, 1000000, 2000000],
[0, 0.25, 0.1, 0.05]
]
self.fund_deal_fee = 1.50 self.fund_deal_fee = 1.50
self.share_plat_fee = 0.0025 self.share_plat_fee = 0.0025
self.share_plat_max_fee = 3.50 self.share_plat_max_fee = 3.50
@ -134,6 +142,7 @@ class PlatformEdit(QWidget):
# It's also called when any field emits a textChanged() or valueChanged() signal # It's also called when any field emits a textChanged() or valueChanged() signal
def check_valid(self): def check_valid(self):
valid = True valid = True
tiers_valid = True
# Check all required fields have a non-zero value # Check all required fields have a non-zero value
for field in self.required_fields: for field in self.required_fields:
@ -163,15 +172,47 @@ class PlatformEdit(QWidget):
input_box_item.setEnabled(False) input_box_item.setEnabled(False)
self.check_boxes_ticked[i] = False self.check_boxes_ticked[i] = False
if valid: if self.first_tier_fee_box.value() == 0:
tiers_valid = False
if self.fund_fee_rows > 1:
if self.widgets_list_list[0][1].value() <= self.first_tier_box.value():
tiers_valid = False
if self.widgets_list_list[0][3].value() == 0:
tiers_valid = False
for i in range(len(self.widgets_list_list) - 1, 0, -1):
if self.widgets_list_list[i][1].value() <= self.widgets_list_list[i-1][1].value():
tiers_valid = False
if self.widgets_list_list[i][3].value() == 0:
tiers_valid = False
if tiers_valid and self.fund_fee_rows < 6:
self.add_row_but.setEnabled(True)
else:
self.add_row_but.setEnabled(False)
if valid and tiers_valid:
self.save_but.setEnabled(True) self.save_but.setEnabled(True)
else: else:
self.save_but.setEnabled(False) self.save_but.setEnabled(False)
def add_row(self): def update_tier_labels(self):
if self.fund_fee_rows > 5: if self.fund_fee_rows > 1:
return -1 prev_value = self.first_tier_box.value()
self.widgets_list_list[0][0].setText(f"between £{int(prev_value)} and")
for i in range(len(self.widgets_list_list) - 1, 0, -1):
prev_value = self.widgets_list_list[i-1][1].value()
self.widgets_list_list[i][0].setText(f"between £{int(prev_value)} and")
if self.fund_fee_rows > 1:
max_band = self.widgets_list_list[self.fund_fee_rows - 2][1].value()
else:
max_band = self.first_tier_box.value()
self.val_above_lab.setText(f"on the value above £{int(max_band)} there is no charge")
def add_row(self):
widgets = [] widgets = []
font = QFont() font = QFont()
font.setPointSize(11) font.setPointSize(11)
@ -184,6 +225,8 @@ class PlatformEdit(QWidget):
widgets[1].setMaximum(9999999) widgets[1].setMaximum(9999999)
widgets[1].setButtonSymbols(FastEditQDoubleSpinBox.ButtonSymbols.NoButtons) widgets[1].setButtonSymbols(FastEditQDoubleSpinBox.ButtonSymbols.NoButtons)
widgets[1].setFont(font) widgets[1].setFont(font)
widgets[1].valueChanged.connect(self.check_valid)
widgets[1].valueChanged.connect(self.update_tier_labels)
widgets.append(QLabel(self.gridLayoutWidget_2)) widgets.append(QLabel(self.gridLayoutWidget_2))
widgets[2].setText(f"the fee is") widgets[2].setText(f"the fee is")
@ -194,9 +237,10 @@ class PlatformEdit(QWidget):
widgets[3].setMaximum(100) widgets[3].setMaximum(100)
widgets[3].setButtonSymbols(FastEditQDoubleSpinBox.ButtonSymbols.NoButtons) widgets[3].setButtonSymbols(FastEditQDoubleSpinBox.ButtonSymbols.NoButtons)
widgets[3].setFont(font) widgets[3].setFont(font)
widgets[3].valueChanged.connect(self.check_valid)
# TODO: why 28.5? # TODO: why 28.5?
self.gridLayoutWidget_2.setGeometry(11, 314, 611, int(round(28.5 * (self.fund_fee_rows + 1), 0))) self.gridLayoutWidget_2.setGeometry(11, 309, 611, int(round(28.5 * (self.fund_fee_rows + 1), 0)))
for i in range(len(widgets)): for i in range(len(widgets)):
self.gridLayout_2.addWidget(widgets[i], self.fund_fee_rows, i, 1, 1) self.gridLayout_2.addWidget(widgets[i], self.fund_fee_rows, i, 1, 1)
@ -213,18 +257,32 @@ class PlatformEdit(QWidget):
cur_label_item = self.gridLayout_2.itemAtPosition(cur_label_pos[0], cur_label_pos[1]).widget() cur_label_item = self.gridLayout_2.itemAtPosition(cur_label_pos[0], cur_label_pos[1]).widget()
cur_label_item.setText(f"between £{int(prev_box_item.value())} and") cur_label_item.setText(f"between £{int(prev_box_item.value())} and")
if self.fund_fee_rows > 1:
self.del_row_but.setEnabled(True)
if self.fund_fee_rows > 5:
self.add_row_but.setEnabled(False)
self.check_valid()
# TODO: Tab order # TODO: Tab order
def remove_row(self): def remove_row(self):
if not self.fund_fee_rows > 1:
return -1
for widget in self.widgets_list_list[self.fund_fee_rows - 2]: for widget in self.widgets_list_list[self.fund_fee_rows - 2]:
self.gridLayout_2.removeWidget(widget) self.gridLayout_2.removeWidget(widget)
widget.hide() widget.hide()
self.widgets_list_list.pop() self.widgets_list_list.pop()
self.fund_fee_rows -= 1 self.fund_fee_rows -= 1
self.gridLayoutWidget_2.setGeometry(11, 314, 611, int(round(28.5 * self.fund_fee_rows, 0))) self.gridLayoutWidget_2.setGeometry(11, 309, 611, int(round(28.5 * self.fund_fee_rows, 0)))
if self.fund_fee_rows < 2:
self.del_row_but.setEnabled(False)
if self.fund_fee_rows < 6:
self.add_row_but.setEnabled(True)
self.check_valid()
self.update_tier_labels()
# Getter functions (is this necessary? maybe directly reading class vars would be best...) # Getter functions (is this necessary? maybe directly reading class vars would be best...)
def get_optional_boxes(self): def get_optional_boxes(self):