顧客管理ソフトの作成 – 第6回

はじめに

今回はCRUD処理のひつのupdate、顧客情報を編集する機能を作成していく。

今回やること

  • 詳細画面の編集ボタンをクリックしたら、顧客情報を編集する。

顧客情報の編集

編集用の関数の作成

テキストフィールドがcontrolsに直接埋め込まれていると、編集できないので名前を付けることにする。

client_detail.py

def _create_main_content(self)
  """メイン部分を作成"""
  self.txt_client_cd = ft.TextField(
    label="顧客CD", width=400, value=self.client.client_cd
  )
  self.txt_client_name = ft.TextField(
    label="顧客名", width=400, value=self.client.client_name
  )
  self.txt_client_name_phonetic = ft.TextField(
    label="ふりがな", width=400, value=self.client.client_name_phonetic
  )
  self.txt_client_name_alias = ft.TextField(
    label="別名", width=400, value=self.client.client_name_alias
  )
  self.txt_president = ft.TextField(
    label="代表者", width=400, value=self.client.president
  )
  self.txt_credit = ft.TextField(
    label="与信枠", width=400, value=self.client.credit
  )
  self.txt_credit_reg_date = ft.TextField(
    label="与信枠登録日", width=400, value=self.client.credit_reg_date
  )
 
  # 右側の列
  self.txt_postal_code = ft.TextField(
    label="郵便番号", width=400, value=self.client.postal_code
  )
  self.txt_address = ft.TextField(
    label="住所", width=400, value=self.client.address
  )
  self.txt_phone = ft.TextField(label="TEL", width=400, value=self.client.phone)
  self.txt_fax = ft.TextField(label="FAX", width=400, value=self.client.fax)
  self.txt_notes = ft.TextField(
    label="備考",
    width=400,
    multiline=True,
    min_lines=3,
    max_lines=5,
    value=self.client.notes,
  )

controlsの中のテキストフィールドを上記で付けた名前に置き換える。右側の列も同じように置き換える。

client_detail.py

def _create_main_content(self):
…
  # 左側の列
  ft.Column(
    controls=[
      self.txt_client_cd,
      self.txt_client_name,
      self.txt_client_name_phonetic,
      self.txt_client_name_alias,
      self.txt_president,
      self.txt_credit,
      self.txt_credit_reg_date,
    ]
  )

下記の関数を追加する。

client_detail.py

def _update_client(self, e):
        """顧客の情報を更新"""
        db = SessionLocal()
        try:
            client = db.query(Client).filter(Client.id == self.client_id).first()
            if not client:
                print([f"顧客が見つかりません (ID={self.client_id})"])
                return
            
            client.client_name = self.txt_client_name.value
            client.client_name_phonetic = self.txt_client_name_phonetic.value
            client.client_name_alias = self.txt_client_name_alias.value
            client.president = self.txt_president.value
            client.credit = self.txt_credit.value
            client.credit_reg_date = self.txt_credit_reg_date.value
            client.postal_code = self.txt_postal_code.value
            client.address = self.txt_address.value
            client.phone = self.txt_phone.value
            client.fax = self.txt_fax.value
            client.notes = self.txt_notes.value

            db.commit()

            # 保存後、最新情報を取得し直して画面を更新
            self._load_client()
            self.page.update()

        except Exception as ex:
            db.rollback()
            print([f"更新エラー:{str(ex)}"])
        finally:
            db.close()
            

この関数を保存ボタンのon_clickに設定。

client_detail.py

def _create_main_content(self):
…
  # on_click関数に設定
  ft.ElevatedButton(
    "保存",
    icon=ft.Icons.SAVE,
    on_click=self._update_client,
    style=ft.ButtonStyle(
      shape=ft.RoundedRectangleBorder(radius=5)
    ),
  ),

試しに顧客名を編集して保存ボタンをクリックする。有限会社に修正してみた。一覧に戻って再度詳細画面に移動してみて確認。変更が保存されていれば成功。