Added the transaction sorting in the accounting application.
This commit is contained in:
parent
9d49815462
commit
f970974e71
@ -6,9 +6,9 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: mia-js 1.0\n"
|
"Project-Id-Version: mia-js 1.0\n"
|
||||||
"Report-Msgid-Bugs-To: imacat <imacat@mail.imacat.idv.tw>\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-08-06 01:42+0800\n"
|
"POT-Creation-Date: 2020-08-06 23:47+0800\n"
|
||||||
"PO-Revision-Date: 2020-08-06 01:46+0800\n"
|
"PO-Revision-Date: 2020-08-06 23:48+0800\n"
|
||||||
"Last-Translator: imacat <imacat@mail.imacat.idv.tw>\n"
|
"Last-Translator: imacat <imacat@mail.imacat.idv.tw>\n"
|
||||||
"Language-Team: Traditional Chinese <imacat@mail.imacat.idv.tw>\n"
|
"Language-Team: Traditional Chinese <imacat@mail.imacat.idv.tw>\n"
|
||||||
"Language: Traditional Chinese\n"
|
"Language: Traditional Chinese\n"
|
||||||
@ -106,6 +106,7 @@ msgstr "記帳"
|
|||||||
#: accounting/templates/accounting/ledger-summary.html:45
|
#: accounting/templates/accounting/ledger-summary.html:45
|
||||||
#: accounting/templates/accounting/ledger.html:46
|
#: accounting/templates/accounting/ledger.html:46
|
||||||
#: accounting/templates/accounting/search.html:46
|
#: accounting/templates/accounting/search.html:46
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:85
|
||||||
#: accounting/templates/accounting/trial-balance.html:46
|
#: accounting/templates/accounting/trial-balance.html:46
|
||||||
msgid "Cash Expense"
|
msgid "Cash Expense"
|
||||||
msgstr "現金支出"
|
msgstr "現金支出"
|
||||||
@ -118,6 +119,7 @@ msgstr "現金支出"
|
|||||||
#: accounting/templates/accounting/ledger-summary.html:48
|
#: accounting/templates/accounting/ledger-summary.html:48
|
||||||
#: accounting/templates/accounting/ledger.html:49
|
#: accounting/templates/accounting/ledger.html:49
|
||||||
#: accounting/templates/accounting/search.html:49
|
#: accounting/templates/accounting/search.html:49
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:87
|
||||||
#: accounting/templates/accounting/trial-balance.html:49
|
#: accounting/templates/accounting/trial-balance.html:49
|
||||||
msgid "Cash Income"
|
msgid "Cash Income"
|
||||||
msgstr "現金收入"
|
msgstr "現金收入"
|
||||||
@ -130,6 +132,7 @@ msgstr "現金收入"
|
|||||||
#: accounting/templates/accounting/ledger-summary.html:51
|
#: accounting/templates/accounting/ledger-summary.html:51
|
||||||
#: accounting/templates/accounting/ledger.html:52
|
#: accounting/templates/accounting/ledger.html:52
|
||||||
#: accounting/templates/accounting/search.html:52
|
#: accounting/templates/accounting/search.html:52
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:89
|
||||||
#: accounting/templates/accounting/trial-balance.html:52
|
#: accounting/templates/accounting/trial-balance.html:52
|
||||||
msgid "Transfer"
|
msgid "Transfer"
|
||||||
msgstr "轉帳"
|
msgstr "轉帳"
|
||||||
@ -182,14 +185,14 @@ msgstr "查閱"
|
|||||||
#: accounting/templates/accounting/income-statement.html:122
|
#: accounting/templates/accounting/income-statement.html:122
|
||||||
#: accounting/templates/accounting/income-statement.html:177
|
#: accounting/templates/accounting/income-statement.html:177
|
||||||
#: accounting/templates/accounting/income-statement.html:187
|
#: accounting/templates/accounting/income-statement.html:187
|
||||||
#: accounting/templates/accounting/transactions/expense/form.html:82
|
#: accounting/templates/accounting/transactions/expense/form.html:80
|
||||||
#: accounting/templates/accounting/transactions/expense/view.html:145
|
#: accounting/templates/accounting/transactions/expense/view.html:145
|
||||||
#: accounting/templates/accounting/transactions/expense/view.html:163
|
#: accounting/templates/accounting/transactions/expense/view.html:163
|
||||||
#: accounting/templates/accounting/transactions/income/form.html:82
|
#: accounting/templates/accounting/transactions/income/form.html:80
|
||||||
#: accounting/templates/accounting/transactions/income/view.html:145
|
#: accounting/templates/accounting/transactions/income/view.html:145
|
||||||
#: accounting/templates/accounting/transactions/income/view.html:163
|
#: accounting/templates/accounting/transactions/income/view.html:163
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:84
|
#: accounting/templates/accounting/transactions/transfer/form.html:82
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:110
|
#: accounting/templates/accounting/transactions/transfer/form.html:108
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:141
|
#: accounting/templates/accounting/transactions/transfer/view.html:141
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:159
|
#: accounting/templates/accounting/transactions/transfer/view.html:159
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:188
|
#: accounting/templates/accounting/transactions/transfer/view.html:188
|
||||||
@ -312,6 +315,7 @@ msgstr "摘要"
|
|||||||
#: accounting/templates/accounting/ledger.html:149
|
#: accounting/templates/accounting/ledger.html:149
|
||||||
#: accounting/templates/accounting/search.html:93
|
#: accounting/templates/accounting/search.html:93
|
||||||
#: accounting/templates/accounting/search.html:128
|
#: accounting/templates/accounting/search.html:128
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:120
|
||||||
msgid "Unbalanced"
|
msgid "Unbalanced"
|
||||||
msgstr "借貸不平衡"
|
msgstr "借貸不平衡"
|
||||||
|
|
||||||
@ -446,6 +450,7 @@ msgid "Income Statement %(prep_period)s"
|
|||||||
msgstr "%(prep_period)s的損益表"
|
msgstr "%(prep_period)s的損益表"
|
||||||
|
|
||||||
#: accounting/templates/accounting/income-statement.html:80
|
#: accounting/templates/accounting/income-statement.html:80
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:66
|
||||||
msgid "Amount"
|
msgid "Amount"
|
||||||
msgstr "金額"
|
msgstr "金額"
|
||||||
|
|
||||||
@ -458,7 +463,7 @@ msgstr "%(prep_period)s的日記簿"
|
|||||||
#: accounting/templates/accounting/ledger-summary.html:81
|
#: accounting/templates/accounting/ledger-summary.html:81
|
||||||
#: accounting/templates/accounting/ledger.html:91
|
#: accounting/templates/accounting/ledger.html:91
|
||||||
#: accounting/templates/accounting/search.html:80
|
#: accounting/templates/accounting/search.html:80
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:67
|
#: accounting/templates/accounting/transactions/transfer/form.html:65
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:120
|
#: accounting/templates/accounting/transactions/transfer/view.html:120
|
||||||
#: accounting/templates/accounting/trial-balance.html:83
|
#: accounting/templates/accounting/trial-balance.html:83
|
||||||
msgid "Debit"
|
msgid "Debit"
|
||||||
@ -468,7 +473,7 @@ msgstr "借方"
|
|||||||
#: accounting/templates/accounting/ledger-summary.html:82
|
#: accounting/templates/accounting/ledger-summary.html:82
|
||||||
#: accounting/templates/accounting/ledger.html:92
|
#: accounting/templates/accounting/ledger.html:92
|
||||||
#: accounting/templates/accounting/search.html:81
|
#: accounting/templates/accounting/search.html:81
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:93
|
#: accounting/templates/accounting/transactions/transfer/form.html:91
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:167
|
#: accounting/templates/accounting/transactions/transfer/view.html:167
|
||||||
#: accounting/templates/accounting/trial-balance.html:84
|
#: accounting/templates/accounting/trial-balance.html:84
|
||||||
msgid "Credit"
|
msgid "Credit"
|
||||||
@ -476,6 +481,7 @@ msgstr "貸方"
|
|||||||
|
|
||||||
#: accounting/templates/accounting/journal.html:80
|
#: accounting/templates/accounting/journal.html:80
|
||||||
#: accounting/templates/accounting/search.html:82
|
#: accounting/templates/accounting/search.html:82
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:67
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr "註記"
|
msgstr "註記"
|
||||||
|
|
||||||
@ -513,33 +519,36 @@ msgstr "現金支出傳票"
|
|||||||
#: accounting/templates/accounting/transactions/expense/view.html:72
|
#: accounting/templates/accounting/transactions/expense/view.html:72
|
||||||
#: accounting/templates/accounting/transactions/income/form.html:44
|
#: accounting/templates/accounting/transactions/income/form.html:44
|
||||||
#: accounting/templates/accounting/transactions/income/view.html:72
|
#: accounting/templates/accounting/transactions/income/view.html:72
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:43
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:44
|
#: accounting/templates/accounting/transactions/transfer/form.html:44
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:72
|
#: accounting/templates/accounting/transactions/transfer/view.html:72
|
||||||
msgctxt "Navigation|"
|
msgctxt "Navigation|"
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
msgstr "回上頁"
|
msgstr "回上頁"
|
||||||
|
|
||||||
#: accounting/templates/accounting/transactions/expense/form.html:57
|
#: accounting/templates/accounting/transactions/expense/form.html:55
|
||||||
#: accounting/templates/accounting/transactions/expense/view.html:122
|
#: accounting/templates/accounting/transactions/expense/view.html:122
|
||||||
#: accounting/templates/accounting/transactions/income/form.html:57
|
#: accounting/templates/accounting/transactions/income/form.html:55
|
||||||
#: accounting/templates/accounting/transactions/income/view.html:122
|
#: accounting/templates/accounting/transactions/income/view.html:122
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:57
|
#: accounting/templates/accounting/transactions/sort.html:49
|
||||||
|
#: accounting/templates/accounting/transactions/transfer/form.html:55
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:114
|
#: accounting/templates/accounting/transactions/transfer/view.html:114
|
||||||
msgid "Date:"
|
msgid "Date:"
|
||||||
msgstr "日期:"
|
msgstr "日期:"
|
||||||
|
|
||||||
#: accounting/templates/accounting/transactions/expense/form.html:92
|
#: accounting/templates/accounting/transactions/expense/form.html:90
|
||||||
#: accounting/templates/accounting/transactions/expense/view.html:171
|
#: accounting/templates/accounting/transactions/expense/view.html:171
|
||||||
#: accounting/templates/accounting/transactions/income/form.html:92
|
#: accounting/templates/accounting/transactions/income/form.html:90
|
||||||
#: accounting/templates/accounting/transactions/income/view.html:171
|
#: accounting/templates/accounting/transactions/income/view.html:171
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:121
|
#: accounting/templates/accounting/transactions/transfer/form.html:119
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:217
|
#: accounting/templates/accounting/transactions/transfer/view.html:217
|
||||||
msgid "Notes:"
|
msgid "Notes:"
|
||||||
msgstr "註記:"
|
msgstr "註記:"
|
||||||
|
|
||||||
#: accounting/templates/accounting/transactions/expense/form.html:104
|
#: accounting/templates/accounting/transactions/expense/form.html:102
|
||||||
#: accounting/templates/accounting/transactions/income/form.html:104
|
#: accounting/templates/accounting/transactions/income/form.html:102
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:133
|
#: accounting/templates/accounting/transactions/sort.html:137
|
||||||
|
#: accounting/templates/accounting/transactions/transfer/form.html:131
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr "儲存"
|
msgstr "儲存"
|
||||||
|
|
||||||
@ -655,6 +664,19 @@ msgstr "現金收入傳票刪除確認"
|
|||||||
msgid "Do you really want to delete this cash income transaction?"
|
msgid "Do you really want to delete this cash income transaction?"
|
||||||
msgstr "您真的要刪掉這張現金收入傳票嗎?"
|
msgstr "您真的要刪掉這張現金收入傳票嗎?"
|
||||||
|
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:30
|
||||||
|
#, python-format
|
||||||
|
msgid "Reorder the Transactions in %(date)s"
|
||||||
|
msgstr "%(date)s的傳票排序"
|
||||||
|
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:64
|
||||||
|
msgid "Type"
|
||||||
|
msgstr "類型"
|
||||||
|
|
||||||
|
#: accounting/templates/accounting/transactions/sort.html:65
|
||||||
|
msgid "Content"
|
||||||
|
msgstr "內容"
|
||||||
|
|
||||||
#: accounting/templates/accounting/transactions/transfer/form.html:28
|
#: accounting/templates/accounting/transactions/transfer/form.html:28
|
||||||
#: accounting/templates/accounting/transactions/transfer/view.html:29
|
#: accounting/templates/accounting/transactions/transfer/view.html:29
|
||||||
msgid "Transfer Transaction"
|
msgid "Transfer Transaction"
|
||||||
@ -705,22 +727,38 @@ msgstr "稅前淨利"
|
|||||||
msgid "After Tax Income"
|
msgid "After Tax Income"
|
||||||
msgstr "稅後淨利"
|
msgstr "稅後淨利"
|
||||||
|
|
||||||
#: accounting/views.py:909
|
#: accounting/views.py:912
|
||||||
msgid "This transaction was not modified."
|
msgid "This transaction was not modified."
|
||||||
msgstr "會計傳票未異動。"
|
msgstr "會計傳票未異動。"
|
||||||
|
|
||||||
#: accounting/views.py:955
|
#: accounting/views.py:958
|
||||||
msgid "This transaction was saved successfully."
|
msgid "This transaction was saved successfully."
|
||||||
msgstr "會計傳票已存檔。"
|
msgstr "會計傳票已存檔。"
|
||||||
|
|
||||||
#: accounting/views.py:987
|
#: accounting/views.py:990
|
||||||
msgid "This transaction was deleted successfully."
|
msgid "This transaction was deleted successfully."
|
||||||
msgstr "會計傳票已刪除。"
|
msgstr "會計傳票已刪除。"
|
||||||
|
|
||||||
#: accounting/views.py:1014
|
#: accounting/views.py:1022
|
||||||
|
msgid "Invalid arguments."
|
||||||
|
msgstr "參數無效。"
|
||||||
|
|
||||||
|
#: accounting/views.py:1024
|
||||||
|
msgid "Invalid order."
|
||||||
|
msgstr "次序格式錯誤。"
|
||||||
|
|
||||||
|
#: accounting/views.py:1040
|
||||||
|
msgid "The transaction orders were not modified."
|
||||||
|
msgstr "會計傳票次序未異動。"
|
||||||
|
|
||||||
|
#: accounting/views.py:1048
|
||||||
|
msgid "The transaction orders were saved successfully."
|
||||||
|
msgstr "會計傳票次序已儲存。"
|
||||||
|
|
||||||
|
#: accounting/views.py:1075
|
||||||
msgid "---Accounts In Use---"
|
msgid "---Accounts In Use---"
|
||||||
msgstr "-----使用中科目-----"
|
msgstr "-----使用中科目-----"
|
||||||
|
|
||||||
#: accounting/views.py:1019
|
#: accounting/views.py:1080
|
||||||
msgid "---Accounts Not In Use---"
|
msgid "---Accounts Not In Use---"
|
||||||
msgstr "-----未使用科目-----"
|
msgstr "-----未使用科目-----"
|
||||||
|
@ -179,6 +179,16 @@ class Transaction(DirtyFieldsMixin, models.Model):
|
|||||||
return sum([x.amount for x in self.debit_records
|
return sum([x.amount for x in self.debit_records
|
||||||
if isinstance(x.amount, int)])
|
if isinstance(x.amount, int)])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def debit_summaries(self):
|
||||||
|
"""The summaries of the debit records.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list[str]: The summaries of the debit records.
|
||||||
|
"""
|
||||||
|
return [x.account.title if x.summary is None else x.summary
|
||||||
|
for x in self.debit_records]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def credit_records(self):
|
def credit_records(self):
|
||||||
"""The credit records of this transaction.
|
"""The credit records of this transaction.
|
||||||
@ -193,6 +203,25 @@ class Transaction(DirtyFieldsMixin, models.Model):
|
|||||||
return sum([x.amount for x in self.credit_records
|
return sum([x.amount for x in self.credit_records
|
||||||
if isinstance(x.amount, int)])
|
if isinstance(x.amount, int)])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def credit_summaries(self):
|
||||||
|
"""The summaries of the credit records.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list[str]: The summaries of the credit records.
|
||||||
|
"""
|
||||||
|
return [x.account.title if x.summary is None else x.summary
|
||||||
|
for x in self.credit_records]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def amount(self):
|
||||||
|
"""The amount of this transaction.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: The amount of this transaction.
|
||||||
|
"""
|
||||||
|
return self.debit_total()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_balanced(self):
|
def is_balanced(self):
|
||||||
"""Whether the sum of the amounts of the debit records is the
|
"""Whether the sum of the amounts of the debit records is the
|
||||||
|
43
accounting/static/accounting/css/transactions-sort.css
Normal file
43
accounting/static/accounting/css/transactions-sort.css
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/* The Mia Website
|
||||||
|
* sort.css: The style sheet to reorder the transaction
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Copyright (c) 2019-2020 imacat.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Author: imacat@mail.imacat.idv.tw (imacat)
|
||||||
|
* First written: 2019/10/12
|
||||||
|
*/
|
||||||
|
|
||||||
|
ul.txn-content-expense {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
}
|
||||||
|
ul.txn-content-expense li {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
.txn-content-income {
|
||||||
|
margin: 0 0 0 1em;
|
||||||
|
}
|
||||||
|
ul.txn-content-income {
|
||||||
|
margin: 0 0 0 1em;
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
}
|
||||||
|
ul.txn-content-income li {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
.amount {
|
||||||
|
text-align: right;
|
||||||
|
}
|
47
accounting/static/accounting/js/transaction-sort.js
Normal file
47
accounting/static/accounting/js/transaction-sort.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/* The Mia Website
|
||||||
|
* sort.js: The JavaScript to reorder the transactions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Copyright (c) 2019-2020 imacat.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Author: imacat@mail.imacat.idv.tw (imacat)
|
||||||
|
* First written: 2019/10/13
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Initializes the page JavaScript.
|
||||||
|
$(function () {
|
||||||
|
$("#transactions").sortable({
|
||||||
|
classes: {
|
||||||
|
"ui-sortable-helper": "table-active",
|
||||||
|
},
|
||||||
|
cursor: "move",
|
||||||
|
stop: function () {
|
||||||
|
resetTransactionOrders();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the order of the transactions according to their appearance.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function resetTransactionOrders() {
|
||||||
|
const sorted = $("#transactions").sortable("toArray");
|
||||||
|
for (let i = 0; i < sorted.length; i++) {
|
||||||
|
$("#" + sorted[i] + "-ord")[0].value = i + 1;
|
||||||
|
}
|
||||||
|
}
|
144
accounting/templates/accounting/transactions/sort.html
Normal file
144
accounting/templates/accounting/transactions/sort.html
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% comment %}
|
||||||
|
The Mia Accounting Application
|
||||||
|
sort.html: The template to sort transactions in a same day
|
||||||
|
|
||||||
|
Copyright (c) 2020 imacat.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
Author: imacat@mail.imacat.idv.tw (imacat)
|
||||||
|
First written: 2020/8/6
|
||||||
|
{% endcomment %}
|
||||||
|
{% load static %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load humanize %}
|
||||||
|
{% load mia_core %}
|
||||||
|
{% load accounting %}
|
||||||
|
|
||||||
|
{% block settings %}
|
||||||
|
{% blocktrans asvar title with date=date|smart_date %}Reorder the Transactions in {{ date }}{% endblocktrans %}
|
||||||
|
{% setvar "title" title %}
|
||||||
|
{% setvar "use_jqueryui" True %}
|
||||||
|
{% static "accounting/css/report.css" as file %}{% add_css file %}
|
||||||
|
{% static "accounting/css/transactions-sort.css" as file %}{% add_css file %}
|
||||||
|
{% static "accounting/js/transaction-sort.js" as file %}{% add_js file %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="btn-group btn-actions">
|
||||||
|
<a class="btn btn-primary" role="button" href="{% if "r" in request.GET %}{{ request.GET.r }}{% else %}{% url "accounting:home" %}{% endif %}">
|
||||||
|
<i class="fas fa-chevron-circle-left"></i>
|
||||||
|
{% trans "Back" context "Navigation|" as text %}{{ text|force_escape }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<label for="txn-date">{{ _("Date:") }}</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="txn-date" class="col-sm-10">
|
||||||
|
{{ date|smart_date }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if item_list|length > 1 %}
|
||||||
|
<form action="{% url_keep_return "accounting:transactions.sort" date %}" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<table class="table general-journal-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="actions" scope="col"></th>
|
||||||
|
<th scope="col">{{ _("Type") }}</th>
|
||||||
|
<th scope="col">{{ _("Content") }}</th>
|
||||||
|
<th class="amount" scope="col">{{ _("Amount") }}</th>
|
||||||
|
<th scope="col">{{ _("Notes") }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="transactions">
|
||||||
|
{% for item in item_list %}
|
||||||
|
<tr id="transaction-{{ item.pk }}" class="transaction {% if not item.is_balanced %} table-danger {% endif %}">
|
||||||
|
<td class="actions">
|
||||||
|
<div class="btn-group">
|
||||||
|
<button class="btn btn-outline-secondary" type="button">
|
||||||
|
<i class="fas fa-sort"></i>
|
||||||
|
</button>
|
||||||
|
<a class="btn btn-primary" role="button" href="{% url_with_return "accounting:transactions.show" item.type item %}">
|
||||||
|
<i class="fas fa-eye"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if item.is_cash_expense %}
|
||||||
|
{{ _("Cash Expense") }}
|
||||||
|
{% elif item.is_cash_income %}
|
||||||
|
{{ _("Cash Income") }}
|
||||||
|
{% else %}
|
||||||
|
{{ _("Transfer") }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input id="transaction-{{ item.pk }}-ord" type="hidden" name="transaction-{{ item.pk }}-ord" value="{{ forloop.counter }}" />
|
||||||
|
{% if item.is_cash_expense %}
|
||||||
|
<ul class="txn-content-expense">
|
||||||
|
{% for summary in item.debit_sumaries %}
|
||||||
|
<li>{{ summary }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% elif item.is_cash_income %}
|
||||||
|
<ul class="txn-content-income">
|
||||||
|
{% for summary in item.credit_summaries %}
|
||||||
|
<li>{{ summary }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<ul class="txn-content-expense">
|
||||||
|
{% for summary in item.debit_sumaries %}
|
||||||
|
<li>{{ summary }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<ul class="txn-content-income">
|
||||||
|
{% for summary in item.credit_summaries %}
|
||||||
|
<li>{{ summary }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
{% if not item.is_balanced %}
|
||||||
|
<span class="badge badge-danger badge-pill">
|
||||||
|
{{ _("Unbalanced") }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="amount">
|
||||||
|
{{ item.amount|accounting_amount }}
|
||||||
|
</td>
|
||||||
|
<td>{{ item.notes|default:"" }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<button class="btn btn-primary" type="submit">
|
||||||
|
<i class="fas fa-save"></i>
|
||||||
|
{{ _("Save") }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -87,9 +87,8 @@ urlpatterns = [
|
|||||||
views.txn_store, name="transactions.update"),
|
views.txn_store, name="transactions.update"),
|
||||||
path("transactions/<txn:txn>/delete",
|
path("transactions/<txn:txn>/delete",
|
||||||
views.txn_delete, name="transactions.delete"),
|
views.txn_delete, name="transactions.delete"),
|
||||||
# TODO: To be done
|
|
||||||
path("transactions/sort/<date:date>",
|
path("transactions/sort/<date:date>",
|
||||||
mia_core_views.todo, name="transactions.sort"),
|
views.txn_sort, name="transactions.sort"),
|
||||||
# TODO: To be done
|
# TODO: To be done
|
||||||
path("accounts",
|
path("accounts",
|
||||||
mia_core_views.todo, name="accounts"),
|
mia_core_views.todo, name="accounts"),
|
||||||
|
@ -25,7 +25,7 @@ from django.conf import settings
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Sum, Case, When, F, Q, Max, Count, BooleanField
|
from django.db.models import Sum, Case, When, F, Q, Max, Count, BooleanField
|
||||||
from django.db.models.functions import TruncMonth, Coalesce, Now
|
from django.db.models.functions import TruncMonth, Coalesce, Now
|
||||||
from django.http import JsonResponse, HttpResponseRedirect
|
from django.http import JsonResponse, HttpResponseRedirect, Http404
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@ -991,6 +991,64 @@ def txn_delete(request, txn):
|
|||||||
return success_redirect(request, url, message)
|
return success_redirect(request, url, message)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def txn_sort(request, date):
|
||||||
|
"""The view for the form to sort the transactions in a same day.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request (HttpRequest): The request.
|
||||||
|
date (datetime.date): The day.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
HttpResponse: The response.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
Http404: When ther are less than two transactions in this day.
|
||||||
|
"""
|
||||||
|
transactions = Transaction.objects.filter(date=date).order_by("ord")
|
||||||
|
if len(transactions) < 2:
|
||||||
|
raise Http404
|
||||||
|
if request.method != "POST":
|
||||||
|
return render(request, "accounting/transactions/sort.html", {
|
||||||
|
"item_list": transactions,
|
||||||
|
"date": date,
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
post = request.POST.dict()
|
||||||
|
errors = {}
|
||||||
|
for txn in transactions:
|
||||||
|
key = F"transaction-{txn.pk}-ord"
|
||||||
|
if key not in post:
|
||||||
|
errors[key] = gettext_noop("Invalid arguments.")
|
||||||
|
elif not re.match("^[1-9][0-9]*", post[key]):
|
||||||
|
errors[key] = gettext_noop("Invalid order.")
|
||||||
|
|
||||||
|
if len(errors) > 0:
|
||||||
|
return error_redirect(
|
||||||
|
request, reverse("accounting:transactions.sort"), post)
|
||||||
|
|
||||||
|
keys = [F"transaction-{x.pk}-ord" for x in transactions]
|
||||||
|
keys.sort(key=lambda x: int(post[x]))
|
||||||
|
for i in range(len(keys)):
|
||||||
|
post[keys[i]] = i + 1
|
||||||
|
for txn in transactions:
|
||||||
|
txn.ord = post[F"transaction-{txn.pk}-ord"]
|
||||||
|
modified = [x for x in transactions if x.is_dirty()]
|
||||||
|
|
||||||
|
if len(modified) == 0:
|
||||||
|
url = request.GET.get("r") or reverse("accounting:home")
|
||||||
|
message = gettext_noop("The transaction orders were not modified.")
|
||||||
|
return success_redirect(request, url, message)
|
||||||
|
|
||||||
|
with transaction.atomic():
|
||||||
|
for txn in modified:
|
||||||
|
txn.save()
|
||||||
|
url = request.GET.get("r") or reverse("accounting:home")
|
||||||
|
message = gettext_noop(
|
||||||
|
"The transaction orders were saved successfully.")
|
||||||
|
return success_redirect(request, url, message)
|
||||||
|
|
||||||
|
|
||||||
@require_GET
|
@require_GET
|
||||||
@login_required
|
@login_required
|
||||||
def account_options(request):
|
def account_options(request):
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: mia 1.0\n"
|
"Project-Id-Version: mia 1.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-08-06 01:42+0800\n"
|
"POT-Creation-Date: 2020-08-06 23:47+0800\n"
|
||||||
"PO-Revision-Date: 2020-08-06 01:46+0800\n"
|
"PO-Revision-Date: 2020-08-06 01:46+0800\n"
|
||||||
"Last-Translator: imacat <imacat@mail.imacat.idv.tw>\n"
|
"Last-Translator: imacat <imacat@mail.imacat.idv.tw>\n"
|
||||||
"Language-Team: Traditional Chinese <imacat@mail.imacat.idv.tw>\n"
|
"Language-Team: Traditional Chinese <imacat@mail.imacat.idv.tw>\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user