fix(InvoiceOutGlobal): parallelism #900

Merged
alexm merged 4 commits from warmFix_invoiceOut_Global into dev 2024-11-07 09:43:19 +00:00
2 changed files with 20 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'"
Review

El nombre getStatus no me parece correcto. Como veo que puede implicar un refactor algo tedioso vale, pero yo crearía una tarea para refactorizar la store y no tener que hacer esas cosas raras con el computed. Las stores ya son reactivas.

El nombre getStatus no me parece correcto. Como veo que puede implicar un refactor algo tedioso vale, pero yo crearía una tarea para refactorizar la store y no tener que hacer esas cosas raras con el computed. Las stores ya son reactivas.
: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,14 @@ 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;
}
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 +189,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) {
Review

habiamos dicho que los errores los maneje quasar, si se quiere que el usuario pueda notificar de este error (cuando se añada el btn de notificar) no tenemos que usar useNotify(). Se puede crear tarea.

habiamos dicho que los errores los maneje quasar, si se quiere que el usuario pueda notificar de este error (cuando se añada el btn de notificar) no tenemos que usar useNotify(). Se puede crear tarea.
Review

En este caso es correcto pq no se quiere que el error interrumpa el proceso

En este caso es correcto pq no se quiere que el error interrumpa el proceso
@ -205,13 +201,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 +233,6 @@ export const useInvoiceOutGlobalStore = defineStore({
handleError(err) {
this.invoicing = false;
this.status = null;
throw err;
},
@ -279,7 +277,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;