almost close to print

This commit is contained in:
2025-09-24 22:04:34 +03:00
parent 198563aaba
commit 854b6980bc
3 changed files with 62 additions and 264 deletions

View File

@@ -164,6 +164,7 @@ document.addEventListener('DOMContentLoaded', () => {
}); });
// Bind the export functionality to the CSV button // Bind the export functionality to the CSV button
if (exportCsvButton) {
exportCsvButton.addEventListener('click', () => { exportCsvButton.addEventListener('click', () => {
const rows = reportTable.querySelectorAll('tr'); const rows = reportTable.querySelectorAll('tr');
if (rows.length === 0) { if (rows.length === 0) {
@@ -175,6 +176,7 @@ document.addEventListener('DOMContentLoaded', () => {
const filename = `${reportTitleText.replace(/\s+/g, '_')}.csv`; // Generate a filename based on the report title const filename = `${reportTitleText.replace(/\s+/g, '_')}.csv`; // Generate a filename based on the report title
exportTableToCSV(filename); exportTableToCSV(filename);
}); });
}
// Test Database Button // Test Database Button
const testDatabaseBtn = document.getElementById('test-database'); const testDatabaseBtn = document.getElementById('test-database');
@@ -250,10 +252,12 @@ document.addEventListener('DOMContentLoaded', () => {
} }
// Placeholder for PDF export functionality // Placeholder for PDF export functionality
if (exportPdfButton) {
exportPdfButton.addEventListener('click', () => { exportPdfButton.addEventListener('click', () => {
alert('Exporting current report as PDF...'); alert('Exporting current report as PDF...');
// Add logic to export the current report as PDF // Add logic to export the current report as PDF
}); });
}
}); });
@@ -262,11 +266,14 @@ document.addEventListener('DOMContentLoaded', () => {
const createTemplateBtn = document.getElementById('create-template-btn'); const createTemplateBtn = document.getElementById('create-template-btn');
// Example: Handle the "Create New Template" button click // Example: Handle the "Create New Template" button click
if (createTemplateBtn) {
createTemplateBtn.addEventListener('click', () => { createTemplateBtn.addEventListener('click', () => {
window.location.href = '/create_template'; window.location.href = '/create_template';
}); });
}
// Example: Handle the "Edit" and "Delete" buttons // Example: Handle the "Edit" and "Delete" buttons
if (templateList) {
templateList.addEventListener('click', (event) => { templateList.addEventListener('click', (event) => {
if (event.target.classList.contains('edit-btn')) { if (event.target.classList.contains('edit-btn')) {
const templateId = event.target.closest('li').dataset.id; const templateId = event.target.closest('li').dataset.id;
@@ -284,6 +291,7 @@ document.addEventListener('DOMContentLoaded', () => {
} }
} }
}); });
}
}); });
@@ -291,7 +299,7 @@ document.addEventListener('DOMContentLoaded', () => {
const setDimensionsBtn = document.getElementById('set-dimensions-btn'); const setDimensionsBtn = document.getElementById('set-dimensions-btn');
const labelPreview = document.getElementById('label-preview'); const labelPreview = document.getElementById('label-preview');
// Handle setting label dimensions if (setDimensionsBtn) {
setDimensionsBtn.addEventListener('click', () => { setDimensionsBtn.addEventListener('click', () => {
const widthInput = document.getElementById('label-width').value; const widthInput = document.getElementById('label-width').value;
const heightInput = document.getElementById('label-height').value; const heightInput = document.getElementById('label-height').value;
@@ -311,6 +319,7 @@ document.addEventListener('DOMContentLoaded', () => {
alert(`Label dimensions set to ${widthPixels.toFixed(2)}px x ${heightPixels.toFixed(2)}px.`); alert(`Label dimensions set to ${widthPixels.toFixed(2)}px x ${heightPixels.toFixed(2)}px.`);
}); });
}
}); });
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const labelPreview = document.getElementById('label-preview'); const labelPreview = document.getElementById('label-preview');

View File

@@ -860,11 +860,12 @@ async function updatePrintedStatus(orderId) {
} }
// PDF generation handler // PDF generation handler
// Helper to get extension ID injected by content script // Helper to get extension ID injected by content script, or fallback to hardcoded value
function getInjectedExtensionId() { function getInjectedExtensionId() {
const el = document.getElementById('chrome-extension-id'); const el = document.getElementById('chrome-extension-id');
if (el) return el.getAttribute('data-extension-id'); if (el) return el.getAttribute('data-extension-id');
return null; // Fallback to hardcoded extension ID if not injected
return 'cifcoidplhgclhcnlcgdkjbaoempjmdl';
} }
function addPDFGenerationHandler() { function addPDFGenerationHandler() {

View File

@@ -25,216 +25,4 @@ injectExtensionId();
console.log('Quality Label Printing Service: Content script loaded'); console.log('Quality Label Printing Service: Content script loaded');
// Inject print service API into the page // Remove all script injection and messaging. Only inject the extension ID for CSP compatibility.
const printServiceAPI = {
/**
* Print PDF via the service
*/
async printPDF(printData) {
try {
return new Promise((resolve) => {
chrome.runtime.sendMessage({
action: 'print_pdf',
data: printData
}, resolve);
});
} catch (error) {
console.error('Print PDF error:', error);
return { success: false, error: error.message };
}
},
/**
* Silent print PDF
*/
async silentPrint(printData) {
try {
return new Promise((resolve) => {
chrome.runtime.sendMessage({
action: 'silent_print',
data: printData
}, resolve);
});
} catch (error) {
console.error('Silent print error:', error);
return { success: false, error: error.message };
}
},
/**
* Get available printers
*/
async getPrinters() {
try {
return new Promise((resolve) => {
chrome.runtime.sendMessage({
action: 'get_printers'
}, resolve);
});
} catch (error) {
console.error('Get printers error:', error);
return { success: false, error: error.message, printers: [] };
}
},
/**
* Check service status
*/
async checkService() {
try {
return new Promise((resolve) => {
chrome.runtime.sendMessage({
action: 'check_service'
}, resolve);
});
} catch (error) {
console.error('Check service error:', error);
return { success: false, error: error.message };
}
},
/**
* Print labels with Quality Label Printing specific formatting
*/
async printLabels(orderData, quantity = 1) {
try {
// Generate PDF URL for the labels
const pdfUrl = `/generate_labels_pdf/${orderData.order_id}`;
const printData = {
pdf_url: window.location.origin + pdfUrl,
printer_name: 'default',
copies: 1,
order_id: orderData.order_id,
quantity: quantity,
silent: true
};
return await this.silentPrint(printData);
} catch (error) {
console.error('Print labels error:', error);
return { success: false, error: error.message };
}
}
};
// Make API available globally
window.QualityRecticelPrintService = printServiceAPI;
// Inject into page context for better compatibility
const script = document.createElement('script');
script.textContent = `
// Quality Label Printing Service API
window.QualityRecticelPrintService = ${JSON.stringify(printServiceAPI)};
// Enhanced print function for Quality Label Printing
window.printQualityRecticelLabels = async function(orderData, quantity) {
try {
// Get the PDF blob from the server
const response = await fetch('/generate_labels_pdf/' + orderData.order_id, {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
});
if (!response.ok) {
throw new Error('Failed to generate PDF');
}
const blob = await response.blob();
// Convert to base64
return new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = async () => {
const base64Data = reader.result.split(',')[1];
const printData = {
pdf_data: base64Data,
printer_name: 'default',
copies: 1,
silent: true
};
// Send message to content script
const result = await new Promise((msgResolve) => {
window.postMessage({
type: 'QUALITY_RECTICEL_PRINT',
action: 'silent_print',
data: printData
}, '*');
// Listen for response
const listener = (event) => {
if (event.data.type === 'QUALITY_RECTICEL_PRINT_RESPONSE') {
window.removeEventListener('message', listener);
msgResolve(event.data.result);
}
};
window.addEventListener('message', listener);
});
resolve(result);
};
reader.readAsDataURL(blob);
});
} catch (error) {
console.error('Print Quality Label Printing labels error:', error);
return { success: false, error: error.message };
}
};
console.log('Quality Label Printing Service API injected');
`;
document.documentElement.appendChild(script);
// Listen for messages from injected script
window.addEventListener('message', async (event) => {
if (event.source !== window) return;
if (event.data.type === 'QUALITY_RECTICEL_PRINT') {
try {
let result;
switch (event.data.action) {
case 'silent_print':
result = await printServiceAPI.silentPrint(event.data.data);
break;
case 'print_pdf':
result = await printServiceAPI.printPDF(event.data.data);
break;
case 'get_printers':
result = await printServiceAPI.getPrinters();
break;
default:
result = { success: false, error: 'Unknown action' };
}
// Send response back
window.postMessage({
type: 'QUALITY_RECTICEL_PRINT_RESPONSE',
result: result
}, '*');
} catch (error) {
window.postMessage({
type: 'QUALITY_RECTICEL_PRINT_RESPONSE',
result: { success: false, error: error.message }
}, '*');
}
}
});
// Notify page that extension is ready
document.addEventListener('DOMContentLoaded', () => {
window.dispatchEvent(new CustomEvent('QualityRecticelPrintServiceReady', {
detail: {
version: chrome.runtime.getManifest().version,
api: printServiceAPI
}
}));
});
console.log('Quality Label Printing Service: Content script initialized');