#前回までのあらすじ
ひとまず、クラスのメリットを享受したコーディングと問題に対する(ここでは稟議書に対する処理)アプローチはクリアでき、さらに有難いことにクラスについてのコーディングお作法もご指摘かなうことができた。だが、しかし経理部員の私としては稟議書担当係君にもっと仕事をしてもらいたいという情念があります。
##継続的な処理の話
前回確かに「新しく回ってきた稟議書」に対しての処理を具現化することはできました。しかし、「既に回ってきたかつ未だ使用開始していない固定資産」に対する処理がおざなりです。この「既に回ってきたかつ未だ使用開始していない固定資産」についてはまた新しく稟議書が回ってくることはありません。そのため、継続的にケアして毎月利用開始しているかどうか担当者にメールしなければならないのです。
##新しく発生する仕事
ここで新しく発生する仕事としては具体的に、前回利用開始に至らなかった案件に対して定期的にメールを送る仕事です。これをクラスの承継という方法で実現しようと試みます。前のコーディングは「新しく回ってきた稟議書」に対する処理だったしね。
##新しく書いたコード
import openpyxl
import datetime
class NewAssets():
def __init__(self,apdnum,apdmen,unitname,assetname,money):
self.apdnum=apdnum
self.apdmen=apdmen
self.unitname=unitname
self.assetname=assetname
self.money=money
#メールにPDFを添付する機能 担当者と担当部署から送り先メールアドレスを拾ってくる作業
def make_mail(self):
mail=("{}{}様お疲れ様です。経理部の固定資産担当です。稟議書No{}の{}についてですが、\
\n当月の状況について利用開始しているか教えてください。また請求書もあれば請求書の添付も\
\nよろしくお願いいたします。".format(self.unitname,self.apdmen,self.apdnum,self.assetname))
print(mail)
def insert_excel(self):
wb=openpyxl.load_workbook("../data/発注固定資産管理表.xlsx")
sh=wb.active
for dt_row in range(2,50):
if sh["A"+str(dt_row)].value!=None:
continue
else:
sh["A"+str(dt_row)].value=self.apdnum
sh["B"+str(dt_row)].value=self.unitname
sh["C"+str(dt_row)].value=self.apdmen
sh["D"+str(dt_row)].value=self.assetname
sh["E"+str(dt_row)].value=self.money
break
wb.save("../data/発注固定資産管理表_{}_johannesrome作成.xlsx".format(datetime.date.today()))
#上記前回書いた基幹部分にあたるコード
#以下新規コード
#New_AssetsクラスからサブクラスであるBuying_Assetsを作成し属性としてconsume(費消)を追加
class BuyingAssets(NewAssets):
def __init__(self,apdnum,apdmen,unitname,assetname,money,consume):
super().__init__(apdnum,apdmen,unitname,assetname,money)
self.consume=consume
def make_buying_mail(self):
if self.consume=="未":
print("{}の{}様お疲れ様です。経理部の固定資産担当です。先月未使用であった稟議書No{}の{}についてですが\
\n当月の状況について利用開始しているか教えてください。また請求書もあれば請求書の添付も\
\nよろしくお願いいたします。".format(self.unitname,self.apdmen,self.apdnum,self.assetname))
sh["G"+str(dt_row)].value="✔"
else:
None
#以下出力コード
wb=openpyxl.load_workbook("../data/発注固定資産管理表_johannesrome作成.xlsx")
sh=wb.active
for dt_row in range(2,50):
apdnum=sh["A"+str(dt_row)].value
unitname=sh["B"+str(dt_row)].value
apdmen=sh["C"+str(dt_row)].value
assetname=sh["D"+str(dt_row)].value
money=sh["E"+str(dt_row)].value
consume=sh["F"+str(dt_row)].value
m=Buying_Assets(apdnum,apdmen,unitname,assetname,money,consume)
m.make_buying_mail()
wb.save("../data/発注固定資産管理表_johannesrome作成.xlsx")
前回ご指摘のあったコーディング作法は修正済み
クラスの継承としてBuyin_Assetsをサブクラスとして作成し、属性としてconsumeを追加しただけ
そして、今回してほしいプログラムとして未使用資産のメール文作成と、作成したら✔をエクセルに入れる機能。
そして実行すると
チェックが入りました(∩´∀`)∩
上手く来ました( ◠‿◠ )
#総括
継承前のメソッドやデータを今回使うわけではなかったので設定テーマとアプローチとしては筋が悪いかなぁと思いました。もっと、個人的には継承前のメソッドもバリバリ活かすイメージがあったので。
ただ、コーディングをしてる最中わざわざdef make_buying_mail(self):のところでopenpyxlを開いて処理するコーディングだったところ途中クラスの属性を活かしたコーディングに変えられることに気づけたところがクラスのメリットかなぁと気づきを得られた次第です。クラスはどんどん使って早く慣れ親しみたいところです。
また、もっとこういうテーマだとクラスのメリットは享受できるよ~などいろいろご意見ありましたら、コメントお願いいたします!(`・ω・´)