mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-23 14:26:58 +00:00
New code for edit transaction, and some tests.
This commit is contained in:
@@ -30,7 +30,7 @@ use FireflyIII\Rules\IsBoolean;
|
||||
use FireflyIII\Rules\IsDateOrTime;
|
||||
use FireflyIII\Validation\TransactionValidation;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class TransactionUpdateRequest
|
||||
@@ -275,6 +275,7 @@ class TransactionUpdateRequest extends Request
|
||||
*/
|
||||
private function getTransactionData(): array
|
||||
{
|
||||
Log::debug('Now in getTransactionData()');
|
||||
$return = [];
|
||||
/**
|
||||
* @var int $index
|
||||
@@ -298,8 +299,10 @@ class TransactionUpdateRequest extends Request
|
||||
}
|
||||
|
||||
foreach ($this->dateFields as $fieldName) {
|
||||
Log::debug(sprintf('Now at date field %s', $fieldName));
|
||||
if (array_key_exists($fieldName, $transaction)) {
|
||||
$current[$fieldName] = $this->dateFromValue((string)$transaction[$fieldName]);
|
||||
Log::debug(sprintf('New value: "%s"', (string)$transaction[$fieldName]));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -36,6 +36,7 @@ class CreateController extends Controller
|
||||
{
|
||||
/**
|
||||
* CreateController constructor.
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -91,12 +92,4 @@ class CreateController extends Controller
|
||||
'optionalFields', 'preFilled', 'allowedOpposingTypes', 'accountToTypes')
|
||||
);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
echo '<pre>';
|
||||
print_r($request->all());
|
||||
exit;
|
||||
}
|
||||
|
||||
}
|
@@ -265,6 +265,7 @@ trait JournalServiceTrait
|
||||
return;
|
||||
}
|
||||
foreach ($tags as $string) {
|
||||
$string = (string)$string;
|
||||
if ('' !== $string) {
|
||||
$tag = $this->tagFactory->findOrCreate($string);
|
||||
if (null !== $tag) {
|
||||
|
@@ -598,7 +598,7 @@ class JournalUpdateService
|
||||
foreach ($this->metaDate as $field) {
|
||||
if ($this->hasFields([$field])) {
|
||||
try {
|
||||
$value = '' === $this->data[$field] ? null : new Carbon($this->data[$field]);
|
||||
$value = '' === (string)$this->data[$field] ? null : new Carbon($this->data[$field]);
|
||||
} catch (Exception $e) {
|
||||
Log::debug(sprintf('%s is not a valid date value: %s', $this->data[$field], $e->getMessage()));
|
||||
|
||||
|
456
public/v1/js/app.js
vendored
456
public/v1/js/app.js
vendored
@@ -52332,7 +52332,7 @@ exports = module.exports = __webpack_require__(0)(false);
|
||||
|
||||
|
||||
// module
|
||||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||||
|
||||
// exports
|
||||
|
||||
@@ -52483,9 +52483,13 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
}
|
||||
},
|
||||
selectedItem: function selectedItem(e) {
|
||||
console.log('selectedItem()');
|
||||
if (typeof this.name === 'undefined') {
|
||||
return;
|
||||
}
|
||||
if (typeof this.name === 'string') {
|
||||
console.log('Is a string.');
|
||||
}
|
||||
// emit the fact that the user selected a type of account
|
||||
// (influencing the destination)
|
||||
this.$emit('select:account', this.name);
|
||||
@@ -54888,7 +54892,7 @@ exports = module.exports = __webpack_require__(0)(false);
|
||||
|
||||
|
||||
// module
|
||||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||||
|
||||
// exports
|
||||
|
||||
@@ -55160,12 +55164,12 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
var destName = void 0;
|
||||
var date = void 0;
|
||||
|
||||
sourceId = this.transactions[index].source_account.id;
|
||||
sourceName = this.transactions[index].source_account.name;
|
||||
destId = this.transactions[index].destination_account.id;
|
||||
destName = this.transactions[index].destination_account.name;
|
||||
sourceId = row.source_account.id;
|
||||
sourceName = row.source_account.name;
|
||||
destId = row.destination_account.id;
|
||||
destName = row.destination_account.name;
|
||||
|
||||
date = this.transactions[index].date;
|
||||
date = row.date;
|
||||
if (index > 0) {
|
||||
date = this.transactions[0].date;
|
||||
}
|
||||
@@ -55180,13 +55184,13 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
sourceId = window.cashAccountId;
|
||||
}
|
||||
|
||||
// if index is over 0 and type is withdrawal or transfer, take source from key 0.
|
||||
// if index is over 0 and type is withdrawal or transfer, take source from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'withdrawal' || transactionType.toLowerCase() === 'transfer')) {
|
||||
sourceId = this.transactions[0].source_account.id;
|
||||
sourceName = this.transactions[0].source_account.name;
|
||||
}
|
||||
|
||||
// if index is over 0 and type is deposit or transfer, take destination from key 0.
|
||||
// if index is over 0 and type is deposit or transfer, take destination from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'deposit' || transactionType.toLowerCase() === 'transfer')) {
|
||||
destId = this.transactions[0].destination_account.id;
|
||||
destName = this.transactions[0].destination_account.name;
|
||||
@@ -55236,9 +55240,6 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
destination_name: destName,
|
||||
|
||||
category_name: row.category,
|
||||
//budget_id: row.budget,
|
||||
//piggy_bank_id: row.piggy_bank,
|
||||
|
||||
|
||||
interest_date: row.custom_fields.interest_date,
|
||||
book_date: row.custom_fields.book_date,
|
||||
@@ -55324,8 +55325,7 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
|
||||
console.log('Now incollectAttachmentData()');
|
||||
var groupId = response.data.data.id;
|
||||
//console.log(response.data.data.attributes.transactions);
|
||||
//
|
||||
|
||||
// array of all files to be uploaded:
|
||||
var toBeUploaded = [];
|
||||
|
||||
@@ -55360,7 +55360,6 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
(function (f, i, theParent) {
|
||||
var fileReader = new FileReader();
|
||||
fileReader.onloadend = function (evt) {
|
||||
|
||||
if (evt.target.readyState === FileReader.DONE) {
|
||||
// DONE == 2
|
||||
fileData.push({
|
||||
@@ -55372,20 +55371,6 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
theParent.uploadFiles(fileData, groupId);
|
||||
}
|
||||
}
|
||||
|
||||
// // turn into binary strings.
|
||||
// let chars = new Uint8Array(evt.target.result);
|
||||
// let CHUNK_SIZE = 0x8000;
|
||||
// let index = 0;
|
||||
// let length = chars.length;
|
||||
// let result = '';
|
||||
// let slice;
|
||||
// while (index < length) {
|
||||
// slice = chars.subarray(index, Math.min(index + CHUNK_SIZE, length));
|
||||
// result += String.fromCharCode.apply(null, slice);
|
||||
// index += CHUNK_SIZE;
|
||||
// }
|
||||
// console.log('Now reading file #' + key);
|
||||
};
|
||||
fileReader.readAsArrayBuffer(f.file);
|
||||
})(toBeUploaded[_key3], _key3, _this2);
|
||||
@@ -55603,29 +55588,6 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
this.transactionType = type;
|
||||
},
|
||||
|
||||
// convert to binary stuff
|
||||
arrayBufferToBinary: function arrayBufferToBinary(buffer) {
|
||||
return String.fromCharCode.apply(null, Array.prototype.slice.apply(new Uint8Array(buffer)));
|
||||
},
|
||||
|
||||
binaryToString: function binaryToString(binary) {
|
||||
var error = void 0;
|
||||
|
||||
try {
|
||||
return decodeURIComponent(escape(binary));
|
||||
} catch (_error) {
|
||||
error = _error;
|
||||
if (error instanceof URIError) {
|
||||
return binary;
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// end of convert to binary stuff
|
||||
|
||||
|
||||
deleteTransaction: function deleteTransaction(index, event) {
|
||||
event.preventDefault();
|
||||
for (var _key7 in this.transactions) {
|
||||
@@ -56415,7 +56377,7 @@ exports = module.exports = __webpack_require__(0)(false);
|
||||
|
||||
|
||||
// module
|
||||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||||
|
||||
// exports
|
||||
|
||||
@@ -56647,12 +56609,14 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
}
|
||||
return amount;
|
||||
},
|
||||
|
||||
selectedSourceAccount: function selectedSourceAccount(index, model) {
|
||||
if (typeof model === 'string') {
|
||||
// cant change types, only name.
|
||||
// also clear ID
|
||||
this.transactions[index].source_account.id = null;
|
||||
this.transactions[index].source_account.name = model;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
this.transactions[index].source_account = {
|
||||
id: model.id,
|
||||
name: model.name,
|
||||
@@ -56663,16 +56627,15 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
currency_decimal_places: model.currency_decimal_places,
|
||||
allowed_types: this.transactions[index].source_account.allowed_types
|
||||
};
|
||||
|
||||
// force types on destination selector.
|
||||
//this.transactions[index].destination_account.allowed_types = window.allowedOpposingTypes.source[model.type];
|
||||
}
|
||||
},
|
||||
selectedDestinationAccount: function selectedDestinationAccount(index, model) {
|
||||
if (typeof model === 'string') {
|
||||
// cant change types, only name.
|
||||
// also clear ID
|
||||
this.transactions[index].destination_account.id = null;
|
||||
this.transactions[index].destination_account.name = model;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
this.transactions[index].destination_account = {
|
||||
id: model.id,
|
||||
name: model.name,
|
||||
@@ -56683,13 +56646,8 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
currency_decimal_places: model.currency_decimal_places,
|
||||
allowed_types: this.transactions[index].destination_account.allowed_types
|
||||
};
|
||||
|
||||
// force types on destination selector.
|
||||
//this.transactions[index].source_account.allowed_types = window.allowedOpposingTypes.destination[model.type];
|
||||
}
|
||||
},
|
||||
clearSource: function clearSource(index) {
|
||||
console.log('clearSource(' + index + ')');
|
||||
// reset source account:
|
||||
this.transactions[index].source_account = {
|
||||
id: 0,
|
||||
@@ -56701,9 +56659,6 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
currency_decimal_places: 2,
|
||||
allowed_types: this.transactions[index].source_account.allowed_types
|
||||
};
|
||||
// reset destination allowed account types.
|
||||
// this.transactions[index].destination_account.allowed_types = [];
|
||||
|
||||
// if there is a destination model, reset the types of the source
|
||||
// by pretending we selected it again.
|
||||
if (this.transactions[index].destination_account) {
|
||||
@@ -56716,13 +56671,17 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
deleteTransaction: function deleteTransaction(index, event) {
|
||||
event.preventDefault();
|
||||
for (var key in this.transactions) {
|
||||
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {}
|
||||
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
// TODO empty iff?
|
||||
}
|
||||
}
|
||||
|
||||
this.transactions.splice(index, 1);
|
||||
|
||||
for (var _key in this.transactions) {
|
||||
if (this.transactions.hasOwnProperty(_key) && /^0$|^[1-9]\d*$/.test(_key) && _key <= 4294967294) {}
|
||||
if (this.transactions.hasOwnProperty(_key) && /^0$|^[1-9]\d*$/.test(_key) && _key <= 4294967294) {
|
||||
// TODO empty iff?
|
||||
}
|
||||
}
|
||||
},
|
||||
clearDestination: function clearDestination(index) {
|
||||
@@ -56763,17 +56722,28 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
|
||||
// fill in transactions array.
|
||||
axios.get(uri).then(function (response) {
|
||||
console.log(response.data.data);
|
||||
_this.group_title = response.data.data.attributes.group_title;
|
||||
var transactions = response.data.data.attributes.transactions.reverse();
|
||||
_this.processIncomingGroup(response.data.data);
|
||||
}).catch(function (error) {
|
||||
console.error('Some error.');
|
||||
});
|
||||
},
|
||||
processIncomingGroup: function processIncomingGroup(data) {
|
||||
console.log(data);
|
||||
this.group_title = data.attributes.group_title;
|
||||
var transactions = data.attributes.transactions.reverse();
|
||||
for (var key in transactions) {
|
||||
if (transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
var transaction = transactions[key];
|
||||
console.log(transactions[key]);
|
||||
_this.transactions.push({
|
||||
this.processIncomingGroupRow(transaction);
|
||||
}
|
||||
}
|
||||
},
|
||||
processIncomingGroupRow: function processIncomingGroupRow(transaction) {
|
||||
console.log(transaction);
|
||||
this.transactions.push({
|
||||
description: transaction.description,
|
||||
date: transaction.date.substr(0, 10),
|
||||
amount: _this.positiveAmount(transaction.amount),
|
||||
amount: this.positiveAmount(transaction.amount),
|
||||
category: transaction.category_name,
|
||||
errors: {
|
||||
source_account: [],
|
||||
@@ -56812,7 +56782,7 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
notes: transaction.notes
|
||||
},
|
||||
foreign_amount: {
|
||||
amount: _this.positiveAmount(transaction.foreign_amount),
|
||||
amount: this.positiveAmount(transaction.foreign_amount),
|
||||
currency_id: transaction.foreign_currency_id
|
||||
},
|
||||
source_account: {
|
||||
@@ -56837,28 +56807,15 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
allowed_types: [transaction.destination_type]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}).catch(function (error) {
|
||||
console.error('Some error.');
|
||||
});
|
||||
},
|
||||
|
||||
convertData: function convertData() {
|
||||
var data = {
|
||||
'transactions': []
|
||||
};
|
||||
var tagList = [];
|
||||
var transactionType = void 0;
|
||||
var firstSource = void 0;
|
||||
var firstDestination = void 0;
|
||||
var foreignAmount = null;
|
||||
var foreignCurrency = null;
|
||||
var currentArray = void 0;
|
||||
var sourceId = void 0;
|
||||
var sourceName = void 0;
|
||||
var destId = void 0;
|
||||
var destName = void 0;
|
||||
var date = void 0;
|
||||
|
||||
if (this.transactions.length > 1) {
|
||||
data.group_title = this.group_title;
|
||||
@@ -56884,14 +56841,30 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
|
||||
for (var key in this.transactions) {
|
||||
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
data.transactions.push(this.convertDataRow(this.transactions[key], key, transactionType));
|
||||
}
|
||||
}
|
||||
//console.log(data);
|
||||
|
||||
sourceId = this.transactions[key].source_account.id;
|
||||
sourceName = this.transactions[key].source_account.name;
|
||||
destId = this.transactions[key].destination_account.id;
|
||||
destName = this.transactions[key].destination_account.name;
|
||||
return data;
|
||||
},
|
||||
convertDataRow: function convertDataRow(row, index, transactionType) {
|
||||
var tagList = [];
|
||||
var foreignAmount = null;
|
||||
var foreignCurrency = null;
|
||||
var currentArray = void 0;
|
||||
var sourceId = void 0;
|
||||
var sourceName = void 0;
|
||||
var destId = void 0;
|
||||
var destName = void 0;
|
||||
var date = void 0;
|
||||
sourceId = row.source_account.id;
|
||||
sourceName = row.source_account.name;
|
||||
destId = row.destination_account.id;
|
||||
destName = row.destination_account.name;
|
||||
|
||||
date = this.transactions[key].date;
|
||||
if (key > 0) {
|
||||
date = row.date;
|
||||
if (index > 0) {
|
||||
date = this.transactions[0].date;
|
||||
}
|
||||
|
||||
@@ -56905,14 +56878,14 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
sourceId = window.cashAccountId;
|
||||
}
|
||||
|
||||
// if key is over 0 and type is withdrawal or transfer, take source from key 0.
|
||||
if (key > 0 && (transactionType.toLowerCase() === 'withdrawal' || transactionType.toLowerCase() === 'transfer')) {
|
||||
// if index is over 0 and type is withdrawal or transfer, take source from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'withdrawal' || transactionType.toLowerCase() === 'transfer')) {
|
||||
sourceId = this.transactions[0].source_account.id;
|
||||
sourceName = this.transactions[0].source_account.name;
|
||||
}
|
||||
|
||||
// if key is over 0 and type is deposit or transfer, take destination from key 0.
|
||||
if (key > 0 && (transactionType.toLowerCase() === 'deposit' || transactionType.toLowerCase() === 'transfer')) {
|
||||
// if index is over 0 and type is deposit or transfer, take destination from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'deposit' || transactionType.toLowerCase() === 'transfer')) {
|
||||
destId = this.transactions[0].destination_account.id;
|
||||
destName = this.transactions[0].destination_account.name;
|
||||
}
|
||||
@@ -56921,18 +56894,18 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
foreignAmount = null;
|
||||
foreignCurrency = null;
|
||||
// loop tags
|
||||
for (var tagKey in this.transactions[key].tags) {
|
||||
if (this.transactions[key].tags.hasOwnProperty(tagKey) && /^0$|^[1-9]\d*$/.test(tagKey) && key <= 4294967294) {
|
||||
tagList.push(this.transactions[key].tags[tagKey].text);
|
||||
for (var tagKey in row.tags) {
|
||||
if (row.tags.hasOwnProperty(tagKey) && /^0$|^[1-9]\d*$/.test(tagKey) && tagKey <= 4294967294) {
|
||||
tagList.push(row.tags[tagKey].text);
|
||||
}
|
||||
}
|
||||
|
||||
// set foreign currency info:
|
||||
if (this.transactions[key].foreign_amount.amount !== '' && parseFloat(this.transactions[key].foreign_amount.amount) !== .00) {
|
||||
foreignAmount = this.transactions[key].foreign_amount.amount;
|
||||
foreignCurrency = this.transactions[key].foreign_amount.currency_id;
|
||||
if (row.foreign_amount.amount !== '' && parseFloat(row.foreign_amount.amount) !== .00) {
|
||||
foreignAmount = row.foreign_amount.amount;
|
||||
foreignCurrency = row.foreign_amount.currency_id;
|
||||
}
|
||||
if (foreignCurrency === this.transactions[key].currency_id) {
|
||||
if (foreignCurrency === row.currency_id) {
|
||||
foreignAmount = null;
|
||||
foreignCurrency = null;
|
||||
}
|
||||
@@ -56949,10 +56922,10 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
type: transactionType,
|
||||
date: date,
|
||||
|
||||
amount: this.transactions[key].amount,
|
||||
currency_id: this.transactions[key].currency_id,
|
||||
amount: row.amount,
|
||||
currency_id: row.currency_id,
|
||||
|
||||
description: this.transactions[key].description,
|
||||
description: row.description,
|
||||
|
||||
source_id: sourceId,
|
||||
source_name: sourceName,
|
||||
@@ -56960,19 +56933,16 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
destination_id: destId,
|
||||
destination_name: destName,
|
||||
|
||||
category_name: this.transactions[key].category,
|
||||
//budget_id: this.transactions[key].budget,
|
||||
//piggy_bank_id: this.transactions[key].piggy_bank,
|
||||
category_name: row.category,
|
||||
|
||||
|
||||
interest_date: this.transactions[key].custom_fields.interest_date,
|
||||
book_date: this.transactions[key].custom_fields.book_date,
|
||||
process_date: this.transactions[key].custom_fields.process_date,
|
||||
due_date: this.transactions[key].custom_fields.due_date,
|
||||
payment_date: this.transactions[key].custom_fields.payment_date,
|
||||
invoice_date: this.transactions[key].custom_fields.invoice_date,
|
||||
internal_reference: this.transactions[key].custom_fields.internal_reference,
|
||||
notes: this.transactions[key].custom_fields.notes
|
||||
interest_date: row.custom_fields.interest_date,
|
||||
book_date: row.custom_fields.book_date,
|
||||
process_date: row.custom_fields.process_date,
|
||||
due_date: row.custom_fields.due_date,
|
||||
payment_date: row.custom_fields.payment_date,
|
||||
invoice_date: row.custom_fields.invoice_date,
|
||||
internal_reference: row.custom_fields.internal_reference,
|
||||
notes: row.custom_fields.notes
|
||||
};
|
||||
|
||||
if (tagList.length > 0) {
|
||||
@@ -56983,20 +56953,16 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
currentArray.foreign_currency_id = foreignCurrency;
|
||||
}
|
||||
// set budget id and piggy ID.
|
||||
if (parseInt(this.transactions[key].budget) > 0) {
|
||||
currentArray.budget_id = parseInt(this.transactions[key].budget);
|
||||
if (parseInt(row.budget) > 0) {
|
||||
currentArray.budget_id = parseInt(row.budget);
|
||||
}
|
||||
if (parseInt(this.transactions[key].piggy_bank) > 0) {
|
||||
currentArray.piggy_bank_id = parseInt(this.transactions[key].piggy_bank);
|
||||
if (parseInt(row.piggy_bank) > 0) {
|
||||
currentArray.piggy_bank_id = parseInt(row.piggy_bank);
|
||||
}
|
||||
|
||||
data.transactions.push(currentArray);
|
||||
}
|
||||
}
|
||||
//console.log(data);
|
||||
|
||||
return data;
|
||||
return currentArray;
|
||||
},
|
||||
|
||||
submit: function submit(e) {
|
||||
var _this2 = this;
|
||||
|
||||
@@ -57010,18 +56976,20 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
button.prop("disabled", true);
|
||||
|
||||
axios.put(uri, data).then(function (response) {
|
||||
if (_this2.returnAfter) {
|
||||
// do message:
|
||||
_this2.success_message = '<a href="transactions/show/' + response.data.data.id + '">The transaction</a> has been updated.';
|
||||
_this2.error_message = '';
|
||||
button.prop("disabled", false);
|
||||
// TODO better
|
||||
if (_this2.resetFormAfter) {
|
||||
_this2.getGroup();
|
||||
}
|
||||
} else {
|
||||
window.location.href = 'transactions/show/' + response.data.data.id + '?message=updated';
|
||||
|
||||
if (0 === _this2.collectAttachmentData(response)) {
|
||||
_this2.redirectUser(response.data.data.id, button);
|
||||
}
|
||||
|
||||
// if (this.returnAfter) {
|
||||
// this.setDefaultErrors();
|
||||
// // do message:
|
||||
// this.success_message = '<a href="transactions/show/' + response.data.data.id + '">The transaction</a> has been updated.';
|
||||
// this.error_message = '';
|
||||
// button.prop("disabled", false);
|
||||
// } else {
|
||||
// window.location.href = 'transactions/show/' + response.data.data.id + '?message=updated';
|
||||
// }
|
||||
}).catch(function (error) {
|
||||
// give user errors things back.
|
||||
// something something render errors.
|
||||
@@ -57033,6 +57001,128 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
|
||||
redirectUser: function redirectUser(groupId, button) {
|
||||
console.log('In redirectUser()');
|
||||
// if count is 0, send user onwards.
|
||||
|
||||
if (this.returnAfter) {
|
||||
this.setDefaultErrors();
|
||||
// do message:
|
||||
this.success_message = '<a href="transactions/show/' + groupId + '">The transaction</a> has been updated.';
|
||||
this.error_message = '';
|
||||
button.prop("disabled", false);
|
||||
} else {
|
||||
window.location.href = 'transactions/show/' + groupId + '?message=updated';
|
||||
}
|
||||
},
|
||||
collectAttachmentData: function collectAttachmentData(response) {
|
||||
var _this3 = this;
|
||||
|
||||
console.log('Now incollectAttachmentData()');
|
||||
var groupId = response.data.data.id;
|
||||
|
||||
// array of all files to be uploaded:
|
||||
var toBeUploaded = [];
|
||||
|
||||
// array with all file data.
|
||||
var fileData = [];
|
||||
|
||||
// all attachments
|
||||
var attachments = $('input[name="attachments[]"]');
|
||||
|
||||
// loop over all attachments, and add references to this array:
|
||||
for (var key in attachments) {
|
||||
if (attachments.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
for (var fileKey in attachments[key].files) {
|
||||
if (attachments[key].files.hasOwnProperty(fileKey) && /^0$|^[1-9]\d*$/.test(fileKey) && fileKey <= 4294967294) {
|
||||
// include journal thing.
|
||||
toBeUploaded.push({
|
||||
journal: response.data.data.attributes.transactions[key].transaction_journal_id,
|
||||
file: attachments[key].files[fileKey]
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var count = toBeUploaded.length;
|
||||
console.log('Found ' + toBeUploaded.length + ' attachments.');
|
||||
|
||||
// loop all uploads.
|
||||
|
||||
var _loop = function _loop(_key2) {
|
||||
if (toBeUploaded.hasOwnProperty(_key2) && /^0$|^[1-9]\d*$/.test(_key2) && _key2 <= 4294967294) {
|
||||
// create file reader thing that will read all of these uploads
|
||||
(function (f, i, theParent) {
|
||||
var fileReader = new FileReader();
|
||||
fileReader.onloadend = function (evt) {
|
||||
if (evt.target.readyState === FileReader.DONE) {
|
||||
// DONE == 2
|
||||
fileData.push({
|
||||
name: toBeUploaded[_key2].file.name,
|
||||
journal: toBeUploaded[_key2].journal,
|
||||
content: new Blob([evt.target.result])
|
||||
});
|
||||
if (fileData.length === count) {
|
||||
theParent.uploadFiles(fileData, groupId);
|
||||
}
|
||||
}
|
||||
};
|
||||
fileReader.readAsArrayBuffer(f.file);
|
||||
})(toBeUploaded[_key2], _key2, _this3);
|
||||
}
|
||||
};
|
||||
|
||||
for (var _key2 in toBeUploaded) {
|
||||
_loop(_key2);
|
||||
}
|
||||
return count;
|
||||
},
|
||||
uploadFiles: function uploadFiles(fileData, groupId) {
|
||||
var _this4 = this;
|
||||
|
||||
var count = fileData.length;
|
||||
var uploads = 0;
|
||||
|
||||
var _loop2 = function _loop2(key) {
|
||||
if (fileData.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
console.log('Creating attachment #' + key);
|
||||
// axios thing, + then.
|
||||
var uri = './api/v1/attachments';
|
||||
var data = {
|
||||
filename: fileData[key].name,
|
||||
model: 'TransactionJournal',
|
||||
model_id: fileData[key].journal
|
||||
};
|
||||
axios.post(uri, data).then(function (response) {
|
||||
console.log('Created attachment #' + key);
|
||||
console.log('Uploading attachment #' + key);
|
||||
var uploadUri = './api/v1/attachments/' + response.data.data.id + '/upload';
|
||||
axios.post(uploadUri, fileData[key].content).then(function (response) {
|
||||
console.log('Uploaded attachment #' + key);
|
||||
uploads++;
|
||||
if (uploads === count) {
|
||||
// finally we can redirect the user onwards.
|
||||
console.log('FINAL UPLOAD');
|
||||
_this4.redirectUser(groupId);
|
||||
}
|
||||
console.log('Upload complete!');
|
||||
return true;
|
||||
}).catch(function (error) {
|
||||
console.error('Could not upload');
|
||||
console.error(error);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in fileData) {
|
||||
_loop2(key);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
addTransaction: function addTransaction(e) {
|
||||
this.transactions.push({
|
||||
description: "",
|
||||
@@ -57105,6 +57195,82 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
parseErrors: function parseErrors(errors) {
|
||||
this.setDefaultErrors();
|
||||
this.error_message = "";
|
||||
if (errors.message.length > 0) {
|
||||
this.error_message = "There was something wrong with your submission. Please check out the errors below.";
|
||||
} else {
|
||||
this.error_message = '';
|
||||
}
|
||||
var transactionIndex = void 0;
|
||||
var fieldName = void 0;
|
||||
|
||||
for (var key in errors.errors) {
|
||||
if (errors.errors.hasOwnProperty(key)) {
|
||||
if (key === 'group_title') {
|
||||
this.group_title_errors = errors.errors[key];
|
||||
}
|
||||
if (key !== 'group_title') {
|
||||
// lol dumbest way to explode "transactions.0.something" ever.
|
||||
transactionIndex = parseInt(key.split('.')[1]);
|
||||
fieldName = key.split('.')[2];
|
||||
// set error in this object thing.
|
||||
switch (fieldName) {
|
||||
case 'amount':
|
||||
case 'date':
|
||||
case 'budget_id':
|
||||
case 'description':
|
||||
case 'tags':
|
||||
this.transactions[transactionIndex].errors[fieldName] = errors.errors[key];
|
||||
break;
|
||||
case 'source_name':
|
||||
case 'source_id':
|
||||
this.transactions[transactionIndex].errors.source_account = this.transactions[transactionIndex].errors.source_account.concat(errors.errors[key]);
|
||||
break;
|
||||
case 'destination_name':
|
||||
case 'destination_id':
|
||||
this.transactions[transactionIndex].errors.destination_account = this.transactions[transactionIndex].errors.destination_account.concat(errors.errors[key]);
|
||||
break;
|
||||
case 'foreign_amount':
|
||||
case 'foreign_currency_id':
|
||||
this.transactions[transactionIndex].errors.foreign_amount = this.transactions[transactionIndex].errors.foreign_amount.concat(errors.errors[key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
setDefaultErrors: function setDefaultErrors() {
|
||||
for (var key in this.transactions) {
|
||||
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
this.transactions[key].errors = {
|
||||
source_account: [],
|
||||
destination_account: [],
|
||||
description: [],
|
||||
amount: [],
|
||||
date: [],
|
||||
budget_id: [],
|
||||
foreign_amount: [],
|
||||
category: [],
|
||||
piggy_bank: [],
|
||||
tags: [],
|
||||
// custom fields:
|
||||
custom_errors: {
|
||||
interest_date: [],
|
||||
book_date: [],
|
||||
process_date: [],
|
||||
due_date: [],
|
||||
payment_date: [],
|
||||
invoice_date: [],
|
||||
internal_reference: [],
|
||||
notes: [],
|
||||
attachments: []
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -57537,7 +57703,7 @@ var render = function() {
|
||||
}
|
||||
}),
|
||||
_vm._v(
|
||||
"\n After updating, return here to create another one.\n "
|
||||
"\n After updating, return here to continue editing.\n "
|
||||
)
|
||||
])
|
||||
])
|
||||
|
@@ -138,9 +138,13 @@
|
||||
}
|
||||
},
|
||||
selectedItem: function (e) {
|
||||
console.log('selectedItem()');
|
||||
if (typeof this.name === 'undefined') {
|
||||
return;
|
||||
}
|
||||
if(typeof this.name === 'string') {
|
||||
console.log('Is a string.');
|
||||
}
|
||||
// emit the fact that the user selected a type of account
|
||||
// (influencing the destination)
|
||||
this.$emit('select:account', this.name);
|
||||
|
@@ -260,12 +260,12 @@
|
||||
let destName;
|
||||
let date;
|
||||
|
||||
sourceId = this.transactions[index].source_account.id;
|
||||
sourceName = this.transactions[index].source_account.name;
|
||||
destId = this.transactions[index].destination_account.id;
|
||||
destName = this.transactions[index].destination_account.name;
|
||||
sourceId = row.source_account.id;
|
||||
sourceName = row.source_account.name;
|
||||
destId = row.destination_account.id;
|
||||
destName = row.destination_account.name;
|
||||
|
||||
date = this.transactions[index].date;
|
||||
date = row.date;
|
||||
if (index > 0) {
|
||||
date = this.transactions[0].date;
|
||||
}
|
||||
@@ -280,13 +280,13 @@
|
||||
sourceId = window.cashAccountId;
|
||||
}
|
||||
|
||||
// if index is over 0 and type is withdrawal or transfer, take source from key 0.
|
||||
// if index is over 0 and type is withdrawal or transfer, take source from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'withdrawal' || transactionType.toLowerCase() === 'transfer')) {
|
||||
sourceId = this.transactions[0].source_account.id;
|
||||
sourceName = this.transactions[0].source_account.name;
|
||||
}
|
||||
|
||||
// if index is over 0 and type is deposit or transfer, take destination from key 0.
|
||||
// if index is over 0 and type is deposit or transfer, take destination from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'deposit' || transactionType.toLowerCase() === 'transfer')) {
|
||||
destId = this.transactions[0].destination_account.id;
|
||||
destName = this.transactions[0].destination_account.name;
|
||||
@@ -338,9 +338,6 @@
|
||||
|
||||
|
||||
category_name: row.category,
|
||||
//budget_id: row.budget,
|
||||
//piggy_bank_id: row.piggy_bank,
|
||||
|
||||
|
||||
interest_date: row.custom_fields.interest_date,
|
||||
book_date: row.custom_fields.book_date,
|
||||
@@ -422,8 +419,7 @@
|
||||
collectAttachmentData(response) {
|
||||
console.log('Now incollectAttachmentData()');
|
||||
let groupId = response.data.data.id;
|
||||
//console.log(response.data.data.attributes.transactions);
|
||||
//
|
||||
|
||||
// array of all files to be uploaded:
|
||||
let toBeUploaded = [];
|
||||
|
||||
@@ -457,10 +453,8 @@
|
||||
if (toBeUploaded.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
// create file reader thing that will read all of these uploads
|
||||
(function (f, i, theParent) {
|
||||
var fileReader = new FileReader();
|
||||
let fileReader = new FileReader();
|
||||
fileReader.onloadend = function (evt) {
|
||||
|
||||
|
||||
if (evt.target.readyState === FileReader.DONE) { // DONE == 2
|
||||
fileData.push(
|
||||
{
|
||||
@@ -473,22 +467,7 @@
|
||||
theParent.uploadFiles(fileData, groupId);
|
||||
}
|
||||
}
|
||||
|
||||
// // turn into binary strings.
|
||||
// let chars = new Uint8Array(evt.target.result);
|
||||
// let CHUNK_SIZE = 0x8000;
|
||||
// let index = 0;
|
||||
// let length = chars.length;
|
||||
// let result = '';
|
||||
// let slice;
|
||||
// while (index < length) {
|
||||
// slice = chars.subarray(index, Math.min(index + CHUNK_SIZE, length));
|
||||
// result += String.fromCharCode.apply(null, slice);
|
||||
// index += CHUNK_SIZE;
|
||||
// }
|
||||
// console.log('Now reading file #' + key);
|
||||
|
||||
}
|
||||
};
|
||||
fileReader.readAsArrayBuffer(f.file);
|
||||
})(toBeUploaded[key], key, this);
|
||||
}
|
||||
@@ -701,28 +680,6 @@
|
||||
this.transactionType = type;
|
||||
},
|
||||
|
||||
// convert to binary stuff
|
||||
arrayBufferToBinary(buffer) {
|
||||
return String.fromCharCode.apply(null, Array.prototype.slice.apply(new Uint8Array(buffer)));
|
||||
},
|
||||
binaryToString: function (binary) {
|
||||
let error;
|
||||
|
||||
try {
|
||||
return decodeURIComponent(escape(binary));
|
||||
} catch (_error) {
|
||||
error = _error;
|
||||
if (error instanceof URIError) {
|
||||
return binary;
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// end of convert to binary stuff
|
||||
|
||||
|
||||
deleteTransaction: function (index, event) {
|
||||
event.preventDefault();
|
||||
for (const key in this.transactions) {
|
||||
|
@@ -184,7 +184,7 @@
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input v-model="returnAfter" name="return_after" type="checkbox">
|
||||
After updating, return here to create another one.
|
||||
After updating, return here to continue editing.
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@@ -212,18 +212,20 @@
|
||||
console.log('Ready Group ID: ' + this.groupId);
|
||||
},
|
||||
methods: {
|
||||
positiveAmount: function (amount) {
|
||||
positiveAmount(amount) {
|
||||
if (amount < 0) {
|
||||
return amount * -1;
|
||||
}
|
||||
return amount;
|
||||
},
|
||||
|
||||
selectedSourceAccount: function (index, model) {
|
||||
selectedSourceAccount(index, model) {
|
||||
if (typeof model === 'string') {
|
||||
// cant change types, only name.
|
||||
// also clear ID
|
||||
this.transactions[index].source_account.id = null;
|
||||
this.transactions[index].source_account.name = model;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
this.transactions[index].source_account = {
|
||||
id: model.id,
|
||||
name: model.name,
|
||||
@@ -234,16 +236,15 @@
|
||||
currency_decimal_places: model.currency_decimal_places,
|
||||
allowed_types: this.transactions[index].source_account.allowed_types
|
||||
};
|
||||
|
||||
// force types on destination selector.
|
||||
//this.transactions[index].destination_account.allowed_types = window.allowedOpposingTypes.source[model.type];
|
||||
}
|
||||
},
|
||||
selectedDestinationAccount: function (index, model) {
|
||||
selectedDestinationAccount(index, model) {
|
||||
if (typeof model === 'string') {
|
||||
// cant change types, only name.
|
||||
// also clear ID
|
||||
this.transactions[index].destination_account.id = null;
|
||||
this.transactions[index].destination_account.name = model;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
this.transactions[index].destination_account = {
|
||||
id: model.id,
|
||||
name: model.name,
|
||||
@@ -254,13 +255,8 @@
|
||||
currency_decimal_places: model.currency_decimal_places,
|
||||
allowed_types: this.transactions[index].destination_account.allowed_types
|
||||
};
|
||||
|
||||
// force types on destination selector.
|
||||
//this.transactions[index].source_account.allowed_types = window.allowedOpposingTypes.destination[model.type];
|
||||
}
|
||||
},
|
||||
clearSource: function (index) {
|
||||
console.log('clearSource(' + index + ')');
|
||||
clearSource(index) {
|
||||
// reset source account:
|
||||
this.transactions[index].source_account = {
|
||||
id: 0,
|
||||
@@ -272,23 +268,21 @@
|
||||
currency_decimal_places: 2,
|
||||
allowed_types: this.transactions[index].source_account.allowed_types
|
||||
};
|
||||
// reset destination allowed account types.
|
||||
// this.transactions[index].destination_account.allowed_types = [];
|
||||
|
||||
// if there is a destination model, reset the types of the source
|
||||
// by pretending we selected it again.
|
||||
if (this.transactions[index].destination_account) {
|
||||
this.selectedDestinationAccount(index, this.transactions[index].destination_account);
|
||||
}
|
||||
},
|
||||
setTransactionType: function (type) {
|
||||
setTransactionType(type) {
|
||||
this.transactionType = type;
|
||||
},
|
||||
deleteTransaction: function (index, event) {
|
||||
deleteTransaction(index, event) {
|
||||
event.preventDefault();
|
||||
for (const key in this.transactions) {
|
||||
if (
|
||||
this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
// TODO empty iff?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -297,10 +291,11 @@
|
||||
for (const key in this.transactions) {
|
||||
if (
|
||||
this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
// TODO empty iff?
|
||||
}
|
||||
}
|
||||
},
|
||||
clearDestination: function (index) {
|
||||
clearDestination(index) {
|
||||
console.log('clearDestination(' + index + ')');
|
||||
// reset destination account:
|
||||
console.log('Destination allowed types first:');
|
||||
@@ -327,7 +322,7 @@
|
||||
console.log('Destination allowed types after:');
|
||||
console.log(this.transactions[index].destination_account.allowed_types);
|
||||
},
|
||||
getGroup: function () {
|
||||
getGroup() {
|
||||
|
||||
const page = window.location.href.split('/');
|
||||
const groupId = page[page.length - 1];
|
||||
@@ -339,13 +334,26 @@
|
||||
// fill in transactions array.
|
||||
axios.get(uri)
|
||||
.then(response => {
|
||||
console.log(response.data.data);
|
||||
this.group_title = response.data.data.attributes.group_title;
|
||||
let transactions = response.data.data.attributes.transactions.reverse();
|
||||
this.processIncomingGroup(response.data.data);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Some error.');
|
||||
});
|
||||
},
|
||||
processIncomingGroup(data) {
|
||||
console.log(data);
|
||||
this.group_title = data.attributes.group_title;
|
||||
let transactions = data.attributes.transactions.reverse();
|
||||
for (let key in transactions) {
|
||||
if (transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
let transaction = transactions[key];
|
||||
console.log(transactions[key]);
|
||||
this.processIncomingGroupRow(transaction);
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
processIncomingGroupRow(transaction) {
|
||||
console.log(transaction);
|
||||
this.transactions.push({
|
||||
description: transaction.description,
|
||||
date: transaction.date.substr(0, 10),
|
||||
@@ -413,30 +421,14 @@
|
||||
allowed_types: [transaction.destination_type]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Some error.');
|
||||
});
|
||||
},
|
||||
convertData: function () {
|
||||
let data = {
|
||||
'transactions': [],
|
||||
};
|
||||
let tagList = [];
|
||||
let transactionType;
|
||||
let firstSource;
|
||||
let firstDestination;
|
||||
let foreignAmount = null;
|
||||
let foreignCurrency = null;
|
||||
let currentArray;
|
||||
let sourceId;
|
||||
let sourceName;
|
||||
let destId;
|
||||
let destName;
|
||||
let date;
|
||||
|
||||
if (this.transactions.length > 1) {
|
||||
data.group_title = this.group_title;
|
||||
@@ -460,17 +452,32 @@
|
||||
transactionType = 'deposit';
|
||||
}
|
||||
|
||||
|
||||
for (let key in this.transactions) {
|
||||
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
data.transactions.push(this.convertDataRow(this.transactions[key], key, transactionType));
|
||||
}
|
||||
}
|
||||
//console.log(data);
|
||||
|
||||
sourceId = this.transactions[key].source_account.id;
|
||||
sourceName = this.transactions[key].source_account.name;
|
||||
destId = this.transactions[key].destination_account.id;
|
||||
destName = this.transactions[key].destination_account.name;
|
||||
return data;
|
||||
},
|
||||
convertDataRow(row, index, transactionType) {
|
||||
let tagList = [];
|
||||
let foreignAmount = null;
|
||||
let foreignCurrency = null;
|
||||
let currentArray;
|
||||
let sourceId;
|
||||
let sourceName;
|
||||
let destId;
|
||||
let destName;
|
||||
let date;
|
||||
sourceId = row.source_account.id;
|
||||
sourceName = row.source_account.name;
|
||||
destId = row.destination_account.id;
|
||||
destName = row.destination_account.name;
|
||||
|
||||
date = this.transactions[key].date;
|
||||
if (key > 0) {
|
||||
date = row.date;
|
||||
if (index > 0) {
|
||||
date = this.transactions[0].date;
|
||||
}
|
||||
|
||||
@@ -484,14 +491,14 @@
|
||||
sourceId = window.cashAccountId;
|
||||
}
|
||||
|
||||
// if key is over 0 and type is withdrawal or transfer, take source from key 0.
|
||||
if (key > 0 && (transactionType.toLowerCase() === 'withdrawal' || transactionType.toLowerCase() === 'transfer')) {
|
||||
// if index is over 0 and type is withdrawal or transfer, take source from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'withdrawal' || transactionType.toLowerCase() === 'transfer')) {
|
||||
sourceId = this.transactions[0].source_account.id;
|
||||
sourceName = this.transactions[0].source_account.name;
|
||||
}
|
||||
|
||||
// if key is over 0 and type is deposit or transfer, take destination from key 0.
|
||||
if (key > 0 && (transactionType.toLowerCase() === 'deposit' || transactionType.toLowerCase() === 'transfer')) {
|
||||
// if index is over 0 and type is deposit or transfer, take destination from index 0.
|
||||
if (index > 0 && (transactionType.toLowerCase() === 'deposit' || transactionType.toLowerCase() === 'transfer')) {
|
||||
destId = this.transactions[0].destination_account.id;
|
||||
destName = this.transactions[0].destination_account.name;
|
||||
}
|
||||
@@ -500,18 +507,18 @@
|
||||
foreignAmount = null;
|
||||
foreignCurrency = null;
|
||||
// loop tags
|
||||
for (let tagKey in this.transactions[key].tags) {
|
||||
if (this.transactions[key].tags.hasOwnProperty(tagKey) && /^0$|^[1-9]\d*$/.test(tagKey) && key <= 4294967294) {
|
||||
tagList.push(this.transactions[key].tags[tagKey].text);
|
||||
for (let tagKey in row.tags) {
|
||||
if (row.tags.hasOwnProperty(tagKey) && /^0$|^[1-9]\d*$/.test(tagKey) && tagKey <= 4294967294) {
|
||||
tagList.push(row.tags[tagKey].text);
|
||||
}
|
||||
}
|
||||
|
||||
// set foreign currency info:
|
||||
if (this.transactions[key].foreign_amount.amount !== '' && parseFloat(this.transactions[key].foreign_amount.amount) !== .00) {
|
||||
foreignAmount = this.transactions[key].foreign_amount.amount;
|
||||
foreignCurrency = this.transactions[key].foreign_amount.currency_id;
|
||||
if (row.foreign_amount.amount !== '' && parseFloat(row.foreign_amount.amount) !== .00) {
|
||||
foreignAmount = row.foreign_amount.amount;
|
||||
foreignCurrency = row.foreign_amount.currency_id;
|
||||
}
|
||||
if (foreignCurrency === this.transactions[key].currency_id) {
|
||||
if (foreignCurrency === row.currency_id) {
|
||||
foreignAmount = null;
|
||||
foreignCurrency = null;
|
||||
}
|
||||
@@ -529,10 +536,10 @@
|
||||
type: transactionType,
|
||||
date: date,
|
||||
|
||||
amount: this.transactions[key].amount,
|
||||
currency_id: this.transactions[key].currency_id,
|
||||
amount: row.amount,
|
||||
currency_id: row.currency_id,
|
||||
|
||||
description: this.transactions[key].description,
|
||||
description: row.description,
|
||||
|
||||
source_id: sourceId,
|
||||
source_name: sourceName,
|
||||
@@ -541,19 +548,16 @@
|
||||
destination_name: destName,
|
||||
|
||||
|
||||
category_name: this.transactions[key].category,
|
||||
//budget_id: this.transactions[key].budget,
|
||||
//piggy_bank_id: this.transactions[key].piggy_bank,
|
||||
category_name: row.category,
|
||||
|
||||
|
||||
interest_date: this.transactions[key].custom_fields.interest_date,
|
||||
book_date: this.transactions[key].custom_fields.book_date,
|
||||
process_date: this.transactions[key].custom_fields.process_date,
|
||||
due_date: this.transactions[key].custom_fields.due_date,
|
||||
payment_date: this.transactions[key].custom_fields.payment_date,
|
||||
invoice_date: this.transactions[key].custom_fields.invoice_date,
|
||||
internal_reference: this.transactions[key].custom_fields.internal_reference,
|
||||
notes: this.transactions[key].custom_fields.notes
|
||||
interest_date: row.custom_fields.interest_date,
|
||||
book_date: row.custom_fields.book_date,
|
||||
process_date: row.custom_fields.process_date,
|
||||
due_date: row.custom_fields.due_date,
|
||||
payment_date: row.custom_fields.payment_date,
|
||||
invoice_date: row.custom_fields.invoice_date,
|
||||
internal_reference: row.custom_fields.internal_reference,
|
||||
notes: row.custom_fields.notes
|
||||
};
|
||||
|
||||
if (tagList.length > 0) {
|
||||
@@ -564,19 +568,14 @@
|
||||
currentArray.foreign_currency_id = foreignCurrency;
|
||||
}
|
||||
// set budget id and piggy ID.
|
||||
if (parseInt(this.transactions[key].budget) > 0) {
|
||||
currentArray.budget_id = parseInt(this.transactions[key].budget);
|
||||
if (parseInt(row.budget) > 0) {
|
||||
currentArray.budget_id = parseInt(row.budget);
|
||||
}
|
||||
if (parseInt(this.transactions[key].piggy_bank) > 0) {
|
||||
currentArray.piggy_bank_id = parseInt(this.transactions[key].piggy_bank);
|
||||
if (parseInt(row.piggy_bank) > 0) {
|
||||
currentArray.piggy_bank_id = parseInt(row.piggy_bank);
|
||||
}
|
||||
|
||||
data.transactions.push(currentArray);
|
||||
}
|
||||
}
|
||||
//console.log(data);
|
||||
|
||||
return data;
|
||||
return currentArray;
|
||||
},
|
||||
submit: function (e) {
|
||||
console.log('I am submit');
|
||||
@@ -590,19 +589,20 @@
|
||||
|
||||
axios.put(uri, data)
|
||||
.then(response => {
|
||||
if (this.returnAfter) {
|
||||
// do message:
|
||||
this.success_message = '<a href="transactions/show/' + response.data.data.id + '">The transaction</a> has been updated.';
|
||||
this.error_message = '';
|
||||
button.prop("disabled", false);
|
||||
// TODO better
|
||||
if (this.resetFormAfter) {
|
||||
this.getGroup();
|
||||
|
||||
if (0 === this.collectAttachmentData(response)) {
|
||||
this.redirectUser(response.data.data.id, button);
|
||||
}
|
||||
|
||||
} else {
|
||||
window.location.href = 'transactions/show/' + response.data.data.id + '?message=updated';
|
||||
}
|
||||
// if (this.returnAfter) {
|
||||
// this.setDefaultErrors();
|
||||
// // do message:
|
||||
// this.success_message = '<a href="transactions/show/' + response.data.data.id + '">The transaction</a> has been updated.';
|
||||
// this.error_message = '';
|
||||
// button.prop("disabled", false);
|
||||
// } else {
|
||||
// window.location.href = 'transactions/show/' + response.data.data.id + '?message=updated';
|
||||
// }
|
||||
}).catch(error => {
|
||||
// give user errors things back.
|
||||
// something something render errors.
|
||||
@@ -614,6 +614,122 @@
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
|
||||
redirectUser(groupId, button) {
|
||||
console.log('In redirectUser()');
|
||||
// if count is 0, send user onwards.
|
||||
|
||||
if (this.returnAfter) {
|
||||
this.setDefaultErrors();
|
||||
// do message:
|
||||
this.success_message = '<a href="transactions/show/' + groupId + '">The transaction</a> has been updated.';
|
||||
this.error_message = '';
|
||||
button.prop("disabled", false);
|
||||
} else {
|
||||
window.location.href = 'transactions/show/' + groupId + '?message=updated';
|
||||
}
|
||||
},
|
||||
|
||||
collectAttachmentData(response) {
|
||||
console.log('Now incollectAttachmentData()');
|
||||
let groupId = response.data.data.id;
|
||||
|
||||
// array of all files to be uploaded:
|
||||
let toBeUploaded = [];
|
||||
|
||||
// array with all file data.
|
||||
let fileData = [];
|
||||
|
||||
// all attachments
|
||||
let attachments = $('input[name="attachments[]"]');
|
||||
|
||||
// loop over all attachments, and add references to this array:
|
||||
for (const key in attachments) {
|
||||
if (attachments.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
for (const fileKey in attachments[key].files) {
|
||||
if (attachments[key].files.hasOwnProperty(fileKey) && /^0$|^[1-9]\d*$/.test(fileKey) && fileKey <= 4294967294) {
|
||||
// include journal thing.
|
||||
toBeUploaded.push(
|
||||
{
|
||||
journal: response.data.data.attributes.transactions[key].transaction_journal_id,
|
||||
file: attachments[key].files[fileKey]
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
let count = toBeUploaded.length;
|
||||
console.log('Found ' + toBeUploaded.length + ' attachments.');
|
||||
|
||||
// loop all uploads.
|
||||
for (const key in toBeUploaded) {
|
||||
if (toBeUploaded.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
// create file reader thing that will read all of these uploads
|
||||
(function (f, i, theParent) {
|
||||
let fileReader = new FileReader();
|
||||
fileReader.onloadend = function (evt) {
|
||||
if (evt.target.readyState === FileReader.DONE) { // DONE == 2
|
||||
fileData.push(
|
||||
{
|
||||
name: toBeUploaded[key].file.name,
|
||||
journal: toBeUploaded[key].journal,
|
||||
content: new Blob([evt.target.result])
|
||||
}
|
||||
);
|
||||
if (fileData.length === count) {
|
||||
theParent.uploadFiles(fileData, groupId);
|
||||
}
|
||||
}
|
||||
};
|
||||
fileReader.readAsArrayBuffer(f.file);
|
||||
})(toBeUploaded[key], key, this);
|
||||
}
|
||||
}
|
||||
return count;
|
||||
},
|
||||
|
||||
uploadFiles(fileData, groupId) {
|
||||
let count = fileData.length;
|
||||
let uploads = 0;
|
||||
for (const key in fileData) {
|
||||
if (fileData.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
console.log('Creating attachment #' + key);
|
||||
// axios thing, + then.
|
||||
const uri = './api/v1/attachments';
|
||||
const data = {
|
||||
filename: fileData[key].name,
|
||||
model: 'TransactionJournal',
|
||||
model_id: fileData[key].journal,
|
||||
};
|
||||
axios.post(uri, data)
|
||||
.then(response => {
|
||||
console.log('Created attachment #' + key);
|
||||
console.log('Uploading attachment #' + key);
|
||||
const uploadUri = './api/v1/attachments/' + response.data.data.id + '/upload';
|
||||
axios.post(uploadUri, fileData[key].content)
|
||||
.then(response => {
|
||||
console.log('Uploaded attachment #' + key);
|
||||
uploads++;
|
||||
if (uploads === count) {
|
||||
// finally we can redirect the user onwards.
|
||||
console.log('FINAL UPLOAD');
|
||||
this.redirectUser(groupId);
|
||||
}
|
||||
console.log('Upload complete!');
|
||||
return true;
|
||||
}).catch(error => {
|
||||
console.error('Could not upload');
|
||||
console.error(error);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
addTransaction: function (e) {
|
||||
this.transactions.push({
|
||||
description: "",
|
||||
@@ -686,7 +802,86 @@
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
parseErrors: function (errors) {
|
||||
this.setDefaultErrors();
|
||||
this.error_message = "";
|
||||
if (errors.message.length > 0) {
|
||||
this.error_message = "There was something wrong with your submission. Please check out the errors below.";
|
||||
} else {
|
||||
this.error_message = '';
|
||||
}
|
||||
let transactionIndex;
|
||||
let fieldName;
|
||||
|
||||
for (const key in errors.errors) {
|
||||
if (errors.errors.hasOwnProperty(key)) {
|
||||
if (key === 'group_title') {
|
||||
this.group_title_errors = errors.errors[key];
|
||||
}
|
||||
if (key !== 'group_title') {
|
||||
// lol dumbest way to explode "transactions.0.something" ever.
|
||||
transactionIndex = parseInt(key.split('.')[1]);
|
||||
fieldName = key.split('.')[2];
|
||||
// set error in this object thing.
|
||||
switch (fieldName) {
|
||||
case 'amount':
|
||||
case 'date':
|
||||
case 'budget_id':
|
||||
case 'description':
|
||||
case 'tags':
|
||||
this.transactions[transactionIndex].errors[fieldName] = errors.errors[key];
|
||||
break;
|
||||
case 'source_name':
|
||||
case 'source_id':
|
||||
this.transactions[transactionIndex].errors.source_account =
|
||||
this.transactions[transactionIndex].errors.source_account.concat(errors.errors[key]);
|
||||
break;
|
||||
case 'destination_name':
|
||||
case 'destination_id':
|
||||
this.transactions[transactionIndex].errors.destination_account =
|
||||
this.transactions[transactionIndex].errors.destination_account.concat(errors.errors[key]);
|
||||
break;
|
||||
case 'foreign_amount':
|
||||
case 'foreign_currency_id':
|
||||
this.transactions[transactionIndex].errors.foreign_amount =
|
||||
this.transactions[transactionIndex].errors.foreign_amount.concat(errors.errors[key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
setDefaultErrors: function () {
|
||||
for (const key in this.transactions) {
|
||||
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
this.transactions[key].errors = {
|
||||
source_account: [],
|
||||
destination_account: [],
|
||||
description: [],
|
||||
amount: [],
|
||||
date: [],
|
||||
budget_id: [],
|
||||
foreign_amount: [],
|
||||
category: [],
|
||||
piggy_bank: [],
|
||||
tags: [],
|
||||
// custom fields:
|
||||
custom_errors: {
|
||||
interest_date: [],
|
||||
book_date: [],
|
||||
process_date: [],
|
||||
due_date: [],
|
||||
payment_date: [],
|
||||
invoice_date: [],
|
||||
internal_reference: [],
|
||||
notes: [],
|
||||
attachments: [],
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
|
@@ -23,7 +23,6 @@ declare(strict_types=1);
|
||||
namespace Tests\Feature\Controllers\Transaction;
|
||||
|
||||
use Amount;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
@@ -35,7 +34,6 @@ use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||
use FireflyIII\Validation\AccountValidator;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use Log;
|
||||
use Mockery;
|
||||
use Preferences;
|
||||
|
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* CreateControllerTest.php
|
||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace Tests\Feature\Controllers\Transaction;
|
||||
|
||||
|
||||
use FireflyIII\Models\Preference;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||
use Log;
|
||||
use Preferences;
|
||||
use Tests\TestCase;
|
||||
use Mockery;
|
||||
|
||||
/**
|
||||
* Class CreateControllerTest
|
||||
*/
|
||||
class CreateControllerTest extends TestCase
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
Log::info(sprintf('Now in %s.', get_class($this)));
|
||||
}
|
||||
|
||||
public function testCreate(): void
|
||||
{
|
||||
$this->mockDefaultSession();
|
||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||
$userRepos = $this->mock(UserRepositoryInterface::class);
|
||||
$cash = $this->getRandomAsset();
|
||||
$empty = new Preference;
|
||||
$empty->data = [];
|
||||
|
||||
$userRepos->shouldReceive('hasRole')->atLeast()->once()->withArgs([Mockery::any(),'owner'])->andReturn(true);
|
||||
$accountRepos->shouldReceive('getCashAccount')->atLeast()->once()->andReturn($cash);
|
||||
|
||||
Preferences::shouldReceive('get')->withArgs(['transaction_journal_optional_fields', []])->atLeast()->once()->andReturn($empty);
|
||||
|
||||
|
||||
$this->be($this->user());
|
||||
$response = $this->get(route('transactions.create'));
|
||||
$response->assertStatus(200);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user