2021-01-18 9:00 JST 〜 メンテナンスによるサービス全停止予定
  • R/O
  • SSH
  • HTTPS

aoiro: コミット


コミットメタ情報

リビジョン67 (tree)
日時2020-10-16 12:02:30
作者hirukawa_ryo

ログメッセージ

* aoiro 0.7.2
BalanceSheet 仕訳が存在しない場合 closingDate が null となり例外がスローされる問題を修正しました。(コンソール版では事前に仕訳件数のチェックがおこなわれるため発生しませんでした。)
BalanceSheet createOpeningJournalEntries メソッドの名前を createNextOpeningJournalEntries に変更しました。
次年度の開始仕訳.yml の作成ロジックをアトミックに変更しました。

変更サマリ

差分

--- aoiro/trunk/src/main/java/net/osdn/aoiro/cui/Main.java (revision 66)
+++ aoiro/trunk/src/main/java/net/osdn/aoiro/cui/Main.java (revision 67)
@@ -204,8 +204,8 @@
204204 System.out.println("");
205205 System.out.println("繰越処理を実行しています . . .");
206206
207- //開始仕訳
208- bs.createOpeningJournalEntries(outputDir.resolve("次年度の開始仕訳.yml"));
207+ //次年度の開始仕訳
208+ bs.createNextOpeningJournalEntries(outputDir.resolve("次年度の開始仕訳.yml"));
209209 System.out.println(" 次年度の開始仕訳.yml を出力しました。");
210210 }
211211
--- aoiro/trunk/src/main/java/net/osdn/aoiro/report/BalanceSheet.java (revision 66)
+++ aoiro/trunk/src/main/java/net/osdn/aoiro/report/BalanceSheet.java (revision 67)
@@ -9,6 +9,8 @@
99 import java.nio.charset.StandardCharsets;
1010 import java.nio.file.Files;
1111 import java.nio.file.Path;
12+import java.nio.file.StandardCopyOption;
13+import java.nio.file.StandardOpenOption;
1214 import java.text.NumberFormat;
1315 import java.time.LocalDate;
1416 import java.time.chrono.JapaneseChronology;
@@ -777,7 +779,7 @@
777779 * @return 次期開始仕訳のYAML文字列
778780 * @throws IOException
779781 */
780- public String createOpeningJournalEntries(Path path) throws IOException {
782+ public String createNextOpeningJournalEntries(Path path) throws IOException {
781783 List<Entry<AccountTitle, Amount>> debtors = new ArrayList<>();
782784 long debtorsTotal = 0;
783785 List<Entry<AccountTitle, Amount>> creditors = new ArrayList<>();
@@ -784,7 +786,10 @@
784786 long creditorsTotal = 0;
785787
786788 StringBuilder sb = new StringBuilder();
787- String nextOpeningDate = DateTimeFormatter.ISO_LOCAL_DATE.format(this.closingDate.plusDays(1));
789+ String nextOpeningDate = null;
790+ if(this.closingDate != null) {
791+ nextOpeningDate = DateTimeFormatter.ISO_LOCAL_DATE.format(this.closingDate.plusDays(1));
792+ }
788793
789794 if(isSoloProprietorship) {
790795 //個人事業主の場合は、事業主貸(資産)、事業主借(負債)、所得金額(資本)が次期の元入金に加算されます。
@@ -946,9 +951,25 @@
946951
947952 String s = sb.toString();
948953
949- if(path != null) {
950- try(Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
951- writer.write(s);
954+ if(path != null && Files.isDirectory(path.getParent())) {
955+ Path tmpFile = null;
956+ try {
957+ Path dir = path.getParent();
958+ // 会計年度フォルダーが存在する場合のみ次年度の開始仕訳を作成します。
959+ tmpFile = dir.resolve("次年度の開始仕訳.tmp");
960+ Files.writeString(tmpFile, s, StandardCharsets.UTF_8,
961+ StandardOpenOption.CREATE,
962+ StandardOpenOption.TRUNCATE_EXISTING,
963+ StandardOpenOption.WRITE,
964+ StandardOpenOption.SYNC);
965+
966+ Files.move(tmpFile, path,
967+ StandardCopyOption.REPLACE_EXISTING,
968+ StandardCopyOption.ATOMIC_MOVE);
969+ } finally {
970+ if(tmpFile != null) {
971+ try { Files.deleteIfExists(tmpFile); } catch(Exception ignore) {}
972+ }
952973 }
953974 }
954975
旧リポジトリブラウザで表示