Merge pull request 'fix(InvoiceOutGlobal): parallelism' (!900) from warmFix_invoiceOut_Global into dev
gitea/salix-front/pipeline/head This commit looks good Details

Reviewed-on: #900
Reviewed-by: Jorge Penadés <jorgep@verdnatura.es>
This commit is contained in:
Alex Moreno 2024-11-07 09:43:18 +00:00
commit 5d0c91187e
2 changed files with 20 additions and 23 deletions

View File

@ -13,7 +13,7 @@ const { t } = useI18n();
const invoiceOutGlobalStore = useInvoiceOutGlobalStore(); const invoiceOutGlobalStore = useInvoiceOutGlobalStore();
// invoiceOutGlobalStore state and getters // invoiceOutGlobalStore state and getters
const { initialDataLoading, formInitialData, invoicing, status } = const { initialDataLoading, formInitialData, status } =
storeToRefs(invoiceOutGlobalStore); storeToRefs(invoiceOutGlobalStore);
// invoiceOutGlobalStore actions // invoiceOutGlobalStore actions
@ -151,9 +151,8 @@ onMounted(async () => {
rounded rounded
/> />
</div> </div>
<QBtn <QBtn
v-if="!invoicing" v-if="!getStatus || getStatus === 'stopping'"
:label="t('invoiceOut')" :label="t('invoiceOut')"
type="submit" type="submit"
color="primary" color="primary"
@ -163,7 +162,7 @@ onMounted(async () => {
dense dense
/> />
<QBtn <QBtn
v-if="invoicing" v-else
:label="t('stop')" :label="t('stop')"
color="primary" color="primary"
class="q-mt-md full-width" class="q-mt-md full-width"

View File

@ -93,7 +93,7 @@ export const useInvoiceOutGlobalStore = defineStore({
async makeInvoice(formData, clientsToInvoice) { async makeInvoice(formData, clientsToInvoice) {
this.invoicing = true; this.invoicing = true;
this.status = 'packageInvoicing'; const promises = [];
try { try {
this.printer = formData.printer; this.printer = formData.printer;
const params = { const params = {
@ -118,10 +118,11 @@ export const useInvoiceOutGlobalStore = defineStore({
); );
throw new Error("There aren't addresses to invoice"); throw new Error("There aren't addresses to invoice");
} }
this.status = 'invoicing';
for (const address of this.addresses) { for (let index = 0; index < this.parallelism; index++) {
await this.invoiceClient(address, formData); promises.push(this.invoiceClient(formData, index));
} }
await Promise.all(promises);
} catch (err) { } catch (err) {
this.handleError(err); this.handleError(err);
} }
@ -171,17 +172,14 @@ export const useInvoiceOutGlobalStore = defineStore({
} }
}, },
async invoiceClient(address, formData) { async invoiceClient(formData, index) {
try { const address = this.addresses[index];
if (this.nRequests === this.parallelism || this.isInvoicing) return; if (!address || !this.status || this.status == 'stopping') {
this.status = 'stopping';
if (this.status === 'stopping') {
if (this.nRequests) return;
this.invoicing = false; this.invoicing = false;
this.status = 'done';
return; return;
} }
try {
const params = { const params = {
clientId: address.clientId, clientId: address.clientId,
addressId: address.id, addressId: address.id,
@ -191,13 +189,11 @@ export const useInvoiceOutGlobalStore = defineStore({
serialType: formData.serialType, serialType: formData.serialType,
}; };
this.status = 'invoicing';
this.invoicing = true; this.invoicing = true;
const { data } = await axios.post('InvoiceOuts/invoiceClient', params); const { data } = await axios.post('InvoiceOuts/invoiceClient', params);
if (data) await this.makePdfAndNotify(data, address); if (data) await this.makePdfAndNotify(data, address);
this.addressIndex++;
this.isInvoicing = false; this.isInvoicing = false;
} catch (err) { } catch (err) {
if (err?.response?.status >= 400 && err?.response?.status < 500) { if (err?.response?.status >= 400 && err?.response?.status < 500) {
@ -205,13 +201,16 @@ export const useInvoiceOutGlobalStore = defineStore({
return; return;
} else { } else {
this.invoicing = false; this.invoicing = false;
this.status = 'done';
notify( notify(
'invoiceOut.globalInvoices.errors.criticalInvoiceError', 'invoiceOut.globalInvoices.errors.criticalInvoiceError',
'negative' 'negative'
); );
throw new Error('Critical invoicing error, process stopped'); throw new Error('Critical invoicing error, process stopped');
} }
} finally {
this.addressIndex++;
if (this.status != 'stopping')
await this.invoiceClient(formData, this.addressIndex);
} }
}, },
@ -234,7 +233,6 @@ export const useInvoiceOutGlobalStore = defineStore({
handleError(err) { handleError(err) {
this.invoicing = false; this.invoicing = false;
this.status = null;
throw err; throw err;
}, },
@ -279,7 +277,7 @@ export const useInvoiceOutGlobalStore = defineStore({
return 0; return 0;
} }
let porcentaje = (state.addressIndex / this.getNAddresses) * 100; let porcentaje = (state.addressIndex / this.getNAddresses) * 100;
return porcentaje; return porcentaje?.toFixed(2);
}, },
getAddressNumber(state) { getAddressNumber(state) {
return state.addressIndex; return state.addressIndex;