use analysis order id as valis tellimuse id (#92)
* use order analysis id as valis tellimuse id * send analysis order id in xml
This commit is contained in:
@@ -6,11 +6,12 @@ type ProcessedMessage = {
|
||||
hasPartialAnalysisResponse: boolean;
|
||||
hasFullAnalysisResponse: boolean;
|
||||
medusaOrderId: string | undefined;
|
||||
analysisOrderId: number | undefined;
|
||||
};
|
||||
|
||||
type GroupedResults = {
|
||||
processed: Pick<ProcessedMessage, 'messageId' | 'medusaOrderId'>[];
|
||||
waitingForResults: Pick<ProcessedMessage, 'messageId' | 'medusaOrderId'>[];
|
||||
processed: Pick<ProcessedMessage, 'messageId' | 'analysisOrderId'>[];
|
||||
waitingForResults: Pick<ProcessedMessage, 'messageId' | 'analysisOrderId'>[];
|
||||
};
|
||||
|
||||
export default async function syncAnalysisResults() {
|
||||
@@ -37,14 +38,14 @@ export default async function syncAnalysisResults() {
|
||||
}
|
||||
|
||||
const groupedResults = processedMessages.reduce((acc, result) => {
|
||||
if (result.medusaOrderId) {
|
||||
if (result.analysisOrderId) {
|
||||
if (result.hasAnalysisResponse) {
|
||||
if (!acc.processed) {
|
||||
acc.processed = [];
|
||||
}
|
||||
acc.processed.push({
|
||||
messageId: result.messageId,
|
||||
medusaOrderId: result.medusaOrderId,
|
||||
analysisOrderId: result.analysisOrderId,
|
||||
});
|
||||
} else {
|
||||
if (!acc.waitingForResults) {
|
||||
@@ -52,7 +53,7 @@ export default async function syncAnalysisResults() {
|
||||
}
|
||||
acc.waitingForResults.push({
|
||||
messageId: result.messageId,
|
||||
medusaOrderId: result.medusaOrderId,
|
||||
analysisOrderId: result.analysisOrderId,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ export async function POST(request: NextRequest) {
|
||||
},
|
||||
orderedAnalysisElementsIds: idsToSend.map(({ analysisElementId }) => analysisElementId).filter(Boolean) as number[],
|
||||
orderedAnalysesIds: idsToSend.map(({ analysisId }) => analysisId).filter(Boolean) as number[],
|
||||
orderId: medusaOrderId,
|
||||
orderId: medreportOrder.id,
|
||||
orderCreatedAt: new Date(medreportOrder.created_at),
|
||||
});
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ export async function POST(request: Request) {
|
||||
},
|
||||
orderedAnalysisElementsIds: orderedAnalysisElementsIds.map(({ analysisElementId }) => analysisElementId).filter(Boolean) as number[],
|
||||
orderedAnalysesIds: orderedAnalysisElementsIds.map(({ analysisId }) => analysisId).filter(Boolean) as number[],
|
||||
orderId: medusaOrderId,
|
||||
orderId: analysisOrder.id,
|
||||
orderCreatedAt: new Date(analysisOrder.created_at),
|
||||
});
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ async function OrderConfirmedPage(props: {
|
||||
}) {
|
||||
const params = await props.params;
|
||||
|
||||
const order = await getAnalysisOrder({ orderId: Number(params.orderId) }).catch(() => null);
|
||||
const order = await getAnalysisOrder({ analysisOrderId: Number(params.orderId) }).catch(() => null);
|
||||
if (!order) {
|
||||
redirect(pathsConfig.app.myOrders);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ async function OrderConfirmedPage(props: {
|
||||
}) {
|
||||
const params = await props.params;
|
||||
|
||||
const order = await getAnalysisOrder({ orderId: Number(params.orderId) }).catch(() => null);
|
||||
const order = await getAnalysisOrder({ analysisOrderId: Number(params.orderId) }).catch(() => null);
|
||||
if (!order) {
|
||||
redirect(pathsConfig.app.myOrders);
|
||||
}
|
||||
|
||||
@@ -194,12 +194,13 @@ export async function readPrivateMessageResponse({
|
||||
excludedMessageIds,
|
||||
}: {
|
||||
excludedMessageIds: string[];
|
||||
}): Promise<{ messageId: string | null; hasAnalysisResponse: boolean; hasPartialAnalysisResponse: boolean; hasFullAnalysisResponse: boolean; medusaOrderId: string | undefined }> {
|
||||
}): Promise<{ messageId: string | null; hasAnalysisResponse: boolean; hasPartialAnalysisResponse: boolean; hasFullAnalysisResponse: boolean; medusaOrderId: string | undefined; analysisOrderId: number | undefined }> {
|
||||
let messageId: string | null = null;
|
||||
let hasAnalysisResponse = false;
|
||||
let hasPartialAnalysisResponse = false;
|
||||
let hasFullAnalysisResponse = false;
|
||||
let medusaOrderId: string | undefined = undefined;
|
||||
let analysisOrderId: number | undefined = undefined;
|
||||
|
||||
try {
|
||||
const privateMessage = await getLatestPrivateMessageListItem({ excludedMessageIds });
|
||||
@@ -212,6 +213,7 @@ export async function readPrivateMessageResponse({
|
||||
hasPartialAnalysisResponse: false,
|
||||
hasFullAnalysisResponse: false,
|
||||
medusaOrderId: undefined,
|
||||
analysisOrderId: undefined
|
||||
};
|
||||
}
|
||||
|
||||
@@ -220,16 +222,15 @@ export async function readPrivateMessageResponse({
|
||||
);
|
||||
|
||||
const messageResponse = privateMessageContent?.Saadetis?.Vastus;
|
||||
medusaOrderId = privateMessageContent?.Saadetis?.Tellimus?.ValisTellimuseId || messageResponse?.ValisTellimuseId;
|
||||
analysisOrderId = Number(privateMessageContent?.Saadetis?.Tellimus?.ValisTellimuseId || messageResponse?.ValisTellimuseId);
|
||||
|
||||
const hasInvalidOrderId = !medusaOrderId || !medusaOrderId.toString().startsWith('order_');
|
||||
const hasInvalidOrderId = isNaN(analysisOrderId)
|
||||
|
||||
if (hasInvalidOrderId || !messageResponse) {
|
||||
await createMedipostActionLog({
|
||||
action: 'sync_analysis_results_from_medipost',
|
||||
xml: privateMessageXml,
|
||||
hasAnalysisResults: false,
|
||||
medusaOrderId: hasInvalidOrderId ? undefined : medusaOrderId,
|
||||
});
|
||||
return {
|
||||
messageId,
|
||||
@@ -237,9 +238,13 @@ export async function readPrivateMessageResponse({
|
||||
hasPartialAnalysisResponse: false,
|
||||
hasFullAnalysisResponse: false,
|
||||
medusaOrderId: hasInvalidOrderId ? undefined : medusaOrderId,
|
||||
analysisOrderId: hasInvalidOrderId ? undefined : analysisOrderId
|
||||
};
|
||||
}
|
||||
|
||||
const analysisOrder = await getAnalysisOrder({ analysisOrderId: analysisOrderId })
|
||||
medusaOrderId = analysisOrder.medusa_order_id;
|
||||
|
||||
let order: Tables<{ schema: 'medreport' }, 'analysis_orders'>;
|
||||
try {
|
||||
order = await getAnalysisOrder({ medusaOrderId });
|
||||
@@ -264,7 +269,7 @@ export async function readPrivateMessageResponse({
|
||||
console.warn(`Failed to process private message id=${messageId}, message=${(e as Error).message}`);
|
||||
}
|
||||
|
||||
return { messageId, hasAnalysisResponse, hasPartialAnalysisResponse, hasFullAnalysisResponse, medusaOrderId };
|
||||
return { messageId, hasAnalysisResponse, hasPartialAnalysisResponse, hasFullAnalysisResponse, medusaOrderId, analysisOrderId };
|
||||
}
|
||||
|
||||
async function saveAnalysisGroup(
|
||||
@@ -616,7 +621,7 @@ export async function sendOrderToMedipost({
|
||||
lastName: account.last_name ?? '',
|
||||
phone: account.phone ?? '',
|
||||
},
|
||||
orderId: medusaOrderId,
|
||||
orderId: medreportOrder.id,
|
||||
orderCreatedAt: new Date(medreportOrder.created_at),
|
||||
comment: '',
|
||||
});
|
||||
|
||||
@@ -68,7 +68,7 @@ export async function composeOrderTestResponseXML({
|
||||
};
|
||||
orderedAnalysisElementsIds: number[];
|
||||
orderedAnalysesIds: number[];
|
||||
orderId: string;
|
||||
orderId: number;
|
||||
orderCreatedAt: Date;
|
||||
}) {
|
||||
const analysisElements = await getAnalysisElementsAdmin({ ids: orderedAnalysisElementsIds });
|
||||
|
||||
@@ -45,7 +45,7 @@ export async function composeOrderXML({
|
||||
lastName: string;
|
||||
phone: string;
|
||||
};
|
||||
orderId: string;
|
||||
orderId: number;
|
||||
orderCreatedAt: Date;
|
||||
comment?: string;
|
||||
}) {
|
||||
|
||||
@@ -82,10 +82,10 @@ export async function updateAnalysisOrderStatus({
|
||||
|
||||
export async function getAnalysisOrder({
|
||||
medusaOrderId,
|
||||
orderId,
|
||||
analysisOrderId,
|
||||
}: {
|
||||
medusaOrderId?: string;
|
||||
orderId?: number;
|
||||
analysisOrderId?: number;
|
||||
}) {
|
||||
const query = getSupabaseServerAdminClient()
|
||||
.schema('medreport')
|
||||
@@ -93,15 +93,15 @@ export async function getAnalysisOrder({
|
||||
.select('*')
|
||||
if (medusaOrderId) {
|
||||
query.eq('medusa_order_id', medusaOrderId);
|
||||
} else if (orderId) {
|
||||
query.eq('id', orderId);
|
||||
} else if (analysisOrderId) {
|
||||
query.eq('id', analysisOrderId);
|
||||
} else {
|
||||
throw new Error('Either medusaOrderId or orderId must be provided');
|
||||
}
|
||||
|
||||
const { data: order, error } = await query.single();
|
||||
if (error) {
|
||||
throw new Error(`Failed to get order by medusaOrderId=${medusaOrderId} or orderId=${orderId}, message=${error.message}, data=${JSON.stringify(order)}`);
|
||||
throw new Error(`Failed to get order by medusaOrderId=${medusaOrderId} or analysisOrderId=${analysisOrderId}, message=${error.message}, data=${JSON.stringify(order)}`);
|
||||
}
|
||||
return order;
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ const isProd = process.env.NODE_ENV === 'production';
|
||||
export const getPais = (
|
||||
sender: string,
|
||||
recipient: string,
|
||||
createdAt: Date,
|
||||
orderId: string,
|
||||
orderId: number,
|
||||
packageName = "OL",
|
||||
) => {
|
||||
if (isProd) {
|
||||
|
||||
@@ -54,7 +54,6 @@ export const listOrders = async (
|
||||
},
|
||||
headers,
|
||||
next,
|
||||
cache: "force-cache",
|
||||
})
|
||||
.then(({ orders }) => orders)
|
||||
.catch((err) => medusaError(err))
|
||||
|
||||
@@ -73,7 +73,6 @@ export const listProducts = async ({
|
||||
},
|
||||
headers,
|
||||
next,
|
||||
cache: "force-cache",
|
||||
}
|
||||
)
|
||||
.then(({ products, count }) => {
|
||||
|
||||
Reference in New Issue
Block a user