fix: CoR server-side PDF, driver→Employee, customer list, address fix, button enable

This commit is contained in:
Westech Admin
2026-05-22 06:02:51 +00:00
parent be06bca0cf
commit 313da27e56
2 changed files with 213 additions and 115 deletions
+83 -53
View File
@@ -11,15 +11,15 @@ frappe.pages['intake'].on_page_load = function(wrapper) {
}, 'add');
page.add_inner_button('Refresh', function() {
load_recent_pallets();
load_customer_list();
});
$(wrapper).find('.layout-main-section').html(`
<div class="intake-station" style="padding: 20px;">
<div id="intake-form-container" style="display:none;">
<div id="intake-form-container">
<div class="card" style="margin-bottom: 20px;">
<div class="card-header" style="background: linear-gradient(135deg, #6f42c1, #28a745); color: white; padding: 15px;">
<h4 style="margin:0; color: white;">New Customer</h4>
<h4 style="margin:0; color: white;">Customer Management</h4>
</div>
<div class="card-body" style="padding: 20px;">
<form id="intake-form">
@@ -164,27 +164,25 @@ frappe.pages['intake'].on_page_load = function(wrapper) {
</div>
</div>
<div id="recent-pallets">
<div id="recent-pallets" style="display:none;">
<div class="card">
<div class="card-header" style="background: #f8f9fa;">
<h5 style="margin:0;">Recent Pallets</h5>
<div class="card-header" style="background: #f8f9fa; display: flex; justify-content: space-between; align-items: center;">
<h5 style="margin:0;">Customers</h5>
<input type="text" id="customer-search" class="form-control" placeholder="Search..." style="width: 300px;">
</div>
<div class="card-body" style="padding: 0;">
<table class="table table-striped table-hover" id="pallet-table">
<table class="table table-striped table-hover" id="customer-table">
<thead>
<tr>
<th>Status</th>
<th>Customer</th>
<th>Driver</th>
<th>Received</th>
<th>RED/R2</th>
<th>Items</th>
<th>Weight</th>
<th>Actions</th>
<th>Company</th>
<th>Contact</th>
<th>Phone</th>
<th>Address</th>
<th></th>
</tr>
</thead>
<tbody id="pallet-tbody">
<tr><td colspan="8" class="text-center">Loading...</td></tr>
<tbody id="customer-tbody">
<tr><td colspan="5" class="text-center">Loading...</td></tr>
</tbody>
</table>
</div>
@@ -206,7 +204,7 @@ frappe.pages['intake'].on_page_load = function(wrapper) {
}
}, 200);
load_recent_pallets();
load_customer_list();
$('#received_date').on('change', function() {
var d = new Date($(this).val() + 'T12:00:00');
@@ -220,9 +218,7 @@ frappe.pages['intake'].on_page_load = function(wrapper) {
});
$('#btn-cancel').on('click', function() {
$('#intake-form-container').hide();
$('#recent-pallets').show();
clear_form();
show_customer_list();
});
$('#btn-print-labels').on('click', function() {
@@ -233,6 +229,14 @@ frappe.pages['intake'].on_page_load = function(wrapper) {
generate_cor_report();
});
$('#customer-search').on('input', function() {
var q = $(this).val().toLowerCase();
$('#customer-tbody tr').each(function() {
var text = $(this).text().toLowerCase();
$(this).toggle(text.indexOf(q) > -1);
});
});
} catch(e) {
console.error('[INTAKE] FATAL:', e.message, e.stack);
$(wrapper).find('.layout-main-section').html(
@@ -279,7 +283,7 @@ function setup_link_controls() {
df: {
fieldtype: 'Link',
fieldname: 'driver',
options: 'Customer',
options: 'Employee',
label: 'Driver',
placeholder: 'Search driver...',
onchange: function() {}
@@ -322,6 +326,9 @@ function fetch_customer_details(customer_name) {
$('#contact_number').val(phone);
$('#contact_email').val(email);
// Enable CoR button once we have a customer with data
$('#btn-generate-cor').prop('disabled', false);
// Get address — always fetch from Address record for full street+city+state+zip
if (c.customer_primary_address) {
frappe.call({
@@ -410,44 +417,43 @@ function show_intake_form() {
$('#recent-pallets').hide();
}
function load_recent_pallets() {
function show_customer_list() {
$('#intake-form-container').hide();
$('#recent-pallets').show();
clear_form();
load_customer_list();
}
function load_customer_list() {
frappe.call({
method: 'frappe.client.get_list',
args: {
doctype: 'Pallet',
fields: ['name', 'pallet_number', 'status', 'customer_number', 'company_name', 'driver', 'received_date', 'red_r2', 'total_items', 'weights', 'notes'],
limit_page_length: 20,
order_by: 'creation desc'
doctype: 'Customer',
fields: ['name', 'customer_name', 'customer_number', 'mobile_no', 'email_id', 'contact_persons', 'primary_address', 'customer_primary_address'],
limit_page_length: 50,
order_by: 'customer_name asc'
},
callback: function(r) {
var tbody = $('#pallet-tbody');
var tbody = $('#customer-tbody');
tbody.empty();
if (!r.message || r.message.length === 0) {
tbody.append('<tr><td colspan="8" class="text-center">No pallets yet. Click "New Customer" to create one.</td></tr>');
tbody.append('<tr><td colspan="5" class="text-center">No customers found.</td></tr>');
return;
}
r.message.forEach(function(p) {
var status_class = {
'Received': 'info',
'Sorting': 'warning',
'Processing': 'primary',
'Complete': 'success',
'Shipped': 'default'
}[p.status] || 'default';
r.message.forEach(function(c) {
var contactName = '';
if (c.contact_persons) {
var parts = c.contact_persons.split('|');
if (parts.length > 0) contactName = parts[0].trim();
}
tbody.append(
'<tr>' +
'<td><span class="label label-' + status_class + '">' + (p.status || 'Received') + '</span></td>' +
'<td><strong>' + (p.customer_number || '') + '</strong></td>' +
'<td>' + (p.driver || '') + '</td>' +
'<td>' + (p.received_date || '') + '</td>' +
'<td>' + (p.red_r2 || '') + '</td>' +
'<td>' + (p.total_items || 0) + '</td>' +
'<td>' + (p.weights || '') + '</td>' +
'<td>' +
'<button class="btn btn-xs btn-default" onclick="edit_pallet(\'' + p.name + '\')"><i class="fa fa-edit"></i></button> ' +
'<button class="btn btn-xs btn-default" onclick="window.open(\'https://eim.diagalon.com/report/data-tracking?pallet=' + p.name + '\', \'_blank\')"><i class="fa fa-file-pdf-o"></i></button>' +
'</td>' +
'<tr style="cursor:pointer;" onclick="select_customer_from_list(\'' + c.name.replace(/'/g, "\\'") + '\')">' +
'<td><strong>' + (c.customer_name || c.name) + '</strong>' + (c.customer_number ? ' <span class="text-muted">(#' + c.customer_number + ')</span>' : '') + '</td>' +
'<td>' + contactName + '</td>' +
'<td>' + (c.mobile_no || '') + '</td>' +
'<td>' + (c.primary_address ? c.primary_address.replace(/\n/g, ', ') : '') + '</td>' +
'<td><button class="btn btn-xs btn-default"><i class="fa fa-arrow-right"></i></button></td>' +
'</tr>'
);
});
@@ -455,6 +461,11 @@ function load_recent_pallets() {
});
}
function select_customer_from_list(customer_name) {
if (customer_number_control) customer_number_control.set_value(customer_name);
fetch_customer_details(customer_name);
}
function edit_pallet(name) {
frappe.call({
method: 'frappe.client.get',
@@ -550,12 +561,31 @@ function save_pallet() {
}
function generate_cor_report() {
var pallet_name = $('#intake-form-container').data('pallet-name');
if (!pallet_name) {
frappe.msgprint('Please save the intake first before generating CoR/AoR report.');
var companyName = $('#company_name').val();
if (!companyName) {
frappe.msgprint('Please select a customer first.');
return;
}
window.open('https://eim.diagalon.com/report/data-tracking?pallet=' + pallet_name, '_blank');
var args = {
company_name: companyName,
weights: $('#weights').val() || '',
received_date: $('#received_date').val() || '',
red_r2: $('#red_r2').val() || '',
contact_name: $('#contact_name').val() || '',
contact_number: $('#contact_number').val() || '',
address_line: $('#address_line').val() || '',
pallet_name: $('#intake-form-container').data('pallet-name') || ''
};
window.open('/api/method/westech_r2.api.cor_generator.generate_cor?'
+ '&company_name=' + encodeURIComponent(args.company_name)
+ '&weights=' + encodeURIComponent(args.weights)
+ '&received_date=' + encodeURIComponent(args.received_date)
+ '&red_r2=' + encodeURIComponent(args.red_r2)
+ '&contact_name=' + encodeURIComponent(args.contact_name)
+ '&contact_number=' + encodeURIComponent(args.contact_number)
+ '&address_line=' + encodeURIComponent(args.address_line)
+ '&pallet_name=' + encodeURIComponent(args.pallet_name)
);
}
window.edit_pallet = edit_pallet;