feat(donations): Implemented add donation payment via datatable refresh
This commit is contained in:
parent
02003ec80e
commit
e5c9265588
@ -6,16 +6,16 @@
|
||||
import Toastify from "toastify-js";
|
||||
import { createEventDispatcher } from "svelte";
|
||||
export let payment_modal_open = false;
|
||||
export let current_donations = [];
|
||||
export let editable = {};
|
||||
export let original_data = {};
|
||||
export let paid_amount_input = 0;
|
||||
const dispatch = createEventDispatcher();
|
||||
$:processed_last_submit=true;
|
||||
$: processed_last_submit = true;
|
||||
function focus(el) {
|
||||
el.focus();
|
||||
}
|
||||
$: createbtnenabled = is_paid_amount_valid && !(paid_amount_input*100 == original_data.paidAmount)
|
||||
$: createbtnenabled =
|
||||
is_paid_amount_valid &&
|
||||
!(paid_amount_input * 100 == original_data.paidAmount);
|
||||
$: is_paid_amount_valid = paid_amount_input > 0;
|
||||
(() => {
|
||||
document.onkeydown = (e) => {
|
||||
@ -35,26 +35,27 @@
|
||||
if (processed_last_submit === true) {
|
||||
processed_last_submit = false;
|
||||
const toast = Toastify({
|
||||
text: $_('updating-donation'),
|
||||
text: $_("updating-donation"),
|
||||
duration: -1,
|
||||
}).showToast();
|
||||
const editable = Object.assign({}, original_data);
|
||||
editable.donor = editable.donor.id;
|
||||
editable.paidAmount = paid_amount_input*100;
|
||||
if(editable.responseType == "DISTANCEDONATION" || editable.runner){
|
||||
editable.paidAmount = paid_amount_input * 100;
|
||||
if (editable.responseType == "DISTANCEDONATION" || editable.runner) {
|
||||
editable.runner = editable.runner.id;
|
||||
DonationService.donationControllerPutDistance(original_data.id, editable)
|
||||
DonationService.donationControllerPutDistance(
|
||||
original_data.id,
|
||||
editable
|
||||
)
|
||||
.then((result) => {
|
||||
let id = original_data.id;
|
||||
editable = {};
|
||||
original_data = {};
|
||||
payment_modal_open = false;
|
||||
//
|
||||
Toastify({
|
||||
text: $_('donation-updated'),
|
||||
text: $_("donation-updated"),
|
||||
duration: 500,
|
||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||
}).showToast();
|
||||
dispatch("created", {donation: response})
|
||||
dispatch("created", { donation: response });
|
||||
})
|
||||
.catch((err) => {
|
||||
//
|
||||
@ -64,22 +65,17 @@
|
||||
//
|
||||
toast.hideToast();
|
||||
});
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
DonationService.donationControllerPutFixed(original_data.id, editable)
|
||||
.then((result) => {
|
||||
let id = original_data.id;
|
||||
editable = {};
|
||||
original_data = {};
|
||||
payment_modal_open = false;
|
||||
//
|
||||
Toastify({
|
||||
text: $_('donation-updated'),
|
||||
text: $_("donation-updated"),
|
||||
duration: 500,
|
||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||
}).showToast();
|
||||
current_donations[current_donations.findIndex((c) => c.id === id)] = result;
|
||||
current_donations = current_donations;
|
||||
dispatch("created", { donation: response });
|
||||
})
|
||||
.catch((err) => {
|
||||
//
|
||||
@ -97,56 +93,70 @@
|
||||
{#if payment_modal_open}
|
||||
<div
|
||||
class="fixed z-10 inset-0 overflow-y-auto"
|
||||
|
||||
use:clickOutside
|
||||
on:click_outside={() => {
|
||||
payment_modal_open = false;
|
||||
}}>
|
||||
}}
|
||||
>
|
||||
<div
|
||||
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
|
||||
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
||||
>
|
||||
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
||||
<div
|
||||
class="absolute inset-0 bg-gray-500 opacity-75"
|
||||
data-id="modal_backdrop" />
|
||||
data-id="modal_backdrop"
|
||||
/>
|
||||
</div>
|
||||
<span
|
||||
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||
aria-hidden="true">​</span>
|
||||
aria-hidden="true">​</span
|
||||
>
|
||||
<div
|
||||
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
||||
role="dialog"
|
||||
aria-modal="true"
|
||||
aria-labelledby="modal-headline">
|
||||
aria-labelledby="modal-headline"
|
||||
>
|
||||
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||
<div class="sm:flex sm:items-start">
|
||||
<div
|
||||
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
|
||||
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
|
||||
>
|
||||
<svg
|
||||
class="h-6 w-6 text-blue-600"
|
||||
fill="currentColor"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
width="24"
|
||||
height="24"><path fill="none" d="M0 0h24v24H0z" />
|
||||
height="24"
|
||||
><path fill="none" d="M0 0h24v24H0z" />
|
||||
<path
|
||||
fill="currentColor"
|
||||
d="M22 10v10a1 1 0 01-1 1H3a1 1 0 01-1-1V10h20zm0-2H2V4a1 1 0 011-1h18a1 1 0 011 1v4zm-7 8v2h4v-2h-4z" /></svg>
|
||||
d="M22 10v10a1 1 0 01-1 1H3a1 1 0 01-1-1V10h20zm0-2H2V4a1 1 0 011-1h18a1 1 0 011 1v4zm-7 8v2h4v-2h-4z"
|
||||
/></svg
|
||||
>
|
||||
</div>
|
||||
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||
{$_('enter-payment')}
|
||||
{$_("enter-payment")}
|
||||
</h3>
|
||||
<div class="mt-2 mb-6">
|
||||
<p class="text-sm text-gray-500">
|
||||
{$_('you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount')}
|
||||
{$_(
|
||||
"you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount"
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid grid-cols gap-6">
|
||||
<div class="w-full">
|
||||
<label
|
||||
for="token"
|
||||
class="block text-sm font-medium text-gray-700">{$_('paid-amount')}</label>
|
||||
<div class="inline-flex border-gray-300 border rounded-l-md rounded-r-md bg-gray-50 text-gray-500 w-full">
|
||||
class="block text-sm font-medium text-gray-700"
|
||||
>{$_("paid-amount")}</label
|
||||
>
|
||||
<div
|
||||
class="inline-flex border-gray-300 border rounded-l-md rounded-r-md bg-gray-50 text-gray-500 w-full"
|
||||
>
|
||||
<input
|
||||
autocomplete="off"
|
||||
class:border-red-500={!is_paid_amount_valid}
|
||||
@ -157,21 +167,27 @@
|
||||
step="0.01"
|
||||
name="donation_amount_eur"
|
||||
class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm p-2"
|
||||
placeholder="2.00" />
|
||||
placeholder="2.00"
|
||||
/>
|
||||
<button
|
||||
on:click={
|
||||
()=>{
|
||||
paid_amount_input=paid_amount_input = (original_data.amount/100).toFixed(2);
|
||||
}
|
||||
}
|
||||
class="inline-flex items-center p-r-2 text-indigo-300 hover:text-indigo-700 text-sm">MAX</button>
|
||||
on:click={() => {
|
||||
paid_amount_input = paid_amount_input = (
|
||||
original_data.amount / 100
|
||||
).toFixed(2);
|
||||
}}
|
||||
class="inline-flex items-center p-r-2 text-indigo-300 hover:text-indigo-700 text-sm"
|
||||
>MAX</button
|
||||
>
|
||||
<span
|
||||
class="inline-flex items-center px-3 rounded-r-md border border-gray-300 bg-gray-50 text-gray-500 text-sm">€</span>
|
||||
class="inline-flex items-center px-3 rounded-r-md border border-gray-300 bg-gray-50 text-gray-500 text-sm"
|
||||
>€</span
|
||||
>
|
||||
</div>
|
||||
{#if !is_paid_amount_valid}
|
||||
<span
|
||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
||||
{$_('payment-amount-must-be-greater-than-0-00eur')}
|
||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1"
|
||||
>
|
||||
{$_("payment-amount-must-be-greater-than-0-00eur")}
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
||||
@ -185,16 +201,18 @@
|
||||
class:opacity-50={!createbtnenabled}
|
||||
on:click={submit}
|
||||
type="button"
|
||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
||||
{$_('save-changes')}
|
||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||
>
|
||||
{$_("save-changes")}
|
||||
</button>
|
||||
<button
|
||||
on:click={() => {
|
||||
payment_modal_open = false;
|
||||
}}
|
||||
type="button"
|
||||
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
|
||||
{$_('cancel')}
|
||||
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
|
||||
>
|
||||
{$_("cancel")}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
21
src/components/donations/DonationTableAction.svelte
Normal file
21
src/components/donations/DonationTableAction.svelte
Normal file
@ -0,0 +1,21 @@
|
||||
<script>
|
||||
import { _ } from "svelte-i18n";
|
||||
import TableActions from "../shared/TableActions.svelte";
|
||||
|
||||
export let detailsLink;
|
||||
export let detailsAction;
|
||||
export let deleteEnabled;
|
||||
export let deleteAction;
|
||||
export let paymentAction;
|
||||
</script>
|
||||
|
||||
<button
|
||||
on:click={paymentAction}
|
||||
class="text-[#025a21] hover:text-green-900 mr-4">{$_("enter-payment")}</button
|
||||
>
|
||||
<TableActions
|
||||
bind:detailsAction
|
||||
bind:detailsLink
|
||||
bind:deleteAction
|
||||
bind:deleteEnabled
|
||||
/>
|
@ -1,8 +1,7 @@
|
||||
<script>
|
||||
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
||||
import { DonationService, DonorService } from "@odit/lfk-client-js";
|
||||
import { _ } from "svelte-i18n";
|
||||
import { DonationService } from "@odit/lfk-client-js";
|
||||
import store from "../../store";
|
||||
import Toastify from "toastify-js";
|
||||
import DonationsEmptyState from "./DonationsEmptyState.svelte";
|
||||
import AddDonationPaymentModal from "./AddDonationPaymentModal.svelte";
|
||||
import { onMount } from "svelte";
|
||||
@ -19,12 +18,13 @@
|
||||
import TableBottom from "../shared/TableBottom.svelte";
|
||||
import InputElement from "../shared/InputElement.svelte";
|
||||
import TableHeader from "../shared/TableHeader.svelte";
|
||||
import TableActions from "../shared/TableActions.svelte";
|
||||
import DonationDonor from "./DonationDonor.svelte";
|
||||
import DonationRunner from "./DonationRunner.svelte";
|
||||
import DonationStatus from "./DonationStatus.svelte";
|
||||
import DonationTableAction from "./DonationTableAction.svelte";
|
||||
$: searchvalue = "";
|
||||
$: active_deletes = [];
|
||||
$: active_edits = [];
|
||||
$: selectedDonations =
|
||||
$table?.getSelectedRowModel().rows.map((row) => row.original) || [];
|
||||
$: selected =
|
||||
@ -44,13 +44,6 @@
|
||||
}));
|
||||
};
|
||||
|
||||
function open_payment_modal(donation) {
|
||||
editable = Object.assign({}, donation);
|
||||
original_data = Object.assign({}, donation);
|
||||
paid_amount_input = (donation.paidAmount / 100).toFixed(2);
|
||||
payment_modal_open = true;
|
||||
}
|
||||
|
||||
//Section table
|
||||
const columns = [
|
||||
{
|
||||
@ -119,13 +112,18 @@
|
||||
accessorKey: "actions",
|
||||
header: () => $_("action"),
|
||||
cell: (info) => {
|
||||
return renderComponent(TableActions, {
|
||||
return renderComponent(DonationTableAction, {
|
||||
detailsLink: `./${info.row.original.id}`,
|
||||
deleteAction: () => {
|
||||
active_deletes = current_donations.filter(
|
||||
(r) => r.id == info.row.original.id
|
||||
);
|
||||
},
|
||||
paymentAction: () => {
|
||||
active_edits = current_donations.filter(
|
||||
(r) => r.id == info.row.original.id
|
||||
);
|
||||
},
|
||||
deleteEnabled:
|
||||
store.state.jwtinfo.userdetails.permissions.includes(
|
||||
"DONATION:DELETE"
|
||||
@ -177,11 +175,18 @@
|
||||
</script>
|
||||
|
||||
<AddDonationPaymentModal
|
||||
bind:current_donations
|
||||
bind:original_data
|
||||
bind:editable
|
||||
bind:paid_amount_input
|
||||
bind:payment_modal_open
|
||||
original_data={active_edits[0]}
|
||||
payment_modal_open={active_edits.length > 0}
|
||||
paid_amount_input={(active_edits[0]?.paidAmount || 0) / 100}
|
||||
on:created={(event) => {
|
||||
current_donations[
|
||||
current_donations.findIndex((d) => d.id === event.detail.donation.id)
|
||||
].paidAmount = event.detail.donation.paidAmount;
|
||||
options.update((options) => ({
|
||||
...options,
|
||||
data: current_donations,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
{#if store.state.jwtinfo.userdetails.permissions.includes("DONATION:GET")}
|
||||
{#if !dataLoaded}
|
||||
|
Loading…
x
Reference in New Issue
Block a user