Pythonを使用して単一の会社でレポートを作成する

一部の名前やイベントは架空のものであるという事実にもかかわらず、この話は実際の会社で起こりました。



GloryはN市の小さな会社の普通の開発者でした。同社は教育機関へのサービスの提供に従事していました。 サポートが必要なアプリケーションがいくつかあり、少しずつ開発されていました。 しかし、栄光の当局は、彼の努力と、彼が理由のために彼のパンを食べるという事実を信じませんでした。 さらに、情報技術の上司は実際には望んでいませんでしたが、従業員が何をしていて、営業部門の生産性の種類(私は1.5人で構成されていたに違いありません)を理解したかったのです。



当局は、セールスマネージャーをunningな目で見て、「今日、祖国のために何をしましたか」と尋ねました。 売り手は答えた:非常に多くの会議を開催し、非常に多くの人々にサービスを提供した。 リーダーシップは栄光に来て言った:従業員が真実を言っているかどうか、または彼らがギャグを運んでいるかどうか教えてください。 統計が必要です。



対話が行われました:



-ユーザーは、オンライン支払いを受け取るためのサードパーティサービスを通じてサービスの料金を支払いますか? だから?

-だから。

-会社の経営者はこのサービスにアクセスできますか?

-あります。

-だから、おそらく、そこに支払いのアンロードがあります。

-あります。

「しかし、追加のレポートが必要ですか?」

-必要です。

-なんで?

-それはより便利だからです



公平に言えば、追加のデータが必要であると言わなければなりません。



ためらうことなく、Gloryは、Excelでの後続の選択で単純なクエリを実行しました。



レポートは、1ページの1列のデータセットでした。 最初、彼らは日中に混oticとした方法で栄光に近づき、尋ねました。 しかし、この組織についての報告をお願いします。 スラバはためらうことなく、これに耐えるのに十分であり、要求された人々のニーズを満たす、美しく統一された何かをすべきであると判断しました。



興味のある人にニュースレターを送信できる小さなスクリプトが発生しました:



import openpyxl, pymysql, os from smtplib import SMTP_SSL from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders import datetime # Excel Settings today = datetime.date.today().strftime('%d.%m.%Y') excel_file = 'Oplata_polzovateley_' + today + '.xlsx' # SQL settings host = '' user = '' passwd = '' db = '' port=0000 headers = ['id', 'email', '', '', ' ', ' ', '', '- ', ' '] # SMTP Mail settings smtp_server = 'smtp.gmail.com' mail_login = '' mail_passwd = '' receiver = [''] cc = [''] def main(): # Fetch Data from SQL server conn = pymysql.connect(host=host, user=user, passwd=passwd, db=db, port=port) cursor = conn.cursor() cursor.execute('''select * from table''') data = cursor.fetchall() conn.close() # Write Data to Excel file wb = openpyxl.Workbook() contractors = {} for item in data: diff = item[6] - item[5] item = list(item) # print(item) if diff.days > 10: item.append('') else: item.append('') item = tuple(item) if item[0][:30] in contractors: contractors[item[0][:30]] += 1 else: wb.create_sheet(item[0][:30]) contractors[item[0][:30]] = 2 for i in range(1, len(headers) + 1): letter = openpyxl.utils.get_column_letter(i) wb[item[0][:30]][letter + '1'] = headers[i - 1] wb[item[0][:30]]['A' + str(contractors[item[0][:30]])] = contractors[item[0][:30]] - 1 for i in range(2, len(headers) + 1): letter = openpyxl.utils.get_column_letter(i) wb[item[0][:30]][letter + str(contractors[item[0][:30]])] = item[i] wb.save(excel_file) wb.remove(wb['Sheet']) wb.save(excel_file) # Compose attachment part = MIMEBase('application', "octet-stream") part.set_payload(open(excel_file, "rb").read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(excel_file)) # Compose message msg = MIMEMultipart() msg['From'] = mail_login msg['To'] = ', '.join(receiver) msg['Cc'] = ', '.join(cc) msg['Subject'] = excel_file msg.attach(part) # Send mail tosend = receiver + cc smtp = SMTP_SSL('smtp.gmail.com') smtp.connect(smtp_server) smtp.login(mail_login, mail_passwd) smtp.sendmail(mail_login, tosend, msg.as_string()) smtp.quit() # Wipe file os.remove(excel_file) if __name__ == '__main__': main()
      
      





もちろん、あまり栄光を考えていません。 しかし、彼らが言うように:「ああ、そうだろう。」



毎朝、Slavaは仕事に来て、スクリプトを実行し、関係者にメールを送りました。

次のステップは自動送信の設定でした。 これは次のように働きました:



docker build --tag =レポート。

docker run -it --rmレポート

そして、冠の中の言葉で:

0 8 * * * docker run --rm foo



毎日午前8時に手紙が出ました。 経営陣は、Slavaが毎日午前8時に正確に働きに来て、Excelでレポートを作成し、それを郵便で彼の手に送ったと考え始めました。 そして彼は土曜日と日曜日に、雪の中で、雨の中で、そして極夜にそれをしました。



Github



当分の間、すべては順調で、リーダーシップは耐えられましたが、長くは続きませんでした。 かつて、新しい注文が発表される会議がありました。 聞いて聞いて、聞いていないと言ってはいけません。 シムは、すべての従業員が毎日、より高いランキング、さらには上位に報告しなければならないと宣言しています。 まあ、一般的に、あなたは理解しています。



「毎日?」と栄光は尋ねました。

-毎日。 -技術部門の長に答えた。

-それともそうではない?

-それは必要です栄光、それは必要です。



Slavaには、この状況に関するいくつかの質問がありました。 当面の責任はソフトウェアを完成させることであり、そのレポートは次のようなもので構成される必要があります。

feat(モジュール)NoteLineCountのバグを修正しました...深刻ではありません...

upd(モジュール2)カーテンの後ろの男に注意を払わない

修正済み(モジュール3)そのままにしておくように言われましたが、OCDと呼ばれるものがあります。

*注:コミットするメッセージの名前はここから取得されます



Gloryは、それらに基づいてレポートを作成することを決定しました。 1週間が経過しました。 次のコンテンツについて新しい会話が行われました。



-したがって、毎日レポートを送信しますが、進行状況は表示されません。 たとえば、「フロントエンドで電話番号を入力するときにマスクが追加されました」。

-まあ、見て。 以前は、電話番号を入力して桁数を確認する必要があり、不便でした。 それで便利です

-ふむ いいね なるほど。 そして、これをどのように説明しますか:「カウンターパーティモジュールのコードリファクタリング。 検証のための機能は別の方法にあります。」

-なるほど。 そのようなものがあります-誰が、いつ、何をしたかを示すバージョン管理システム。 ここを見て。 これがコミットであり、変更されたコードです。 これが追加されたコード、削除されたコードです。

-いいね。 それではやってみましょう。 これらのコミットに基づいてレポートを作成すると、そこにどのように書いたかを収集して検証します。



最後に-これは何が起こったかです:



Github



スクリプトはリポジトリの変更を取得し、何が行われ、何が行われなかったかについての手紙を送りました。



以前、Slavaは、何もチェックしない人はコードの書き方を理解していないと報告して恥ずかしかった。 経営者は販売、購入、あらゆる種類の物事を理解し、お金を払うかもしれませんが、特定のコード行はあまり馴染みのない言語で表示され、コミットからコミットに切り替えるときに緑と赤の線がちらつくのを観察します。



はい、Slavaは責任者であり、作業は成功しましたが、最近ではコードがほとんど確定されなかったり、怠だったりしました。 とにかく、一般に、システムは失敗することなく機能し、さらに15層の抽象化を追加したくありませんでしたが、レポートは毎日送信する必要がありました。



新しいマヤコフスキーになり、はしごでギャグを書く以外に何もすることがありませんでした。 しかし、毎日新しいものを発明したくはありませんでした。 その結果、Vyacheslavは思いついた最初のソリューションの開発を始め、シンプルなコードであることが判明しました。そこで実行された作業がなく、変更をプッシュしなかったため、レポートがコンパイルされました。 次のようになりました。



Github



その後のコミットで偽のコードが形成されるように、それはまだ行われていません。 これを行う必要がありますか? 時間はわかります。



PS:栄光の物語はそこで終わりませんでした。 彼の運命に影響を与えたイベントがさらにいくつかありましたが、これはまったく別の話です。 人生からの同様の物語と、それらに基づいて作成された決定をコメントで読むことは興味深いです。 これらのコメントに基づいて、プロジェクトがさらに開発される可能性があります。



All Articles