fix(InvoiceOutGlobal): parallelism

This commit is contained in:
Alex Moreno 2024-11-06 13:52:59 +01:00
parent e26fdfe4a3
commit a2bbf4474d
2 changed files with 21 additions and 23 deletions

View File

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

View File

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