fix: CoR server-side PDF, driver→Employee, customer list, address fix, button enable
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user