Enhanced Shipping instructions and Custom PO for import
This commit is contained in:
parent
5c6fc08bf3
commit
f2aee9645d
@ -25,8 +25,6 @@ namespace CPRNIMS.Domain.Services.Account
|
||||
_roleManager = roleManager;
|
||||
}
|
||||
public async Task<List<object>> GetAllUsersProfile()
|
||||
{
|
||||
try
|
||||
{
|
||||
var usersWithRolesAndAttachments = await (from user in _userManager.Users
|
||||
join userRole in _dbContext.IdentityUserRoles on user.Id equals userRole.UserId into userRoles
|
||||
@ -39,8 +37,8 @@ namespace CPRNIMS.Domain.Services.Account
|
||||
{
|
||||
user.Id,
|
||||
Role = r != null ? r.Name ?? "N/A" : "N/A",
|
||||
URL = a != null ? a.URL ?? "N/A" : "N/A",
|
||||
FileName = a != null ? a.FileName ?? "N/A" : "N/A",
|
||||
URL = a != null ? a.URL ?? "404userImage" : "404userImage",
|
||||
FileName = a != null ? a.FileName ?? "404userImage.jpg" : "404userImage.jpg",
|
||||
user.Company,
|
||||
user.DepartmentId,
|
||||
user.UserName,
|
||||
@ -59,12 +57,6 @@ namespace CPRNIMS.Domain.Services.Account
|
||||
|
||||
return usersWithRolesAndAttachments.Cast<object>().ToList();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ex.ToString();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public async Task AssignUserRole(RegisterModel registerModel)
|
||||
{
|
||||
var user = await _userManager.FindByIdAsync(registerModel.Id);
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
using CPRNIMS.Domain.Contracts.Items;
|
||||
using CPRNIMS.Infrastructure.Database;
|
||||
using CPRNIMS.Infrastructure.Dto.Canvass;
|
||||
using CPRNIMS.Infrastructure.Dto.Items;
|
||||
using CPRNIMS.Infrastructure.Entities.Account;
|
||||
using CPRNIMS.Infrastructure.Entities.Items;
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
using CPRNIMS.Infrastructure.Database;
|
||||
using CPRNIMS.Infrastructure.Dto.Canvass.Response;
|
||||
using CPRNIMS.Infrastructure.Dto.PO;
|
||||
using CPRNIMS.Infrastructure.Dto.PR;
|
||||
using CPRNIMS.Infrastructure.Entities.Canvass;
|
||||
using CPRNIMS.Infrastructure.Entities.Common;
|
||||
using CPRNIMS.Infrastructure.Entities.LocalDb.NonInvent;
|
||||
@ -494,7 +493,7 @@ namespace CPRNIMS.Domain.Services.PO
|
||||
await _dbContext.Database
|
||||
.ExecuteSqlRawAsync("EXEC PostPutCustomPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
|
||||
$"@PODId,@ProfInvoiceNo,@ProfInvoiceDate,@PaymentTermsId,@ShippingInstructionId,@SupplierId,@DeliveryDate,@Discount,@Amount," +
|
||||
$"@UnitPrice,@Quantity,@DeliverTo, @MessCode OUTPUT, @Message OUTPUT",
|
||||
$"@UnitPrice,@Quantity,@DeliverTo,@CountryOrigin, @MessCode OUTPUT, @Message OUTPUT",
|
||||
new SqlParameter("@UserId", pODto.UserId),
|
||||
new SqlParameter("@POTypeId", pODto.POTypeId),
|
||||
new SqlParameter("@PONumber", formattedPONumber),
|
||||
@ -516,6 +515,7 @@ namespace CPRNIMS.Domain.Services.PO
|
||||
new SqlParameter("@UnitPrice", pODto.UnitPrice),
|
||||
new SqlParameter("@Quantity", pODto.Quantity),
|
||||
new SqlParameter("@DeliverTo", pODto.DeliverTo),
|
||||
new SqlParameter("@CountryOrigin", pODto.CountryOrigin ?? "N/A"),
|
||||
messCode,
|
||||
message);
|
||||
|
||||
@ -544,7 +544,7 @@ namespace CPRNIMS.Domain.Services.PO
|
||||
await _dbContext.Database
|
||||
.ExecuteSqlRawAsync("EXEC PutExistingPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
|
||||
$"@PODId,@ProfInvoiceNo,@ProfInvoiceDate,@PaymentTermsId,@ShippingInstructionId,@SupplierId,@DeliveryDate,@Discount,@Amount," +
|
||||
$"@UnitPrice,@Quantity,@DeliverTo,@IsRemoved, @MessCode OUTPUT, @Message OUTPUT",
|
||||
$"@UnitPrice,@Quantity,@DeliverTo,@IsRemoved,@CountryOrigin, @MessCode OUTPUT, @Message OUTPUT",
|
||||
new SqlParameter("@UserId", pODto.UserId),
|
||||
new SqlParameter("@POTypeId", pODto.POTypeId),
|
||||
new SqlParameter("@PONumber", pODto.PONo),
|
||||
@ -567,6 +567,7 @@ namespace CPRNIMS.Domain.Services.PO
|
||||
new SqlParameter("@Quantity", pODto.Quantity),
|
||||
new SqlParameter("@DeliverTo", pODto.DeliverTo),
|
||||
new SqlParameter("@IsRemoved", isRemoved),
|
||||
new SqlParameter("@CountryOrigin", pODto.CountryOrigin ?? "N/A"),
|
||||
messCode,
|
||||
message);
|
||||
|
||||
@ -633,7 +634,8 @@ namespace CPRNIMS.Domain.Services.PO
|
||||
DeliveryDate = PODto.DeliveryDate,
|
||||
DeliverTo = PODto.DeliverTo ?? "N/A",
|
||||
Specification = specification,
|
||||
IsUpdate = PODto.IsUpdate
|
||||
IsUpdate = PODto.IsUpdate,
|
||||
CountryOrigin=PODto.CountryOrigin
|
||||
};
|
||||
}
|
||||
public async Task<DocRequired> PostSuppDocRequirements(PODto poDto)
|
||||
|
||||
@ -115,5 +115,6 @@ namespace CPRNIMS.Infrastructure.Dto.PO
|
||||
public DateTime From { get; set; }
|
||||
public string? OtherChargesName { get; set; }
|
||||
public string? IncotermsName { get; set; }
|
||||
public string? CountryOrigin { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,13 +18,10 @@ namespace CPRNIMS.Infrastructure.Entities.Items
|
||||
public string? UserId { get; set; }
|
||||
public string? ItemName { get; set; }
|
||||
public string? ItemCategoryName { get; set; }
|
||||
public byte PRTypeId { get; set; }
|
||||
public string? ItemDescription { get; set; }
|
||||
public decimal Qty { get; set; }
|
||||
public int CartItemCount { get; set; }
|
||||
public int UOMId { get; set; }
|
||||
public int ItemColorId { get; set; }
|
||||
public short ItemCategoryId { get; set; }
|
||||
public byte PackagingTypeId { get; set; }
|
||||
public long ItemAttachId { get; set; }
|
||||
public string? CreatedBy { get; set; }
|
||||
public DateTime CreatedDate { get; set; }
|
||||
|
||||
@ -21,7 +21,6 @@ namespace CPRNIMS.Infrastructure.Entities.PO
|
||||
public string? ItemName { get; set; }
|
||||
public string? ItemDescription { get; set; }
|
||||
public string? UOMName { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
public long ItemNo { get; set; }
|
||||
public decimal Qty { get; set; }
|
||||
public string? Remarks { get; set; }
|
||||
@ -44,12 +43,13 @@ namespace CPRNIMS.Infrastructure.Entities.PO
|
||||
public DateTime ProfInvoiceDate { get; set; }
|
||||
public string? PortOfDischarge { get; set; }
|
||||
public string? PaymentTerms { get; set; }
|
||||
public string? ShippingInstruction { get; set; }
|
||||
public byte ShippingInstructionId { get; set; }
|
||||
public string? DeliverTo { get; set; }
|
||||
public string? IncoTerms { get; set; }
|
||||
public string? ProfInvoiceNo { get; set; }
|
||||
public string? DocRequirements { get; set; }
|
||||
public string? AmountInWords { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
public string? CountryOrigin { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,9 +30,11 @@ namespace CPRNIMS.Infrastructure.Entities.PO
|
||||
public string? UserId { get; set; }
|
||||
public byte Status { get; set; }
|
||||
public byte PaymentTermsId { get; set; }
|
||||
public byte ShippingInstructionId { get; set; }
|
||||
public byte PODId { get; set; }
|
||||
public byte POTypeId { get; set; }
|
||||
public byte IncoTermsId { get; set; }
|
||||
public string? IncotermsName { get; set; }
|
||||
public string? CountryOrigin { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,6 +140,7 @@ namespace CPRNIMS.Infrastructure.ViewModel.PO
|
||||
public string? Password { get; set; }
|
||||
public string? Server { get; set; }
|
||||
public string? AggreQty { get; set; }
|
||||
public string? CountryOrigin { get; set; }
|
||||
public DocRequirementList? DocRequiredList { get; set; }
|
||||
public POChargesList? OtherChargesList { get; set; }
|
||||
public PRItemList? PRItemList { get; set; }
|
||||
|
||||
@ -4,7 +4,6 @@ using CPRNIMS.Domain.Services.Account;
|
||||
using CPRNIMS.Infrastructure.Dto.Account;
|
||||
using CPRNIMS.Infrastructure.Entities.Account;
|
||||
using CPRNIMS.Infrastructure.Entities.Common;
|
||||
using CPRNIMS.Infrastructure.Helper;
|
||||
using CPRNIMS.Infrastructure.Models;
|
||||
using CPRNIMS.Infrastructure.Models.Account;
|
||||
using CPRNIMS.Infrastructure.Models.Common;
|
||||
@ -19,7 +18,7 @@ using System.Security.Claims;
|
||||
|
||||
namespace CPRNIMS.WebApi.Controllers.Account
|
||||
{
|
||||
[Security.AuthorizeRoles("Account")]
|
||||
[AuthorizeRoles("Account")]
|
||||
public class AccountController : Base.BaseController
|
||||
{
|
||||
private readonly ErrorMessageService _errorMessageService;
|
||||
@ -149,8 +148,6 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
|
||||
[HttpGet("GetUserById/{userId}")]
|
||||
public async Task<IActionResult> GetUserProfileById(string userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var userWithUrl = await _userManager.Users
|
||||
.Include(u => u.Attachment)
|
||||
@ -161,7 +158,6 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
u.UserName,
|
||||
u.FullName,
|
||||
u.Email,
|
||||
// u.Role,
|
||||
u.Department,
|
||||
u.Company,
|
||||
u.LockoutEnabled,
|
||||
@ -177,24 +173,13 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
|
||||
if (userWithUrl == null)
|
||||
{
|
||||
// Handle the case where the user with the specified ID is not found
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
return Ok(userWithUrl);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message, "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
[HttpGet("GetAllUser")]
|
||||
public async Task<IActionResult> GetAllUsers()
|
||||
{
|
||||
try
|
||||
{
|
||||
var usersWithUrl = await _userClaimsManager.GetAllUsersProfile();
|
||||
|
||||
@ -204,29 +189,18 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
}
|
||||
|
||||
return Ok(usersWithUrl);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message, "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
[HttpPost("GetUserRolesClaims")]
|
||||
public async Task<IActionResult> GetUserRolesClaims([FromBody] LoginModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = await _userManager.Users
|
||||
.Include(u => u.Department) // Include the Department
|
||||
.Include(u => u.Department)
|
||||
.SingleOrDefaultAsync(u => u.UserName == model.Username.ToLower());
|
||||
|
||||
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
|
||||
{
|
||||
var userRoles = await _userManager.GetRolesAsync(user);
|
||||
|
||||
// Fetch the full role details from the Roles table
|
||||
var roleDetails = await _roleManager.Roles
|
||||
.Where(r => userRoles.Contains(r.Name))
|
||||
.Select(r => new { r.Id, r.Name })
|
||||
@ -266,18 +240,9 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
}
|
||||
return Unauthorized();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message + "GetUserRolesClaims", "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("GetTClaim")]
|
||||
public async Task<IActionResult> GetTClaim([FromBody] LoginModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = await _userManager.FindByNameAsync(model.Username.ToLower());
|
||||
|
||||
@ -325,14 +290,6 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
}
|
||||
}
|
||||
return Unauthorized();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message, "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("register")]
|
||||
@ -404,54 +361,26 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
|
||||
[HttpPost("GetDepartment")]
|
||||
public async Task<IActionResult> GetDepartment()
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = await _department.GetDepartment();
|
||||
|
||||
if (user != null)
|
||||
{
|
||||
return Ok(user);
|
||||
}
|
||||
else
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message, "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
[HttpPost("GetUserRights")]
|
||||
public async Task<IActionResult> GetUserRights(AccountDto accountDto)
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = await _account.GetUserRights(accountDto);
|
||||
|
||||
if (user != null)
|
||||
{
|
||||
return Ok(user);
|
||||
}
|
||||
else
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message, "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
[HttpPost("PutPostUserAccess")]
|
||||
public async Task<IActionResult> PutPostUserAccess([FromBody] UserRightsVM viewModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
var itemDto = new AccountDto();
|
||||
if (viewModel.UserRightsList != null)
|
||||
@ -474,25 +403,10 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
}
|
||||
return BadRequest(new { success = false, messCode = 0, message = "Your email has not yet been configured. Please go to the SMTP page." });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message + "PutPostUserAccess", "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("CreateUpdateRole")]
|
||||
public async Task<IActionResult> CreateUpdateRole([FromBody] UserRoleModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
/* IdentityRole userRole = new()
|
||||
{
|
||||
Id=model.Id,
|
||||
Name = model.Name,
|
||||
};*/
|
||||
// Check if a role with the given ID exists
|
||||
var existingRole = await _roleManager.FindByIdAsync(model.Id);
|
||||
if (existingRole != null)
|
||||
{
|
||||
@ -516,12 +430,5 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
}
|
||||
return Ok(new ResponseObject { statusResponse = "Success", message = "Role created successfully!" });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
await PostErrorMessage(message, "WebApi");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
||||
return Ok(new
|
||||
{
|
||||
token,
|
||||
expiresAt= DateTime.UtcNow.AddMinutes(30),
|
||||
expiresAt= DateTime.UtcNow.AddHours(2),
|
||||
userId = user.Id,
|
||||
userName = user.UserName,
|
||||
fullName = user.FullName,
|
||||
|
||||
@ -11,11 +11,14 @@ namespace CPRNIMS.WebApps.Controllers.Account
|
||||
{
|
||||
private readonly IAccount _account;
|
||||
List<UserRightsVM>? response;
|
||||
private readonly IConfiguration _configuration;
|
||||
public AccountController(IWebHostEnvironment webHostEnvironment,
|
||||
IAccount account,ErrorLogHelper errorMessageService,TokenHelper tokenHelper
|
||||
IAccount account,ErrorLogHelper errorMessageService,TokenHelper tokenHelper,
|
||||
IConfiguration configuration
|
||||
) : base(errorMessageService, webHostEnvironment,tokenHelper, account)
|
||||
{
|
||||
_account = account;
|
||||
_configuration = configuration;
|
||||
}
|
||||
#region Change Password
|
||||
public async Task<IActionResult> SendOTPByEmail(EmailMessageDetailsVM model)
|
||||
@ -199,18 +202,10 @@ namespace CPRNIMS.WebApps.Controllers.Account
|
||||
}
|
||||
}
|
||||
public async Task<IActionResult> GetAllUsers()
|
||||
{
|
||||
try
|
||||
{
|
||||
var userResponse = await _account.GetAllUserAsync(GetUser());
|
||||
return Json(new { data = userResponse });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
|
||||
return Json(new { data = "No Data" }); // Return empty array instead of "No Data" string
|
||||
}
|
||||
userResponse[0].URL = _configuration["LLI:BaseUrl"] ?? "https://llipurchasingnoninventory.com:8080/";
|
||||
return GetResponse(userResponse);
|
||||
}
|
||||
public async Task<IActionResult> GetDepartment()
|
||||
{
|
||||
@ -242,20 +237,12 @@ namespace CPRNIMS.WebApps.Controllers.Account
|
||||
return Json(new { data = "No Data" });
|
||||
}
|
||||
}
|
||||
public async Task<IActionResult> GetUserRights(UserRightsVM viewModels)
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetUserRights(UserRightsVM viewModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
response = await _account.GetUserRights(GetUser(), viewModels);
|
||||
response = await _account.GetUserRights(GetUser(), viewModel);
|
||||
return GetResponse(response);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||
|
||||
return Json(new { data = "No Data" });
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Views
|
||||
public async Task<IActionResult> Index()
|
||||
|
||||
@ -12,7 +12,11 @@ namespace CPRNIMS.WebApps.ViewComponents.POMgmt
|
||||
1 => "~/Views/Components/POMgmt/ShippingInstructions/Air.cshtml",
|
||||
2 => "~/Views/Components/POMgmt/ShippingInstructions/Courier.cshtml",
|
||||
3 => "~/Views/Components/POMgmt/ShippingInstructions/SeaFCL.cshtml",
|
||||
_ => "~/Views/Components/POMgmt/ShippingInstructions/SeaLCL.cshtml"
|
||||
4 => "~/Views/Components/POMgmt/ShippingInstructions/SeaLCL.cshtml",
|
||||
5 => "~/Views/Components/POMgmt/ShippingInstructions/RawMatAir.cshtml",
|
||||
6 => "~/Views/Components/POMgmt/ShippingInstructions/RawMatCourier.cshtml",
|
||||
7 => "~/Views/Components/POMgmt/ShippingInstructions/RawMatSeaFCL.cshtml",
|
||||
_ => "~/Views/Components/POMgmt/ShippingInstructions/RawMatSeaLCL.cshtml"
|
||||
};
|
||||
|
||||
// Render the selected view
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -7,17 +7,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
|
||||
<label for="discount">Discount</label>
|
||||
<div style="flex: 1; display: flex; align-items: center;">
|
||||
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
|
||||
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
|
||||
onclick="AddDiscount()"></i>
|
||||
<div class="form-group">
|
||||
<label class="lbl">Discount</label>
|
||||
<input type="number" id="discount" name="discount"
|
||||
class="form-control" placeholder="0.00" step="0.01" min="0">
|
||||
</div>
|
||||
</div>
|
||||
<textarea id="discount" readonly disabled
|
||||
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
<div class="row">
|
||||
|
||||
@ -1,218 +1,675 @@
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="form-group">
|
||||
<label for="deliveryDate">Est. Delivery Date</label>
|
||||
<input type="date" id="deliveryDate" class="form-control">
|
||||
<style>
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Inter',sans-serif;
|
||||
font-size: var(--fs);
|
||||
line-height: var(--lh);
|
||||
color: var(--text);
|
||||
background: #e8eeee;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.po-header {
|
||||
background: linear-gradient(135deg,#01696f 0%,#0a9ea6 100%);
|
||||
border-radius: var(--radius-lg) var(--radius-lg) 0 0;
|
||||
padding: 10px 16px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.po-header h5 {
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
letter-spacing: .01em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Card */
|
||||
.po-card {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--teal-border);
|
||||
border-top: none;
|
||||
border-radius: 0 0 var(--radius-lg) var(--radius-lg);
|
||||
box-shadow: var(--shadow);
|
||||
padding: 10px 14px 8px;
|
||||
}
|
||||
|
||||
/* Meta row */
|
||||
.meta-row {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.meta-field {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
.meta-field.po-no {
|
||||
flex: 0 0 120px;
|
||||
}
|
||||
|
||||
.meta-field.final-po {
|
||||
flex: 0 0 120px;
|
||||
}
|
||||
|
||||
.meta-field.po-type {
|
||||
flex: 0 0 150px;
|
||||
}
|
||||
|
||||
.meta-field.supplier {
|
||||
flex: 1 1 200px;
|
||||
}
|
||||
|
||||
/* Import zone */
|
||||
.import-zone {
|
||||
background: var(--surface-2);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius-lg);
|
||||
padding: 8px 10px 6px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.import-grid {
|
||||
display: grid;
|
||||
gap: 6px 8px;
|
||||
}
|
||||
|
||||
.g-row-1 {
|
||||
grid-template-columns: repeat(6,1fr);
|
||||
}
|
||||
|
||||
.g-row-2 {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
/* Left col */
|
||||
.terms-col {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
flex: 1 1 0;
|
||||
}
|
||||
|
||||
.terms-row {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
/* Right panel */
|
||||
.right-panel {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
flex: 0 0 660px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.amounts-row {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4,1fr);
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
/* Labels */
|
||||
label.lbl {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
color: var(--muted);
|
||||
letter-spacing: .03em;
|
||||
text-transform: uppercase;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 3px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
label.lbl i {
|
||||
font-size: .85rem;
|
||||
color: var(--teal);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* Form controls */
|
||||
.fc {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
padding: 0 8px;
|
||||
border: 1px solid var(--teal-border);
|
||||
border-radius: var(--radius);
|
||||
background: var(--surface);
|
||||
font-size: var(--fs);
|
||||
color: var(--text);
|
||||
transition: border-color var(--transition),box-shadow var(--transition);
|
||||
}
|
||||
|
||||
.fc:focus {
|
||||
outline: none;
|
||||
border-color: var(--teal);
|
||||
box-shadow: 0 0 0 2px rgba(1,105,111,0.14);
|
||||
}
|
||||
|
||||
.fc[readonly], .fc:disabled {
|
||||
background: var(--surface-2);
|
||||
color: var(--muted);
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
select.fc {
|
||||
appearance: none;
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%235a7476'/%3E%3C/svg%3E");
|
||||
background-repeat: no-repeat;
|
||||
background-position: right 7px center;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
textarea.fc {
|
||||
height: auto;
|
||||
resize: vertical;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
line-height: var(--lh);
|
||||
}
|
||||
|
||||
/* Currency pair */
|
||||
.cur-pair {
|
||||
display: flex;
|
||||
height: 28px;
|
||||
border: 1px solid var(--teal-border);
|
||||
border-radius: var(--radius);
|
||||
overflow: hidden;
|
||||
background: var(--surface);
|
||||
transition: border-color var(--transition),box-shadow var(--transition);
|
||||
}
|
||||
|
||||
.cur-pair:focus-within {
|
||||
border-color: var(--teal);
|
||||
box-shadow: 0 0 0 2px rgba(1,105,111,0.14);
|
||||
}
|
||||
|
||||
.cur-badge {
|
||||
background: rgba(1,105,111,0.10);
|
||||
color: var(--teal);
|
||||
font-weight: 700;
|
||||
font-size: 10px;
|
||||
padding: 0 7px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-right: 1px solid var(--teal-border);
|
||||
white-space: nowrap;
|
||||
letter-spacing: .04em;
|
||||
}
|
||||
|
||||
.cur-pair .fc {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
.cur-pair .fc:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* Amount boxes */
|
||||
.amt-box {
|
||||
background: var(--teal-bg);
|
||||
border: 1px solid var(--teal-border);
|
||||
border-radius: var(--radius);
|
||||
padding: 2px 7px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
min-height: 28px;
|
||||
}
|
||||
|
||||
.amt-box.php {
|
||||
background: var(--green-bg);
|
||||
border-color: rgba(67,122,34,0.22);
|
||||
}
|
||||
|
||||
.amt-box .albl {
|
||||
font-size: 9px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .04em;
|
||||
color: var(--muted);
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.amt-box input {
|
||||
border: none;
|
||||
background: transparent;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
color: var(--teal);
|
||||
font-family: inherit;
|
||||
outline: none;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.amt-box.php input {
|
||||
color: var(--green);
|
||||
}
|
||||
|
||||
/* ── Discount — simple single input ── */
|
||||
#discount {
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
padding: 0 10px;
|
||||
border: 1px solid var(--teal-border);
|
||||
border-radius: var(--radius);
|
||||
background: var(--surface);
|
||||
font-size: var(--fs);
|
||||
color: var(--text);
|
||||
font-family: inherit;
|
||||
transition: border-color var(--transition), box-shadow var(--transition);
|
||||
display: block; /* override old display:none */
|
||||
}
|
||||
|
||||
#discount:focus {
|
||||
outline: none;
|
||||
border-color: var(--teal);
|
||||
box-shadow: 0 0 0 2px rgba(1,105,111,0.14);
|
||||
}
|
||||
|
||||
/* Charges table */
|
||||
.charges-wrap {
|
||||
border: 1px solid var(--teal-border);
|
||||
border-radius: var(--radius);
|
||||
overflow: hidden;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.charges-header {
|
||||
background: linear-gradient(90deg,var(--teal) 0%,#0a9ea6 100%);
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 3px 8px;
|
||||
}
|
||||
|
||||
.charges-header span {
|
||||
font-size: 10.5px;
|
||||
font-weight: 700;
|
||||
letter-spacing: .04em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.charges-header .btn-add-charge {
|
||||
background: rgba(255,255,255,0.15);
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
padding: 1px 5px;
|
||||
font-size: .85rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 3px;
|
||||
transition: background var(--transition);
|
||||
}
|
||||
|
||||
.charges-header .btn-add-charge:hover {
|
||||
background: rgba(255,255,255,0.30);
|
||||
}
|
||||
|
||||
.charges-header .btn-add-charge span {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.charges-table-wrap {
|
||||
overflow-y: auto;
|
||||
max-height: 108px;
|
||||
}
|
||||
|
||||
|
||||
/* Icon add */
|
||||
.icon-add {
|
||||
color: var(--teal);
|
||||
font-size: .9rem;
|
||||
cursor: pointer;
|
||||
transition: color var(--transition),transform var(--transition);
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.icon-add:hover {
|
||||
color: var(--teal-hover);
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
/* DataTable */
|
||||
.dt-wrapper {
|
||||
background: var(--surface);
|
||||
/* border: 1px solid var(--teal-border); */
|
||||
/* border-radius: var(--radius-lg); */
|
||||
box-shadow: var(--shadow);
|
||||
/* padding: 8px 12px 10px; */
|
||||
}
|
||||
/* Reduce row height */
|
||||
#DestChargesTable td,
|
||||
#DestChargesTable th {
|
||||
padding: 2px 6px; /* top/bottom left/right */
|
||||
line-height: 1.1;
|
||||
font-size: 12px; /* optional */
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* Optional: make DataTables wrapper compact too */
|
||||
#DestChargesTable tbody tr {
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.dt-toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 6px;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.dt-controls {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: var(--fs);
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.dt-controls select, .dt-controls input {
|
||||
height: 24px;
|
||||
font-size: 11px;
|
||||
padding: 0 6px;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
/* table.dt-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: var(--fs);
|
||||
}
|
||||
|
||||
table.dt-table thead tr {
|
||||
background: linear-gradient(90deg,var(--teal) 0%,#0a9ea6 100%);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
table.dt-table th {
|
||||
padding: 5px 8px;
|
||||
font-size: 10.5px;
|
||||
font-weight: 600;
|
||||
letter-spacing: .02em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
table.dt-table th .sort-arrows {
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
margin-left: 3px;
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
table.dt-table th .sort-arrows svg {
|
||||
width: 7px;
|
||||
height: 5px;
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
table.dt-table td {
|
||||
padding: 5px 8px;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.05);
|
||||
}
|
||||
|
||||
table.dt-table .no-rec {
|
||||
text-align: center;
|
||||
color: var(--faint);
|
||||
font-style: italic;
|
||||
padding: 16px;
|
||||
} */
|
||||
|
||||
.dt-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 6px;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.dt-info {
|
||||
font-size: 11px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.dt-pager {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* .dt-pager button, .btn-cancel {
|
||||
background: none;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius);
|
||||
padding: 2px 10px;
|
||||
font-size: 11px;
|
||||
color: var(--muted);
|
||||
cursor: pointer;
|
||||
transition: border-color var(--transition),color var(--transition);
|
||||
}
|
||||
|
||||
.dt-pager button:hover, .btn-cancel:hover {
|
||||
border-color: var(--teal);
|
||||
color: var(--teal);
|
||||
}
|
||||
*/
|
||||
.btn-submit {
|
||||
background: var(--teal);
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: var(--radius);
|
||||
padding: 4px 14px;
|
||||
font-size: var(--fs);
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: background var(--transition);
|
||||
}
|
||||
|
||||
.btn-submit:hover {
|
||||
background: var(--teal-hover);
|
||||
}
|
||||
</style>
|
||||
<!-- Import Dynamic Component -->
|
||||
<div class="import-zone">
|
||||
|
||||
<!-- Row 1: Dates + PI + Currency + Country -->
|
||||
<div class="import-grid g-row-1" style="margin-bottom:5px;">
|
||||
<div>
|
||||
<label class="lbl">Est. Delivery Date</label>
|
||||
<input type="date" id="deliveryDate" class="fc">
|
||||
</div>
|
||||
<div>
|
||||
<label class="lbl">Prof. Inv. Date</label>
|
||||
<input type="date" id="piDate" class="fc">
|
||||
</div>
|
||||
<div>
|
||||
<label class="lbl">Prof. Inv. No.</label>
|
||||
<input type="text" id="piNo" class="fc" placeholder="PI-XXXX">
|
||||
</div>
|
||||
<div>
|
||||
<label class="lbl">Country of Origin</label>
|
||||
<input id="countryOrigin" name="countryOrigin" class="fc" placeholder="INDIA">
|
||||
</div>
|
||||
<div>
|
||||
<label class="lbl">Currency / CER</label>
|
||||
<div class="cur-pair">
|
||||
<span class="cur-badge">USD</span>
|
||||
<input type="hidden" id="currency" value="USD" />
|
||||
<input type="number" id="currencyCER" name="currencyCER" value="59.00" class="fc" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="piDate">Prof. Inv. Date</label>
|
||||
<input type="date" class="form-control" style="margin-bottom:5px;" id="piDate">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="piNo">Prof. Inv. No</label>
|
||||
<input type="text" class="form-control" style="margin-bottom:5px;" id="piNo">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="currency">Currency</label>
|
||||
<input disabled id="currency" value="USD" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="currencyCER">CER</label>
|
||||
<input type="number" id="currencyCER" name="currencyCER" value="59.00" class="form-control" />
|
||||
<div>
|
||||
<label class="lbl">Discount</label>
|
||||
<input type="number" id="discount" name="discount"
|
||||
class="fc" placeholder="0.00" step="0.01" min="0">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="grossAmountUSD">Gross (USD) Amount</label>
|
||||
<input readonly name="grossAmountUSD" id="grossAmountUSD" class="form-control" style="margin-bottom:5px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="finalAmountUSD">Final (USD) Amount</label>
|
||||
<input readonly name="finalAmountUSD" id="finalAmountUSD" class="form-control" style="margin-bottom:5px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="podId">Port Of Discharge</label>
|
||||
<select class="form-control" name="podId" id="podId"
|
||||
style="margin-bottom:5px;">
|
||||
<option disabled>-Select Discharge Port-</option>
|
||||
<option value="1">MANILA PORT</option>
|
||||
<option value="2">NORTH SEA PORT</option>
|
||||
<option value="3">SOUTH SEA PORT</option>
|
||||
<option value="4">MANILA PORT PHILS</option>
|
||||
<option value="5">OTHERS</option>
|
||||
<option value="6">MANILA PHILIPPINES</option>
|
||||
<option value="7">N/A</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="C-paymentTerms">Payment Terms</label>
|
||||
<input type="search" name="C-paymentTerms" id="C-paymentTerms" class="form-control" style="margin-bottom:5px;">
|
||||
<!-- Row 2: Left terms | Right charges+amounts -->
|
||||
<div class="g-row-2">
|
||||
|
||||
<!-- Left column -->
|
||||
<div class="terms-col">
|
||||
|
||||
<!-- Payment Terms + Incoterms -->
|
||||
<div class="terms-row">
|
||||
<div>
|
||||
<label class="lbl">Payment Terms</label>
|
||||
<input type="search" name="C-paymentTerms" id="C-paymentTerms" class="fc" placeholder="Search...">
|
||||
<input type="hidden" id="C-paymentTermsId" name="C-paymentTermsId" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="docRequiredId">Incoterms</label>
|
||||
<i class="bx bxs-message-rounded-add" style="color: green; font-size: 1rem; cursor: pointer;"
|
||||
onclick="viewIncoterms()"></i>
|
||||
|
||||
<input type="search" name="incotermsName" id="incotermsName" class="form-control" style="margin-bottom:5px;">
|
||||
<div>
|
||||
<label class="lbl">Incoterms <i class="bx bxs-message-rounded-add icon-add" onclick="viewIncoterms()" title="Add"></i></label>
|
||||
<input type="search" name="incotermsName" id="incotermsName" class="fc" placeholder="Search...">
|
||||
<input type="hidden" id="incoTermsId" name="incoTermsId" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label for="shippingInstructionId">Shipping Instrctn.</label>
|
||||
<select class="form-control" name="shippingInstructionId" id="shippingInstructionId"
|
||||
style="margin-bottom:5px;">
|
||||
<option disabled>-Select Shipping Instruction-</option>
|
||||
<option value="1">AIR</option>
|
||||
<option value="2">COURIER</option>
|
||||
<option value="3">SEA FCL</option>
|
||||
<option value="4">SEA LCL</option>
|
||||
<option value="5">N/A</option>
|
||||
<option value="4">OTHERS</option>
|
||||
|
||||
<!-- Port + Shipping -->
|
||||
<div class="terms-row">
|
||||
<div>
|
||||
<label class="lbl">Port of Discharge</label>
|
||||
<select class="fc" name="podId" id="podId">
|
||||
<option disabled selected>— Select —</option>
|
||||
<option value="1">Manila Port</option>
|
||||
<option value="2">North Sea Port</option>
|
||||
<option value="3">South Sea Port</option>
|
||||
<option value="4">Manila Port PHILS</option>
|
||||
<option value="5">Others</option>
|
||||
<option value="6">Manila Philippines</option>
|
||||
<option value="7">N/A</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label class="lbl">Shipping Instruction</label>
|
||||
<select class="fc" name="shippingInstructionId" id="shippingInstructionId">
|
||||
<option disabled selected>— Select —</option>
|
||||
<option value="1">General AIR</option>
|
||||
<option value="2">General COURIER</option>
|
||||
<option value="3">General SEA FCL</option>
|
||||
<option value="4">General SEA LCL</option>
|
||||
<option value="5">RawMat AIR</option>
|
||||
<option value="6">RawMat COURIER</option>
|
||||
<option value="7">RawMat SEA FCL</option>
|
||||
<option value="8">RawMat SEA LCL</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Docs + Remarks -->
|
||||
<div class="terms-row" style="flex:1;">
|
||||
<div style="display:flex;flex-direction:column;">
|
||||
<label class="lbl">Docs Required <i class="bx bxs-message-rounded-add icon-add" onclick="viewDocRequired()" title="Add"></i></label>
|
||||
<textarea readonly id="docRequiredId" class="fc" placeholder="Docs will appear here..." style="flex:1;resize:none;height:80px;"></textarea>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;">
|
||||
<label class="lbl">Remarks</label>
|
||||
<textarea id="remarks" class="fc" placeholder="Special instructions…" style="flex:1;resize:none;height:80px;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
|
||||
<label for="discount">Discount</label>
|
||||
<div style="flex: 1; display: flex; align-items: center;">
|
||||
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
|
||||
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
|
||||
onclick="AddDiscount()"></i>
|
||||
</div>
|
||||
</div>
|
||||
<textarea id="discount" readonly disabled
|
||||
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="grossAmountPHP">Gross (PHP) Amount</label>
|
||||
<input readonly name="grossAmountPHP" id="grossAmountPHP" class="form-control" style="margin-bottom:5px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="finalAmountPHP">Final (PHP) Amount</label>
|
||||
<input readonly name="finalAmountPHP" id="finalAmountPHP" class="form-control" style="margin-bottom:5px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6" style="margin-top:-15px;">
|
||||
<div class="form-group">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<label for="docRequiredId">Docs Required</label>
|
||||
<i class="bx bxs-message-rounded-add" style="color: green; font-size: 1rem; cursor: pointer;"
|
||||
onclick="viewDocRequired()"></i>
|
||||
<textarea readonly id="docRequiredId" class="form-control"
|
||||
style="width: 100%; height: 150px;margin-bottom:10px;"></textarea>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label for="remarks">Remarks</label>
|
||||
<textarea id="remarks" class="form-control"
|
||||
style="width: 100%; height: 150px;margin-bottom:10px;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@await Html.PartialAsync("PagesView/PO/_OtherCharges")
|
||||
</div>
|
||||
<!-- Modal Incoterms-->
|
||||
<div class="modal fade custom-modal-backdrop" id="viewIncoterms"
|
||||
tabindex="-1" aria-labelledby="IncotermsLabel" data-bs-backdrop="static">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3 id="IncotermsLabel" class="modal-title">
|
||||
Incoterms List
|
||||
</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<button type="button" class="btn btn-success"
|
||||
id="chooseItem" onclick="viewIncotermsModal(0,{})">
|
||||
Add new
|
||||
</div><!-- /terms-col -->
|
||||
<!-- Right column -->
|
||||
<div class="right-panel">
|
||||
|
||||
<!-- List of Charges -->
|
||||
<div style="display:flex;flex-direction:column;flex:1;">
|
||||
<div class="charges-wrap" style="display:flex;flex-direction:column;flex:1;">
|
||||
<div class="charges-header">
|
||||
<span>List of Charges</span>
|
||||
<button class="btn-add-charge" onclick="viewCharges()">
|
||||
<i class="bx bxs-message-rounded-add"></i>
|
||||
<span>Add</span>
|
||||
</button>
|
||||
<br />
|
||||
<br />
|
||||
<table id="IncotermsTable" class="row-border" style="width: 100%;">
|
||||
<colgroup>
|
||||
<col style="width:90%" />
|
||||
<col style="width:10%" />
|
||||
</colgroup>
|
||||
</div>
|
||||
<div class="charges-table-wrap" style="flex:1;">
|
||||
<table id="DestChargesTable" class="tbl-charges">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Incoterms</th>
|
||||
<th>Action</th>
|
||||
<th style="display:none;">otherChargesId</th>
|
||||
<th style="width:78%;">Charge Name</th>
|
||||
<th style="width:14%;">Amount</th>
|
||||
<th style="width:8%;">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Back</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Amounts 2×2 -->
|
||||
<div class="amounts-row">
|
||||
<div>
|
||||
<label class="lbl">Gross (USD)</label>
|
||||
<div class="amt-box">
|
||||
<span class="albl">USD Gross</span>
|
||||
<input readonly name="grossAmountUSD" id="grossAmountUSD" placeholder="—">
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal viewIncotermsModal-->
|
||||
<div class="modal fade custom-modal-backdrop" id="viewIncotermsModal" tabindex="-1"
|
||||
aria-labelledby="incotermsLabel"
|
||||
data-bs-backdrop="static">
|
||||
<div class="modal-dialog" role="document" data-bs-backdrop="static">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 id="incotermsHeader" class="modal-title">
|
||||
</h5>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="update-incotermsName">Incoterms Name</label>
|
||||
<input id="update-incotermsName" class="form-control" style="margin-top:10px" placeholder="input here..." />
|
||||
<div>
|
||||
<label class="lbl">Final (USD)</label>
|
||||
<div class="amt-box">
|
||||
<span class="albl">USD Final</span>
|
||||
<input readonly name="finalAmountUSD" id="finalAmountUSD" placeholder="—">
|
||||
</div>
|
||||
</div>
|
||||
<input hidden id="update-incotermsId" />
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Back</button>
|
||||
<button type="button" id="btnPostPutIncoterms" onclick="postPutIncoterms()" class="btn btn-success">Submit</button>
|
||||
<div>
|
||||
<label class="lbl">Gross (PHP)</label>
|
||||
<div class="amt-box php">
|
||||
<span class="albl">PHP Gross</span>
|
||||
<input readonly name="grossAmountPHP" id="grossAmountPHP" placeholder="—">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="lbl">Final (PHP)</label>
|
||||
<div class="amt-box php">
|
||||
<span class="albl">PHP Final</span>
|
||||
<input readonly name="finalAmountPHP" id="finalAmountPHP" placeholder="—">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@await Html.PartialAsync("PagesView/PO/_DocRequired")
|
||||
|
||||
</div><!-- /right-panel -->
|
||||
</div><!-- /g-row-2 -->
|
||||
|
||||
</div><!-- /import-zone -->
|
||||
<!-- Hidden inputs -->
|
||||
<input hidden id="dr-ImportPoNo" />
|
||||
<input hidden id="si-ImportPoNo" />
|
||||
@await Html.PartialAsync("PagesView/PO/_DocRequired")
|
||||
@ -7,16 +7,13 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
|
||||
<label for="discount">Discount</label>
|
||||
<div style="flex: 1; display: flex; align-items: center;">
|
||||
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
|
||||
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
|
||||
onclick="AddDiscount()"></i>
|
||||
<div>
|
||||
<div class="form-group">
|
||||
<label class="lbl">Discount</label>
|
||||
<input type="number" id="discount" name="discount"
|
||||
class="form-control" placeholder="0.00" step="0.01" min="0">
|
||||
</div>
|
||||
</div>
|
||||
<textarea id="discount" readonly disabled
|
||||
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
|
||||
@ -1,125 +1,191 @@
|
||||
<style>
|
||||
<title>Shipping Instructions – Annex A</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
.container-Form {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.header {
|
||||
text-align: right;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.supplier {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.instructions {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.instructions p {
|
||||
margin: 0;
|
||||
margin-bottom: 5px;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.instructions ul {
|
||||
list-style: none;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.instructions ul li {
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.shipping-address {
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.preferred-airlines {
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.preferred-airlines ul {
|
||||
columns: 3;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.conforme {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.conforme span {
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
width: 200px;
|
||||
border-top: 1px solid black;
|
||||
text-align: center;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.airlines {
|
||||
columns: 2;
|
||||
-webkit-columns: 2;
|
||||
-moz-columns: 2;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="instructions">
|
||||
<p>SHIPPING INSTRUCTIONS:</p>
|
||||
<p>1.) IN COMPLIANCE WITH FDA GMP PIC/S STANDARD FOR ALL MANUFACTURING COMPANY, CONTAINERS OF ACTIVE PHARMACEUTICAL INGREDIENTS (API), AS WELL AS EXCIPIENTS SHOULD BEAR IN THE LABEL THE FOLLOWING INFORMATION:</p>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>Air</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 103<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>*NAME OF MANUFACTURER WITH COMPLETE ADDRESS AND CONTACT NUMBERS</li>
|
||||
<li>*PRODUCT NAME</li>
|
||||
<li>*GROSS WEIGHT/NET WEIGHT</li>
|
||||
<li>*MANUFACTURING DATE</li>
|
||||
<li>*EXPIRATION DATE</li>
|
||||
<li>*BATCH/LOT NO</li>
|
||||
<li>*STORAGE REQUIREMENT</li>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Product brochures</li>
|
||||
<li>Product Manuals</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Airway Bill (AWB) for air shipments</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
<p>2.) CERTIFICATE OF ANALYSIS SHOULD BE IN COMPANY'S LETTERHEAD (MANUFACTURER) WITH COMPLETE ADDRESS AND CONTACT NUMBER, SPECIFICATIONS WITH RESULTS, STATEMENT OF CONFORMANCE, REFERENCE OFFICIAL MONOGRAPH, SIGNATURE OF THE ANALYST AND APPROVING AUTHORITY.</p>
|
||||
<p>3.) THE MANUFACTURING AND EXPIRATION DATE OF THE MATERIAL SHOULD BE MORE THAN 3 YEARS BUT NOT LESS THAN 1 YEAR.</p>
|
||||
<p>4.) GOODS TO BE DELIVERED SHOULD COME FROM ONE (1) BATCH ONLY.</p>
|
||||
<p>5.) KINDLY FURNISH IN ADVANCE, COPY OF THE SHIPPING DOCUMENTS FOR CHECKING AND APPROVAL PRIOR TO DESPATCH.</p>
|
||||
<p>6.) ORIGINAL COPIES OF THE SHIPPING DOCUMENTS (INVOICE, PACKING LIST AND COA) SHOULD BE COURIERED/SENT TO:</p>
|
||||
</div>
|
||||
<div class="shipping-address">
|
||||
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
|
||||
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 MOBILE NUMBER: +63922-899-6318</p>
|
||||
<p>CONTACT PERSON: TERESA MANIO</p>
|
||||
</div>
|
||||
<div class="instructions">
|
||||
<p>7.) ONLY ATTACH THE AIRWAY BILL (AWB) AND MSDS WITH THE SHIPMENT.</p>
|
||||
<p>8.) ARRIVAL OF SHIPMENT MUST BE FROM MONDAY TO WEDNESDAY PREFERABLY.</p>
|
||||
<p>9.) LOAD THE GOODS WITH ANY OF THE FOLLOWING PREFERRED AIRLINES:</p>
|
||||
</div>
|
||||
<div class="preferred-airlines">
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>a.) BR - Eva Air</li>
|
||||
<li>b.) CI - China Airlines</li>
|
||||
<li>c.) CZ - China Southern Airlines</li>
|
||||
<li>d.) CX - Cathay Pacific</li>
|
||||
<li>e.) JL - Japan Airlines</li>
|
||||
<li>f.) LH - Lufthansa German Airlines</li>
|
||||
<li>g.) NW - Northwest Orient</li>
|
||||
<li>h.) NX - Air Macau</li>
|
||||
<li>i.) QF - Quantas Airways</li>
|
||||
<li>j.) SQ - Singapore Airlines</li>
|
||||
<li>k.) TG - Thai Airways</li>
|
||||
<li>l.) EK - Emirates Air</li>
|
||||
<li>m.) KE - Korean Airlines</li>
|
||||
<li>n.) GF - Gulf Air</li>
|
||||
<li>o.) EY - Ethad Airways</li>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Air Shipments</div>
|
||||
|
||||
<p>For air shipments:</p>
|
||||
|
||||
<ul>
|
||||
<li>Attach only the Airway Bill (AWB) and MSDS with the shipment.</li>
|
||||
<li>Load the goods with any of the following preferred airlines:</li>
|
||||
</ul>
|
||||
|
||||
<div class="airlines">
|
||||
<ul>
|
||||
<li>BR – EVA Air</li>
|
||||
<li>CI – China Airlines</li>
|
||||
<li>CZ – China Southern Airlines</li>
|
||||
<li>CX – Cathay Pacific</li>
|
||||
<li>JL – Japan Airlines</li>
|
||||
<li>LH – Lufthansa German Airlines</li>
|
||||
<li>NW – Northwest Orient</li>
|
||||
<li>NX – Air Macau</li>
|
||||
<li>QF – Qantas Airways</li>
|
||||
<li>SQ – Singapore Airlines</li>
|
||||
<li>TG – Thai Airways</li>
|
||||
<li>EK – Emirates Air</li>
|
||||
<li>KE – Korean Airlines</li>
|
||||
<li>GF – Gulf Air</li>
|
||||
<li>EY – Etihad Airways</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p><em>*NON-COMPLIANCE TO INSTRUCTIONS WOULD MEAN NON-ACCEPTANCE OF DELIVERIES.</em></p>
|
||||
<div class="conforme">
|
||||
<p>Conforme:</p>
|
||||
<span>Supplier</span>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
@ -1,91 +1,164 @@
|
||||
<body>
|
||||
<div class="instructions">
|
||||
<p>SHIPPING INSTRUCTIONS:</p>
|
||||
<p>1.) IN COMPLIANCE WITH FDA GMP PIC/S STANDARD FOR ALL MANUFACTURING COMPANY, CONTAINERS OF ACTIVE PHARMACEUTICAL INGREDIENTS (API), AS WELL AS EXCIPIENTS SHOULD BEAR IN THE LABEL THE FOLLOWING INFORMATION:</p>
|
||||
<ul>
|
||||
<li>*NAME OF MANUFACTURER WITH COMPLETE ADDRESS AND CONTACT NUMBERS</li>
|
||||
<li>*PRODUCT NAME</li>
|
||||
<li>*GROSS WEIGHT/NET WEIGHT</li>
|
||||
<li>*MANUFACTURING DATE</li>
|
||||
<li>*EXPIRATION DATE</li>
|
||||
<li>*BATCH/LOT NO</li>
|
||||
<li>*STORAGE REQUIREMENT</li>
|
||||
</ul>
|
||||
<p>2.) CERTIFICATE OF ANALYSIS SHOULD BE IN COMPANY'S LETTERHEAD (MANUFACTURER) WITH COMPLETE ADDRESS AND CONTACT NUMBER, SPECIFICATIONS WITH RESULTS, STATEMENT OF CONFORMANCE, REFERENCE OFFICIAL MONOGRAPH, SIGNATURE OF THE ANALYST AND APPROVING AUTHORITY.</p>
|
||||
<p>3.) THE MANUFACTURING AND EXPIRATION DATE OF THE MATERIAL SHOULD BE MORE THAN 3 YEARS BUT NOT LESS THAN 1 YEAR.</p>
|
||||
<p>4.) GOODS TO BE DELIVERED SHOULD COME FROM ONE (1) BATCH ONLY.</p>
|
||||
<p>5.) KINDLY FURNISH IN ADVANCE, COPY OF THE SHIPPING DOCUMENTS FOR CHECKING AND APPROVAL PRIOR TO DESPATCH.</p>
|
||||
<p>6.) ORIGINAL COPIES OF THE SHIPPING DOCUMENTS (INVOICE, PACKING LIST AND COA) SHOULD BE COURIERED/SENT TO:</p>
|
||||
</div>
|
||||
<div class="shipping-address">
|
||||
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
|
||||
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 MOBILE NUMBER: +63922-899-6318</p>
|
||||
<p>CONTACT PERSON: TERESA MANIO</p>
|
||||
</div>
|
||||
<p><em>*NON-COMPLIANCE TO INSTRUCTIONS WOULD MEAN NON-ACCEPTANCE OF DELIVERIES.</em></p>
|
||||
<div class="conforme">
|
||||
<p>Conforme:</p>
|
||||
<span>Supplier</span>
|
||||
</div>
|
||||
|
||||
<title>Shipping Instructions – Annex A Courier</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
.container-Form {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.header {
|
||||
text-align: right;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.supplier {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.instructions {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.instructions p {
|
||||
margin: 0;
|
||||
margin-bottom: 5px;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.instructions ul {
|
||||
list-style: none;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.instructions ul li {
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.shipping-address {
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.conforme {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.conforme span {
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
width: 200px;
|
||||
border-top: 1px solid black;
|
||||
text-align: center;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</body>
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>Air</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 103<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Product brochures</li>
|
||||
<li>Product Manuals</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Airway Bill (AWB)</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Courier Shipments</div>
|
||||
|
||||
<p>For courier shipments:</p>
|
||||
|
||||
<ul>
|
||||
<li>Attach only the Airway Bill (AWB) and MSDS with the shipment.</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -0,0 +1,229 @@
|
||||
<title>Shipping Instructions – Annex A Raw Materials Air</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.airlines {
|
||||
columns: 2;
|
||||
-webkit-columns: 2;
|
||||
-moz-columns: 2;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>Air</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
In compliance with FDA GMP PIC/S standards for all manufacturing companies, containers of Active Pharmaceutical Ingredients (API) and excipients should bear the following information on the label as shipping marks:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
Consignee / Ship-to details as follows:
|
||||
|
||||
<div class="company-address">
|
||||
<strong>Lloyd Laboratories, Inc.</strong><br />
|
||||
#10 Lloyd Avenue, First Bulacan Industrial City<br />
|
||||
Brgy. Tikay, City of Malolos, Bulacan 3000, Philippines<br />
|
||||
Contact Person: Ms. Marilou Pangilinan / +63 946 900 8240
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>Product name</li>
|
||||
<li>Gross weight / Net weight</li>
|
||||
<li>Manufacturing date</li>
|
||||
<li>Expiration date</li>
|
||||
<li>Batch / Lot No.</li>
|
||||
<li>Storage requirement</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Certificate of Analysis should be in the manufacturer's company letterhead with complete address and contact number, specifications with results, statement of conformance, reference official monograph, and signature of the analyst and approving authority.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Shelf life upon schedule of dispatch should be at least 80%, or follow the shelf life requirement stated in the purchase order. Where specified, remaining shelf life upon dispatch should not be less than 18 months.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Goods to be delivered should come from one (1) batch only, unless otherwise specified in the purchase order.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 103<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Certificate of Analysis (CoA)</li>
|
||||
<li>Product brochures</li>
|
||||
<li>MSDS / SDS with CAS #</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Airway Bill (AWB) for air shipments</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Air Shipments</div>
|
||||
|
||||
<p>For air shipments:</p>
|
||||
|
||||
<ul>
|
||||
<li>Attach only the Airway Bill (AWB) and MSDS with the shipment.</li>
|
||||
<li>Load the goods with any of the following preferred airlines:</li>
|
||||
</ul>
|
||||
|
||||
<div class="airlines">
|
||||
<ul>
|
||||
<li>BR – EVA Air</li>
|
||||
<li>CI – China Airlines</li>
|
||||
<li>CZ – China Southern Airlines</li>
|
||||
<li>CX – Cathay Pacific</li>
|
||||
<li>JL – Japan Airlines</li>
|
||||
<li>LH – Lufthansa German Airlines</li>
|
||||
<li>NW – Northwest Orient</li>
|
||||
<li>NX – Air Macau</li>
|
||||
<li>QF – Qantas Airways</li>
|
||||
<li>SQ – Singapore Airlines</li>
|
||||
<li>TG – Thai Airways</li>
|
||||
<li>EK – Emirates Air</li>
|
||||
<li>KE – Korean Airlines</li>
|
||||
<li>GF – Gulf Air</li>
|
||||
<li>EY – Etihad Airways</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,201 @@
|
||||
<title>Shipping Instructions – Annex A Raw Materials Courier</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>Courier</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
In compliance with FDA GMP PIC/S standards for all manufacturing companies, containers of Active Pharmaceutical Ingredients (API) and excipients should bear the following information on the label as shipping marks:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
Consignee / Ship-to details as follows:
|
||||
|
||||
<div class="company-address">
|
||||
<strong>Lloyd Laboratories, Inc.</strong><br />
|
||||
#10 Lloyd Avenue, First Bulacan Industrial City<br />
|
||||
Brgy. Tikay, City of Malolos, Bulacan 3000, Philippines<br />
|
||||
Contact Person: Ms. Marilou Pangilinan / +63 946 900 8240
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>Product name</li>
|
||||
<li>Gross weight / Net weight</li>
|
||||
<li>Manufacturing date</li>
|
||||
<li>Expiration date</li>
|
||||
<li>Batch / Lot No.</li>
|
||||
<li>Storage requirement</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Certificate of Analysis should be in the manufacturer's company letterhead with complete address and contact number, specifications with results, statement of conformance, reference official monograph, and signature of the analyst and approving authority.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Shelf life upon schedule of dispatch should be at least 80%, or follow the shelf life requirement stated in the purchase order. Where specified, remaining shelf life upon dispatch should not be less than 18 months.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Goods to be delivered should come from one (1) batch only, unless otherwise specified in the purchase order.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 103<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Certificate of Analysis (CoA)</li>
|
||||
<li>Product brochures</li>
|
||||
<li>MSDS / SDS with CAS #</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Airway Bill (AWB)</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Courier Shipments</div>
|
||||
|
||||
<p>For courier shipments:</p>
|
||||
|
||||
<ul>
|
||||
<li>Attach only the Airway Bill (AWB) and MSDS with the shipment.</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -0,0 +1,226 @@
|
||||
<title>Shipping Instructions – Annex A Raw Materials FCL</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>FCL</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
In compliance with FDA GMP PIC/S standards for all manufacturing companies, containers of Active Pharmaceutical Ingredients (API) and excipients should bear the following information on the label as shipping marks:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
Consignee / Ship-to details as follows:
|
||||
|
||||
<div class="company-address">
|
||||
<strong>Lloyd Laboratories, Inc.</strong><br />
|
||||
#10 Lloyd Avenue, First Bulacan Industrial City<br />
|
||||
Brgy. Tikay, City of Malolos, Bulacan 3000, Philippines<br />
|
||||
Contact Person: Ms. Marilou Pangilinan / +63 946 900 8240
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>Product name</li>
|
||||
<li>Gross weight / Net weight</li>
|
||||
<li>Manufacturing date</li>
|
||||
<li>Expiration date</li>
|
||||
<li>Batch / Lot No.</li>
|
||||
<li>Storage requirement</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Certificate of Analysis should be in the manufacturer's company letterhead with complete address and contact number, specifications with results, statement of conformance, reference official monograph, and signature of the analyst and approving authority.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Shelf life upon schedule of dispatch should be at least 80%, or follow the shelf life requirement stated in the purchase order. Where specified, remaining shelf life upon dispatch should not be less than 18 months.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Goods to be delivered should come from one (1) batch only, unless otherwise specified in the purchase order.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 145<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Certificate of Analysis (CoA)</li>
|
||||
<li>Product brochures</li>
|
||||
<li>MSDS / SDS with CAS #</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Bill of Lading for sea shipments</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Sea Shipments</div>
|
||||
|
||||
<div class="section-title" style="margin-top: 10px;">FCL Shipments</div>
|
||||
|
||||
<p>For full container load (FCL) shipments:</p>
|
||||
|
||||
<ul>
|
||||
<li>Shipment must be dispatched in one full container.</li>
|
||||
<li>Preferred shipping lines for immediate release of cargo are:</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>APL (American President Lines) Shipping Lines</li>
|
||||
<li>Wallem Philippines Shipping Inc.</li>
|
||||
<li>Wan Hai Lines</li>
|
||||
<li>Evergreen Shipping Agency Phils., Corp.</li>
|
||||
<li>KMTC Philippines Corp.</li>
|
||||
<li>MOL Philippines Inc.</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>Shipping lines to avoid are:</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>SITC Container Lines Phils., Inc.</li>
|
||||
<li>COSCO Philippines Shipping, Inc.</li>
|
||||
<li>Sky International Inc.</li>
|
||||
<li>MCC Transport</li>
|
||||
<li>Maersk Line</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,214 @@
|
||||
<title>Shipping Instructions – Annex A Raw Materials LCL</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>LCL</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
In compliance with FDA GMP PIC/S standards for all manufacturing companies, containers of Active Pharmaceutical Ingredients (API) and excipients should bear the following information on the label as shipping marks:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
Consignee / Ship-to details as follows:
|
||||
|
||||
<div class="company-address">
|
||||
<strong>Lloyd Laboratories, Inc.</strong><br />
|
||||
#10 Lloyd Avenue, First Bulacan Industrial City<br />
|
||||
Brgy. Tikay, City of Malolos, Bulacan 3000, Philippines<br />
|
||||
Contact Person: Ms. Marilou Pangilinan / +63 946 900 8240
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>Product name</li>
|
||||
<li>Gross weight / Net weight</li>
|
||||
<li>Manufacturing date</li>
|
||||
<li>Expiration date</li>
|
||||
<li>Batch / Lot No.</li>
|
||||
<li>Storage requirement</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Certificate of Analysis should be in the manufacturer's company letterhead with complete address and contact number, specifications with results, statement of conformance, reference official monograph, and signature of the analyst and approving authority.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Shelf life upon schedule of dispatch should be at least 80%, or follow the shelf life requirement stated in the purchase order. Where specified, remaining shelf life upon dispatch should not be less than 18 months.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Goods to be delivered should come from one (1) batch only, unless otherwise specified in the purchase order.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 145<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Certificate of Analysis (CoA)</li>
|
||||
<li>Product brochures</li>
|
||||
<li>MSDS / SDS with CAS #</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Bill of Lading for sea shipments</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Sea Shipments</div>
|
||||
|
||||
<div class="section-title" style="margin-top: 10px;">LCL Shipments</div>
|
||||
|
||||
<p>
|
||||
For less than container load (LCL) shipments, the preferred forwarders and warehouses for cheaper inbound charges are:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Oceanlink Forwarders & Services Phils. Inc.</li>
|
||||
<li>Con-Pac Warehousing Inc.</li>
|
||||
<li>Safeway Philippines Freight Co., Inc.</li>
|
||||
<li>Philippine Consolidated Investors Corp.</li>
|
||||
<li>Pac-Atlantic Lines (Phils.) Inc.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>LCL guideline:</strong> up to 1,000 kg and up to 5 CBM, where applicable.
|
||||
</p>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
</div>
|
||||
@ -1,109 +1,188 @@
|
||||
<style>
|
||||
<title>Shipping Instructions – Annex A General FCL</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
.container-Form {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.header {
|
||||
text-align: right;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.header p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.supplier {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.instructions {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.instructions p {
|
||||
margin: 0;
|
||||
margin-bottom: 5px;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.instructions ul {
|
||||
list-style: none;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.instructions ul li {
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.shipping-address {
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.conforme {
|
||||
margin-top: 40px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.conforme span {
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
width: 200px;
|
||||
border-top: 1px solid black;
|
||||
text-align: center;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="instructions">
|
||||
<p>SHIPPING INSTRUCTIONS:</p>
|
||||
<p>1.) IN COMPLIANCE WITH FDA GMP PIC/S STANDARD FOR ALL MANUFACTURING COMPANY, CONTAINERS OF ACTIVE PHARMACEUTICAL INGREDIENTS (API), AS WELL AS EXCIPIENTS SHOULD BEAR IN THE LABEL THE FOLLOWING INFORMATION:</p>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>FCL</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 145<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>*NAME OF MANUFACTURER WITH COMPLETE ADDRESS AND CONTACT NUMBERS</li>
|
||||
<li>*PRODUCT NAME</li>
|
||||
<li>*GROSS WEIGHT/NET WEIGHT</li>
|
||||
<li>*MANUFACTURING DATE</li>
|
||||
<li>*EXPIRATION DATE</li>
|
||||
<li>*BATCH/LOT NO</li>
|
||||
<li>*STORAGE REQUIREMENT</li>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Product brochures</li>
|
||||
<li>Product Manuals</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Bill of Lading for sea shipments</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
<p>2.) CERTIFICATE OF ANALYSIS SHOULD BE IN COMPANY'S LETTERHEAD (MANUFACTURER) WITH COMPLETE ADDRESS AND CONTACT NUMBER, SPECIFICATIONS WITH RESULTS, STATEMENT OF CONFORMANCE, REFERENCE OFFICIAL MONOGRAPH, SIGNATURE OF THE ANALYST AND APPROVING AUTHORITY.</p>
|
||||
<p>3.) SHELF LIFE SHOULD BE 80% UPON SCHEDULE OF DISPATCH.</p>
|
||||
<p>4.) GOODS MUST BE IN MAXIMUM BATCH SIZE.</p>
|
||||
<p>5.) KINDLY FURNISH IN ADVANCE, COPY OF THE SHIPPING DOCUMENTS FOR CHECKING AND APPROVAL PRIOR TO DESPATCH.</p>
|
||||
<p>6.)</p>
|
||||
<p>7.) ORIGINAL COPIES OF THE SHIPPING DOCUMENTS (INVOICE, PACKING LIST, FORM AI AND COA) SHOULD BE COURIERED/SENT TO:</p>
|
||||
</div>
|
||||
<div class="shipping-address">
|
||||
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
|
||||
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 MOBILE NUMBER: +63922-899-6318</p>
|
||||
<p>CONTACT PERSON: TERESA MANIO</p>
|
||||
</div>
|
||||
<div class="instructions">
|
||||
<p>8.) SHIPMENT MUST BE DISPATCH IN 1 FULL CONTAINER.</p>
|
||||
<p>9.) IN CONNECTION TO FCL SHIPMENT, PLEASE SEE BELOW LIST OF PREFERRED SHIPPING LINES FOR IMMEDIATE RELEASE OF THE CARGO:</p>
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>1. APL (American President Lines) Shipping Lines</li>
|
||||
<li>2. WALLEM PHILIPPINES SHIPPING INC.</li>
|
||||
<li>3. WAN HAI LINES</li>
|
||||
<li>4. EVERGREEN SHIPPING AGENCY PHILS., CORP.</li>
|
||||
<li>5. KMTC PHILIPPINES CORP.</li>
|
||||
<li>6. MOL PHILIPPINES INC.</li>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
<p>Shipping Lines to avoid are:</p>
|
||||
|
||||
<div class="section-title">Sea Shipments</div>
|
||||
|
||||
<div class="section-title" style="margin-top: 10px;">FCL Shipments</div>
|
||||
|
||||
<p>For full container load (FCL) shipments:</p>
|
||||
|
||||
<ul>
|
||||
<li>1. SITC Container Lines Phils., Inc.</li>
|
||||
<li>2. COSCO Philippines Shipping, Inc.</li>
|
||||
<li>3. Sky International Inc.</li>
|
||||
<li>4. MCC Transport</li>
|
||||
<li>5. MAERSK Line</li>
|
||||
<li>Shipment must be dispatched in one full container.</li>
|
||||
<li>Preferred shipping lines for immediate release of cargo are:</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>APL (American President Lines) Shipping Lines</li>
|
||||
<li>Wallem Philippines Shipping Inc.</li>
|
||||
<li>Wan Hai Lines</li>
|
||||
<li>Evergreen Shipping Agency Phils., Corp.</li>
|
||||
<li>KMTC Philippines Corp.</li>
|
||||
<li>MOL Philippines Inc.</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>Shipping lines to avoid are:</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>SITC Container Lines Phils., Inc.</li>
|
||||
<li>COSCO Philippines Shipping, Inc.</li>
|
||||
<li>Sky International Inc.</li>
|
||||
<li>MCC Transport</li>
|
||||
<li>Maersk Line</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
<p><em>*NON-COMPLIANCE TO INSTRUCTIONS WOULD MEAN NON-ACCEPTANCE OF DELIVERIES.</em></p>
|
||||
<div class="conforme">
|
||||
<p>Conforme:</p>
|
||||
<span>Supplier</span>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -1,101 +1,175 @@
|
||||
<style>
|
||||
<title>Shipping Instructions – Annex A LCL</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
.container-Form {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.header {
|
||||
text-align: right;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.supplier {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.instructions {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.instructions p {
|
||||
margin: 0;
|
||||
margin-bottom: 5px;
|
||||
font-size: 13px;
|
||||
color: #000;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.instructions ul {
|
||||
list-style: none;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.instructions ul li {
|
||||
.field-row {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.shipping-address {
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.conforme {
|
||||
margin-top: 40px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.conforme span {
|
||||
.field-label {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
width: 200px;
|
||||
border-top: 1px solid black;
|
||||
text-align: center;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
.line {
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #000;
|
||||
min-width: 300px;
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.company-address {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.non-compliance {
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.signature-section {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.signature-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="instructions">
|
||||
<p>SHIPPING INSTRUCTIONS:</p>
|
||||
<p>1.) IN COMPLIANCE WITH FDA GMP PIC/S STANDARD FOR ALL MANUFACTURING COMPANY, CONTAINERS OF ACTIVE PHARMACEUTICAL INGREDIENTS (API), AS WELL AS EXCIPIENTS SHOULD BEAR IN THE LABEL THE FOLLOWING INFORMATION:</p>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="field-label">Mode of Shipment:</span>
|
||||
<span>LCL</span>
|
||||
</div>
|
||||
|
||||
<div class="section-title">Shipping Instructions</div>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
|
||||
</li>
|
||||
<li>
|
||||
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="company-address">
|
||||
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||
Tel. No.: +632-372-3984 to 89 local 145<br />
|
||||
Mobile No.: +63 946 900 8240<br />
|
||||
Contact Person: Ms. Marilou Pangilinan
|
||||
</div>
|
||||
|
||||
<div class="section-title">Trade and Shipping Documents</div>
|
||||
|
||||
<p>Please provide the following documents, as applicable:</p>
|
||||
|
||||
<ul>
|
||||
<li>*NAME OF MANUFACTURER WITH COMPLETE ADDRESS AND CONTACT NUMBERS</li>
|
||||
<li>*PRODUCT NAME</li>
|
||||
<li>*GROSS WEIGHT/NET WEIGHT</li>
|
||||
<li>*MANUFACTURING DATE</li>
|
||||
<li>*EXPIRATION DATE</li>
|
||||
<li>*BATCH/LOT NO</li>
|
||||
<li>*STORAGE REQUIREMENT</li>
|
||||
<li>Commercial Invoice</li>
|
||||
<li>Packing List</li>
|
||||
<li>Product brochures</li>
|
||||
<li>Product Manuals</li>
|
||||
<li>Insurance Certificate, if applicable</li>
|
||||
<li>Bill of Lading for sea shipments</li>
|
||||
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
|
||||
</ul>
|
||||
<p>2.) CERTIFICATE OF ANALYSIS SHOULD BE IN COMPANY'S LETTERHEAD (MANUFACTURER) WITH COMPLETE ADDRESS AND CONTACT NUMBER, SPECIFICATIONS WITH RESULTS, STATEMENT OF CONFORMANCE, REFERENCE OFFICIAL MONOGRAPH, SIGNATURE OF THE ANALYST AND APPROVING AUTHORITY.</p>
|
||||
<p>3.) THE MANUFACTURING AND EXPIRATION DATE OF THE MATERIAL SHOULD BE MORE THAN 3 YEARS BUT NOT LESS THAN 1 YEAR.</p>
|
||||
<p>4.) GOODS TO BE DELIVERED SHOULD COME FROM ONE (1) BATCH ONLY.</p>
|
||||
<p>5.) KINDLY FURNISH IN ADVANCE, COPY OF THE SHIPPING DOCUMENTS FOR CHECKING AND APPROVAL PRIOR TO DESPATCH.</p>
|
||||
<p>6.) ORIGINAL COPIES OF THE SHIPPING DOCUMENTS (INVOICE, PACKING LIST, FORM AI AND COA) SHOULD BE COURIERED/SENT TO:</p>
|
||||
</div>
|
||||
<div class="shipping-address">
|
||||
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
|
||||
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 MOBILE NUMBER: +63922-899-6318</p>
|
||||
<p>CONTACT PERSON: TERESA MANIO</p>
|
||||
</div>
|
||||
<div class="instructions">
|
||||
<p>7.) FOR LESS THAN CONTAINER LOAD, KINDLY SEE BELOW PREFERRED SHIPPING LINES AND WAREHOUSE FOR CHEAPER INBOUND CHARGES:</p>
|
||||
|
||||
<div class="section-title">Preferential Trade Forms</div>
|
||||
|
||||
<p>
|
||||
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>*OCEANLINK FORWARDERS & SERVICES PHILS. INC.</li>
|
||||
<li>*CON-PAC WAREHOUSING INC.</li>
|
||||
<li>*SAFEWAY PHILIPPINES FREIGHT CO., INC.</li>
|
||||
<li>*PHILIPPINE CONSOLIDATED INVESTORS CORP.</li>
|
||||
<li>*PAC-ATLANTIC LINES (PHILS.)INC.</li>
|
||||
<li>China: Form E / China-ASEAN Certificate of Origin</li>
|
||||
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
|
||||
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
|
||||
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
|
||||
</ul>
|
||||
|
||||
<div class="section-title">Sea Shipments</div>
|
||||
|
||||
<div class="section-title" style="margin-top: 10px;">LCL Shipments</div>
|
||||
|
||||
<p>
|
||||
For less than container load (LCL) shipments, the preferred forwarders and warehouses for cheaper inbound charges are:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Oceanlink Forwarders & Services Phils. Inc.</li>
|
||||
<li>Con-Pac Warehousing Inc.</li>
|
||||
<li>Safeway Philippines Freight Co., Inc.</li>
|
||||
<li>Philippine Consolidated Investors Corp.</li>
|
||||
<li>Pac-Atlantic Lines (Phils.) Inc.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>LCL guideline:</strong> up to 1,000 kg and up to 5 CBM, where applicable.
|
||||
</p>
|
||||
|
||||
<div class="section-title">Non-Compliance</div>
|
||||
|
||||
<p class="non-compliance">
|
||||
Non-compliance with these instructions would mean non-acceptance of deliveries.
|
||||
</p>
|
||||
|
||||
<div class="signature-section">
|
||||
<div class="signature-row">
|
||||
<strong>Conforme</strong>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Supplier:</span>
|
||||
<span class="line" style="min-width: 400px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Authorized Signature:</span>
|
||||
<span class="line" style="min-width: 340px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="signature-row">
|
||||
<span class="field-label">Date:</span>
|
||||
<span class="line" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
<p><em>*NON-COMPLIANCE TO INSTRUCTIONS WOULD MEAN NON-ACCEPTANCE OF DELIVERIES.</em></p>
|
||||
<div class="conforme">
|
||||
<p>Conforme:</p>
|
||||
<span>Supplier</span>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
@ -22,8 +22,8 @@
|
||||
</th>
|
||||
<th>ItemNo</th>
|
||||
<th>ItemName</th>
|
||||
<th>Description</th>
|
||||
<th>CategoryName</th>
|
||||
<th>PRTypeId</th>
|
||||
<th>Qty</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
@ -139,5 +139,5 @@
|
||||
</div>
|
||||
<link href="~/css/item/cartv2.css" rel="stylesheet" />
|
||||
@await Html.PartialAsync("PagesView/Item/_Scripts")
|
||||
<script src="~/JsFunctions/Items/ItemCartV4.js"></script>
|
||||
<script src="~/JsFunctions/Items/ItemCartV5.js"></script>
|
||||
</body>
|
||||
@ -1,50 +1,78 @@
|
||||
<body>
|
||||
<div class="container-fluid">
|
||||
<div class="row table-container shadow-lg p-2 mb-3 bg-white rounded">
|
||||
<div class="header-container">
|
||||
<div class="header-container" style="margin-bottom:10px">
|
||||
<h2 id="customPOHeading">Custom P.O. Creation</h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row" style="margin-bottom:10px">
|
||||
<!-- Left side (half of the row) -->
|
||||
<div class="col-6">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<div class="col-12 mb-2">
|
||||
<div class="row align-items-end">
|
||||
|
||||
<!-- PO No -->
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<label for="poNo">PO No.</label>
|
||||
<label for="poNo">
|
||||
PO No.
|
||||
<i class="bx bx-pencil"
|
||||
style="color: orange; font-size: 1.2rem; cursor: pointer;"
|
||||
onclick="enablePONoAutocomplete()"></i>
|
||||
</label>
|
||||
|
||||
<input type="search" readonly id="poNo" class="form-control">
|
||||
<input type="hidden" id="poId" class="form-control" name="poId" />
|
||||
|
||||
<input type="hidden"
|
||||
id="poId"
|
||||
class="form-control"
|
||||
name="poId" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
|
||||
<!-- Final PO No -->
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<label for="poNoFinal">Final PO No.</label>
|
||||
<input readonly id="poNoFinal" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
|
||||
<!-- PO Type -->
|
||||
<div class="col-md-2">
|
||||
<div class="form-group">
|
||||
<label for="poType">PO Type</label>
|
||||
<select class="form-control" name="poType" id="poType"
|
||||
|
||||
<select class="form-control"
|
||||
name="poType"
|
||||
id="poType"
|
||||
onchange="customFormPOElemComponent(this.value)">
|
||||
<option value="0" disabled selected>-Select PO Type-</option>
|
||||
|
||||
<option value="0" disabled selected>
|
||||
-Select PO Type-
|
||||
</option>
|
||||
|
||||
<option value="1">SI</option>
|
||||
<option value="2">DR</option>
|
||||
<option value="3">Import</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Supplier (Wider) -->
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="supplierName">Supplier</label>
|
||||
|
||||
<input type="search"
|
||||
id="supplierName"
|
||||
class="form-control"
|
||||
name="supplierName" />
|
||||
|
||||
<input type="hidden"
|
||||
id="supplierId"
|
||||
name="supplierId" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Right side (half of the row) -->
|
||||
<div class="col-6">
|
||||
<div class="form-group">
|
||||
<label for="supplierName">Supplier</label>
|
||||
<input type="search" id="supplierName" class="form-control mb-2" name="supplierName" />
|
||||
<input type="hidden" id="supplierId" class="form-control" name="supplierId" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -55,7 +83,7 @@
|
||||
</div>
|
||||
|
||||
<div class="table-container shadow-lg p-3 mb-3 bg-white rounded">
|
||||
<button type="button" class="btn btn-success"
|
||||
<button type="button" class="btn-choose"
|
||||
id="chooseItem" onclick="viewPRWOCanvass()">
|
||||
Choose Item
|
||||
</button>
|
||||
@ -94,10 +122,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal OtherCharges-->
|
||||
<div class="modal fade custom-modal-backdrop" id="addCharges"
|
||||
tabindex="-1" aria-labelledby="addChargesLabel" data-bs-backdrop="static">
|
||||
<div class="modal-dialog modal-xl" role="document">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3 id="addChargesLabel" class="modal-title">
|
||||
@ -165,9 +194,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input hidden id="poTypeId"/>
|
||||
<link href="~/css/po/CustomPOV2.css" rel="stylesheet" />
|
||||
<script src="~/JsFunctions/PO/CustomPOV8.js"></script>
|
||||
<link href="~/css/po/CustomPOV3.css" rel="stylesheet" />
|
||||
<script src="~/JsFunctions/PO/CustomPOV9.js"></script>
|
||||
@await Html.PartialAsync("PagesView/PR/_PRWOCanvass")
|
||||
@await Html.PartialAsync("PagesView/PO/_POScripts")
|
||||
</body>
|
||||
@ -236,17 +236,28 @@
|
||||
<div class="second-page">
|
||||
<div class="container-Form">
|
||||
<div class="header">
|
||||
<p>ANNEX A</p>
|
||||
<p class="title">Shipping Instructions – Annex A</p>
|
||||
</div>
|
||||
<div class="supplier">
|
||||
<p>PO NO.: <strong id="poNo-C-2ndPage"></strong></p>
|
||||
@* <div </div> *@
|
||||
|
||||
<div class="field-row">
|
||||
<span class="label">PO No.:</span>
|
||||
<span class="line" id="poNo-C-2ndPage" style="min-width: 220px;"></span>
|
||||
</div>
|
||||
<div class="supplier">
|
||||
<p>SUPPLIER: <strong id="supplier-C-2ndPage"></strong></p>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="label">Supplier:</span>
|
||||
<span class="line" id="supplier-C-2ndPage" style="min-width: 350px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="field-row">
|
||||
<span class="label">Country of Origin:</span>
|
||||
<span class="line" id="countryOrigin-C-2ndPage" style="min-width: 300px;"></span>
|
||||
</div>
|
||||
<!-- Toggle Button -->
|
||||
<button id="toggleShippingInstructions" class="btn btn-secondary" onclick="toggleShippingInstructions()">Hide Shipping Instructions</button>
|
||||
<div id="shippingInstructionsContainer">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -305,10 +316,15 @@
|
||||
<select class="form-control" name="shippingInstructionId" id="shippingInstructionId"
|
||||
style="margin-bottom:5px;">
|
||||
<option disabled>-Select Shipping Instruction-</option>
|
||||
<option value="1">AIR</option>
|
||||
<option value="2">COURIER</option>
|
||||
<option value="3">SEA FCL</option>
|
||||
<option value="4">SEA LCL</option>
|
||||
<option disabled selected>— Select —</option>
|
||||
<option value="1">General AIR</option>
|
||||
<option value="2">General COURIER</option>
|
||||
<option value="3">General SEA FCL</option>
|
||||
<option value="4">General SEA LCL</option>
|
||||
<option value="5">RawMat AIR</option>
|
||||
<option value="6">RawMat COURIER</option>
|
||||
<option value="7">RawMat SEA FCL</option>
|
||||
<option value="8">RawMat SEA LCL</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
||||
@ -11,11 +11,11 @@
|
||||
<script src="~/jsfunctions/common/termsV2.js"></script>
|
||||
<script src="~/jsfunctions/common/ColumnCommonV2.js"></script>
|
||||
<script src="~/jsfunctions/common/genericcrud.js"></script>
|
||||
<script src="~/jsfunctions/common/ParamConfigV2.js"></script>
|
||||
<script src="~/jsfunctions/common/PostPutV2.js"></script>
|
||||
<script src="~/jsfunctions/common/ParamConfigV3.js"></script>
|
||||
<script src="~/jsfunctions/common/PostPutV3.js"></script>
|
||||
<script src="~/jsfunctions/common/PRWOCanvassV2.js"></script>
|
||||
|
||||
<script src="~/jsfunctions/po/POButtonV9.js"></script>
|
||||
<script src="~/jsfunctions/po/POButton.js"></script>
|
||||
<script src="~/jsfunctions/po/PrintingV2.js"></script>
|
||||
<script src="~/JsFunctions/PO/POColumn.js"></script>
|
||||
<script src="~/jsfunctions/po/ApiV5.js"></script>
|
||||
@ -23,8 +23,8 @@
|
||||
<script src="~/jsfunctions/po/POVarV6.js"></script>
|
||||
<script src="~/jsfunctions/po/POViewV5.js"></script>
|
||||
<script src="~/jsfunctions/po/PopulateDopdownV4.js"></script>
|
||||
<script src="~/jsfunctions/po/POPutPostV4.js"></script>
|
||||
<script src="~/jsfunctions/po/rowCallBackV5.js"></script>
|
||||
<script src="~/jsfunctions/po/POPutPostV5.js"></script>
|
||||
<script src="~/jsfunctions/po/rowCallBackV6.js"></script>
|
||||
|
||||
<script src="~/jsfunctions/utilities/NewStyle.js"></script>
|
||||
<script src="~/jsfunctions/utilities/utilsV3.js"></script>
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<title>@ViewData["Title"] - LLI Purchasing Non-Inventory System</title>
|
||||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="~/css/sideBarStyleV2.css" />
|
||||
<link rel="stylesheet" href="~/css/siteV7.css" asp-append-version="true" />
|
||||
<link rel="stylesheet" href="~/css/siteV8.css" asp-append-version="true" />
|
||||
<link rel="stylesheet" href="~/css/spinner.css" />
|
||||
<link href="~/lib/font-awesome/css/all.css" rel="stylesheet" />
|
||||
<link href="~/lib/font-awesome/css/all.min.css" rel="stylesheet" />
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<script src="~/js/sidebar.js"></script>
|
||||
<script src="~/Datatables/DataTables-1.13.6/js/jquery.dataTables.min.js"></script>
|
||||
<script src="~/datatables/responsive-2.5.0/js/datatables.responsive.min.js"></script>
|
||||
<script src="~/jsfunctions/account/sessionTimeoutV3.js"></script>
|
||||
<script src="~/jsfunctions/account/sessionTimeoutV4.js"></script>
|
||||
<script src="~/lib/jquery-ui-1132custom/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- DataTables Buttons and Export JS -->
|
||||
|
||||
@ -52,24 +52,7 @@ var colOnColDef = [
|
||||
visible: false,
|
||||
}
|
||||
];
|
||||
var colAccountDetail = [
|
||||
{
|
||||
data: 'userAccessId',
|
||||
render: function () {
|
||||
return '<input type="checkbox" class="select-Access-checkbox" />';
|
||||
}
|
||||
},
|
||||
{ data: 'accessType' },
|
||||
{ data: 'pageName' },
|
||||
{ data: 'isActive' },
|
||||
{
|
||||
data: null,
|
||||
render: function (data, type, row) {
|
||||
return renderAccessDetailbtn(data, row);
|
||||
}
|
||||
},
|
||||
{ data: 'contAccId', visible: false },
|
||||
];
|
||||
|
||||
var colAccountDetailNot = [
|
||||
{
|
||||
data: 'userAccessId',
|
||||
|
||||
@ -1,46 +1,42 @@
|
||||
function postPutAccessRights(IsNotExist) {
|
||||
loader = $('#overlay, #loader').css('z-index', 1070);
|
||||
|
||||
var selectedCheckboxes = IsNotExist ? $('.select-NotAccess-checkbox:checked') :
|
||||
$('.select-Access-checkbox:checked');
|
||||
var dynamicTable = IsNotExist ? notAccessDataTable : accessDataTable;
|
||||
var userRightsList = [];
|
||||
selectedCheckboxes.each(function () {
|
||||
var $row = $(this).closest('tr');
|
||||
var rowIndex = dynamicTable.row($row).index();
|
||||
var rowData = dynamicTable.row(rowIndex).data();
|
||||
var userAccessId = IsNotExist ? 13 : rowData.userAccessId;
|
||||
var contAccId = rowData.contAccId;
|
||||
var accessTypeId = rowData.accessTypeId;
|
||||
var isActive = rowData.isActive;
|
||||
var itemData = {
|
||||
UserAccessId: userAccessId,
|
||||
ContAccId: contAccId,
|
||||
AccessTypeId: accessTypeId,
|
||||
IsActive: isActive,
|
||||
};
|
||||
userRightsList.push(itemData);
|
||||
});
|
||||
if (selectedCheckboxes.length <= 0) {
|
||||
alert('No selected item!');
|
||||
const selectedItems = Object.values(selectedProductsMap);
|
||||
if (selectedItems.length === 0) {
|
||||
showToast('warning', 'Please select items for access first!', 'User access failed', 4000);
|
||||
return;
|
||||
}
|
||||
const confirmation = confirm('Are you sure you want to proceed?');
|
||||
|
||||
if (confirmation) {
|
||||
const userRightsList = selectedItems.map(item => {
|
||||
return {
|
||||
UserAccessId: item.userAccessId,
|
||||
ContAccId: item.contAccId,
|
||||
AccessTypeId: item.accessTypeId,
|
||||
IsActive: true,
|
||||
};
|
||||
});
|
||||
console.log(userRightsList);
|
||||
|
||||
showConfirmation({
|
||||
title: 'User Access Rights',
|
||||
message: 'Are you sure you want to proceed? This action cannot be undone.',
|
||||
type: 'warning',
|
||||
confirmText: 'Yes',
|
||||
cancelText: 'No'
|
||||
}).then((confirmed) => {
|
||||
|
||||
if (confirmed) {
|
||||
$.ajax({
|
||||
url: '/Account/PutPostUserAccess',
|
||||
type: 'POST',
|
||||
data: { userRightsList, IsNotExist, UserId },
|
||||
success: function (response) {
|
||||
if (response.success) {
|
||||
$('#viewItemList').modal('hide');
|
||||
notAccessDataTable.ajax.reload();
|
||||
closeModal('modalAccess');
|
||||
accessDataTable.ajax.reload();
|
||||
alert('Pages Successfully Added!');
|
||||
showToast('success', 'Access rights saved!', 'User access', 4000);
|
||||
} else {
|
||||
alert('Failed: ' + response.response);
|
||||
notAccessDataTable.ajax.reload();
|
||||
showToast('error', response.response, 'User access failed', 4000);
|
||||
accessDataTable.ajax.reload();
|
||||
}
|
||||
},
|
||||
@ -52,4 +48,5 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1,31 +1,31 @@
|
||||
//navigate the picture
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var profilePictureImage = document.getElementById("profilePictureImage");
|
||||
var profilePictureInput = document.getElementById("profilePictureInput");
|
||||
//document.addEventListener("DOMContentLoaded", function () {
|
||||
// var profilePictureImage = document.getElementById("profilePictureImage");
|
||||
// var profilePictureInput = document.getElementById("profilePictureInput");
|
||||
|
||||
// Set a default image source for the profile picture
|
||||
profilePictureImage.src = "/Content/Images/404userImage.jpg";
|
||||
// // Set a default image source for the profile picture
|
||||
// profilePictureImage.src = "wwwroot/Content/Images/404userImage.jpg";
|
||||
|
||||
// Add a click event listener to the profile picture to trigger the file input
|
||||
profilePictureImage.addEventListener("click", function () {
|
||||
profilePictureInput.click();
|
||||
});
|
||||
// // Add a click event listener to the profile picture to trigger the file input
|
||||
// profilePictureImage.addEventListener("click", function () {
|
||||
// profilePictureInput.click();
|
||||
// });
|
||||
|
||||
// Add a change event listener to the file input
|
||||
profilePictureInput.addEventListener("change", function () {
|
||||
var ProfilePicture = profilePictureInput.files[0];
|
||||
// // Add a change event listener to the file input
|
||||
// profilePictureInput.addEventListener("change", function () {
|
||||
// var ProfilePicture = profilePictureInput.files[0];
|
||||
|
||||
if (ProfilePicture) {
|
||||
// Display the selected image
|
||||
var imageURL = URL.createObjectURL(ProfilePicture);
|
||||
profilePictureImage.src = imageURL;
|
||||
} else {
|
||||
// No file selected, revert to the default image
|
||||
console.log("No file selected, using default image");
|
||||
profilePictureImage.src = "/Content/Images/404userImage.jpg";
|
||||
}
|
||||
});
|
||||
});
|
||||
// if (ProfilePicture) {
|
||||
// // Display the selected image
|
||||
// var imageURL = URL.createObjectURL(ProfilePicture);
|
||||
// profilePictureImage.src = imageURL;
|
||||
// } else {
|
||||
// // No file selected, revert to the default image
|
||||
// console.log("No file selected, using default image");
|
||||
// profilePictureImage.src = "wwwroot/Content/Images/404userImage.jpg";
|
||||
// }
|
||||
// });
|
||||
//});
|
||||
|
||||
let jsonObj = {};
|
||||
|
||||
@ -39,134 +39,134 @@ function renderAccessDetailbtn(data, row) {
|
||||
|
||||
return buttonsHtml;
|
||||
}
|
||||
function viewUserAccessNotExist() {
|
||||
loader = $('#overlay, #loader');
|
||||
$('#viewUserAccessNotExist').modal('show');
|
||||
$('#viewUserAccessNotExist').css('z-index', 1060);
|
||||
tableElement = $('#NotAccessDataTable');
|
||||
tableDestroy(tableElement);
|
||||
var submitButton = $('#btnNotAccess');
|
||||
var totalSelectedLabel = $('#totalSelNotAccess');
|
||||
let IsNotExist = true;
|
||||
notAccessDataTable = tableElement.DataTable({
|
||||
ajax: $.extend({
|
||||
url: '/Account/GetUserRights',
|
||||
type: 'POST',
|
||||
data: { UserId, IsNotExist },
|
||||
}, beforeComplete(loader)),
|
||||
language: {
|
||||
emptyTable: "No record available"
|
||||
},
|
||||
initComplete: function () {
|
||||
var api = this.api();
|
||||
var data = api.ajax.json();
|
||||
if (!data || !data.data || data.data === "No Data") {
|
||||
$('.dataTables_empty').html("No record available");
|
||||
}
|
||||
updateSubmitBtnVisib();
|
||||
updateSelectedCount();
|
||||
},
|
||||
columns: colAccountDetailNot,
|
||||
responsive: true,
|
||||
error: errorHandler
|
||||
});
|
||||
function updateSubmitBtnVisib() {
|
||||
var isEmpty = notAccessDataTable.data().length === 0;
|
||||
submitButton.toggle(!isEmpty);
|
||||
}
|
||||
$('#NotAccessDataTable').on('change', '.select-NotAccess-checkbox', function () {
|
||||
var row = $(this).closest('tr');
|
||||
if ($(this).prop('checked')) {
|
||||
row.addClass('selected-row');
|
||||
} else {
|
||||
row.removeClass('selected-row');
|
||||
}
|
||||
updateSelectedCount();
|
||||
});
|
||||
////function viewUserAccessNotExist() {
|
||||
//// loader = $('#overlay, #loader');
|
||||
//// $('#viewUserAccessNotExist').modal('show');
|
||||
//// $('#viewUserAccessNotExist').css('z-index', 1060);
|
||||
//// tableElement = $('#NotAccessDataTable');
|
||||
//// tableDestroy(tableElement);
|
||||
//// var submitButton = $('#btnNotAccess');
|
||||
//// var totalSelectedLabel = $('#totalSelNotAccess');
|
||||
//// let IsNotExist = true;
|
||||
//// notAccessDataTable = tableElement.DataTable({
|
||||
//// ajax: $.extend({
|
||||
//// url: '/Account/GetUserRights',
|
||||
//// type: 'POST',
|
||||
//// data: { UserId, IsNotExist },
|
||||
//// }, beforeComplete(loader)),
|
||||
//// language: {
|
||||
//// emptyTable: "No record available"
|
||||
//// },
|
||||
//// initComplete: function () {
|
||||
//// var api = this.api();
|
||||
//// var data = api.ajax.json();
|
||||
//// if (!data || !data.data || data.data === "No Data") {
|
||||
//// $('.dataTables_empty').html("No record available");
|
||||
//// }
|
||||
//// updateSubmitBtnVisib();
|
||||
//// updateSelectedCount();
|
||||
//// },
|
||||
//// columns: colAccountDetailNot,
|
||||
//// responsive: true,
|
||||
//// error: errorHandler
|
||||
//// });
|
||||
//// function updateSubmitBtnVisib() {
|
||||
//// var isEmpty = notAccessDataTable.data().length === 0;
|
||||
//// submitButton.toggle(!isEmpty);
|
||||
//// }
|
||||
//// $('#NotAccessDataTable').on('change', '.select-NotAccess-checkbox', function () {
|
||||
//// var row = $(this).closest('tr');
|
||||
//// if ($(this).prop('checked')) {
|
||||
//// row.addClass('selected-row');
|
||||
//// } else {
|
||||
//// row.removeClass('selected-row');
|
||||
//// }
|
||||
//// updateSelectedCount();
|
||||
//// });
|
||||
|
||||
$('#selectAllCheckboxNotAccess').on('change', function () {
|
||||
var isChecked = $(this).prop('checked');
|
||||
$('.select-NotAccess-checkbox').prop('checked', isChecked);
|
||||
if (isChecked) {
|
||||
$('#NotAccessDataTable tbody tr').addClass('selected-row');
|
||||
} else {
|
||||
$('#NotAccessDataTable tbody tr').removeClass('selected-row');
|
||||
}
|
||||
updateSelectedCount();
|
||||
});
|
||||
function updateSelectedCount() {
|
||||
var totalSelected = $('.select-NotAccess-checkbox:checked').length;
|
||||
totalSelectedLabel.text(totalSelected);
|
||||
}
|
||||
}
|
||||
function viewUserAccess(data) {
|
||||
loader = $('#overlay, #loader');
|
||||
$('#viewUserAccess').modal('show');
|
||||
$('#viewUserAccess').css('z-index', 1050);
|
||||
tableElement = $('#AccessDataTable');
|
||||
tableDestroy(tableElement);
|
||||
var submitButton = $('#btnAccess');
|
||||
var totalSelectedLabel = $('#totalSelAccess');
|
||||
UserId = data.id;
|
||||
//CanvassId = data.canvassId;
|
||||
$('#ua-EmailAddress').val(data.email);
|
||||
$('#ua-FullName').val(data.fullName);
|
||||
$('#uan-EmailAddress').val(data.email);
|
||||
$('#uan-FullName').val(data.fullName);
|
||||
accessDataTable = tableElement.DataTable({
|
||||
ajax: $.extend({
|
||||
url: '/Account/GetUserRights',
|
||||
type: 'POST',
|
||||
data: { UserId },
|
||||
}, beforeComplete(loader)),
|
||||
language: {
|
||||
emptyTable: "No record available"
|
||||
},
|
||||
initComplete: function () {
|
||||
var api = this.api();
|
||||
var data = api.ajax.json();
|
||||
if (!data || !data.data || data.data === "No Data") {
|
||||
$('.dataTables_empty').html("No record available");
|
||||
}
|
||||
updateSubmitBtnVisib();
|
||||
updateSelectedCount();
|
||||
},
|
||||
columns: colAccountDetail,
|
||||
responsive: true,
|
||||
error: errorHandler
|
||||
});
|
||||
function updateSubmitBtnVisib() {
|
||||
var isEmpty = accessDataTable.data().length === 0;
|
||||
submitButton.toggle(!isEmpty);
|
||||
}
|
||||
$('#AccessDataTable').on('change', '.select-Access-checkbox', function () {
|
||||
var row = $(this).closest('tr');
|
||||
if ($(this).prop('checked')) {
|
||||
row.addClass('selected-row');
|
||||
} else {
|
||||
row.removeClass('selected-row');
|
||||
}
|
||||
updateSelectedCount();
|
||||
});
|
||||
//// $('#selectAllCheckboxNotAccess').on('change', function () {
|
||||
//// var isChecked = $(this).prop('checked');
|
||||
//// $('.select-NotAccess-checkbox').prop('checked', isChecked);
|
||||
//// if (isChecked) {
|
||||
//// $('#NotAccessDataTable tbody tr').addClass('selected-row');
|
||||
//// } else {
|
||||
//// $('#NotAccessDataTable tbody tr').removeClass('selected-row');
|
||||
//// }
|
||||
//// updateSelectedCount();
|
||||
//// });
|
||||
//// function updateSelectedCount() {
|
||||
//// var totalSelected = $('.select-NotAccess-checkbox:checked').length;
|
||||
//// totalSelectedLabel.text(totalSelected);
|
||||
//// }
|
||||
////}
|
||||
////function viewUserAccess(data) {
|
||||
//// loader = $('#overlay, #loader');
|
||||
//// $('#viewUserAccess').modal('show');
|
||||
//// $('#viewUserAccess').css('z-index', 1050);
|
||||
//// tableElement = $('#AccessDataTable');
|
||||
//// tableDestroy(tableElement);
|
||||
//// var submitButton = $('#btnAccess');
|
||||
//// var totalSelectedLabel = $('#totalSelAccess');
|
||||
//// UserId = data.id;
|
||||
//// //CanvassId = data.canvassId;
|
||||
//// $('#ua-EmailAddress').val(data.email);
|
||||
//// $('#ua-FullName').val(data.fullName);
|
||||
//// $('#uan-EmailAddress').val(data.email);
|
||||
//// $('#uan-FullName').val(data.fullName);
|
||||
//// accessDataTable = tableElement.DataTable({
|
||||
//// ajax: $.extend({
|
||||
//// url: '/Account/GetUserRights',
|
||||
//// type: 'POST',
|
||||
//// data: { UserId },
|
||||
//// }, beforeComplete(loader)),
|
||||
//// language: {
|
||||
//// emptyTable: "No record available"
|
||||
//// },
|
||||
//// initComplete: function () {
|
||||
//// var api = this.api();
|
||||
//// var data = api.ajax.json();
|
||||
//// if (!data || !data.data || data.data === "No Data") {
|
||||
//// $('.dataTables_empty').html("No record available");
|
||||
//// }
|
||||
//// updateSubmitBtnVisib();
|
||||
//// updateSelectedCount();
|
||||
//// },
|
||||
//// columns: colAccountDetail,
|
||||
//// responsive: true,
|
||||
//// error: errorHandler
|
||||
//// });
|
||||
//// function updateSubmitBtnVisib() {
|
||||
//// var isEmpty = accessDataTable.data().length === 0;
|
||||
//// submitButton.toggle(!isEmpty);
|
||||
//// }
|
||||
//// $('#AccessDataTable').on('change', '.select-Access-checkbox', function () {
|
||||
//// var row = $(this).closest('tr');
|
||||
//// if ($(this).prop('checked')) {
|
||||
//// row.addClass('selected-row');
|
||||
//// } else {
|
||||
//// row.removeClass('selected-row');
|
||||
//// }
|
||||
//// updateSelectedCount();
|
||||
//// });
|
||||
|
||||
$('#selectAllCheckboxAccess').on('change', function () {
|
||||
var isChecked = $(this).prop('checked');
|
||||
$('.select-Access-checkbox').prop('checked', isChecked);
|
||||
if (isChecked) {
|
||||
$('#AccessDataTable tbody tr').addClass('selected-row');
|
||||
} else {
|
||||
$('#AccessDataTable tbody tr').removeClass('selected-row');
|
||||
}
|
||||
updateSelectedCount();
|
||||
});
|
||||
function updateSelectedCount() {
|
||||
var totalSelected = $('.select-Access-checkbox:checked').length;
|
||||
totalSelectedLabel.text(totalSelected);
|
||||
}
|
||||
}
|
||||
function ShowNewAccess() {
|
||||
viewUserAccessNotExist();
|
||||
}
|
||||
//// $('#selectAllCheckboxAccess').on('change', function () {
|
||||
//// var isChecked = $(this).prop('checked');
|
||||
//// $('.select-Access-checkbox').prop('checked', isChecked);
|
||||
//// if (isChecked) {
|
||||
//// $('#AccessDataTable tbody tr').addClass('selected-row');
|
||||
//// } else {
|
||||
//// $('#AccessDataTable tbody tr').removeClass('selected-row');
|
||||
//// }
|
||||
//// updateSelectedCount();
|
||||
//// });
|
||||
//// function updateSelectedCount() {
|
||||
//// var totalSelected = $('.select-Access-checkbox:checked').length;
|
||||
//// totalSelectedLabel.text(totalSelected);
|
||||
//// }
|
||||
////}
|
||||
////function ShowNewAccess() {
|
||||
//// viewUserAccessNotExist();
|
||||
////}
|
||||
function showUpdateUserProfile(jsonData) {
|
||||
jsonObj = jsonData;
|
||||
|
||||
@ -414,20 +414,7 @@ function addNewUser() {
|
||||
});
|
||||
}
|
||||
// Use this function to populate roles
|
||||
function renderUserBtns(data, row) {
|
||||
var jsonData = JSON.stringify(row).replace(/"/g, """);
|
||||
var buttonsHtml = '';
|
||||
|
||||
buttonsHtml += '<button onclick="showUpdateUserProfile(' + jsonData + ')" class="btn btn-default">' +
|
||||
'<i class="fa fa-pen-to-square fa-xl" style="color: #FFA500;" aria-hidden="true"></i>' +
|
||||
'</button>';
|
||||
|
||||
buttonsHtml += '<button onclick="viewUserAccess(' + jsonData + ')" class="btn btn-default">' +
|
||||
'<i class="fa-brands fa-elementor fa-xl" style="color: #008080;" aria-hidden="true"></i>' +
|
||||
'</button > ';
|
||||
|
||||
return buttonsHtml;
|
||||
}
|
||||
function populateRoles() {
|
||||
$.ajax({
|
||||
url: "/Account/GetRoles", // Update this with your actual controller and action
|
||||
@ -456,25 +443,25 @@ function populateRoles() {
|
||||
}
|
||||
});
|
||||
}
|
||||
$(document).ready(function () {
|
||||
loader = $('#overlay, #loader');
|
||||
UserRights = document.getElementById("roleRights").value;
|
||||
populateRoles();
|
||||
userListTable = $('#UserListTable').DataTable({
|
||||
ajax: $.extend({
|
||||
url: '/Account/GetAllUsers',
|
||||
type: 'GET',
|
||||
}, beforeComplete(loader)),
|
||||
initComplete: initCompleteCallback,
|
||||
columns: colOnUserList,
|
||||
columnDefs: colOnColDef,
|
||||
language: {
|
||||
emptyTable: "No record available"
|
||||
},
|
||||
rowCallback: rowAccountCallback,
|
||||
responsive: true,
|
||||
error: errorHandler
|
||||
});
|
||||
})
|
||||
//$(document).ready(function () {
|
||||
// loader = $('#overlay, #loader');
|
||||
// //UserRights = document.getElementById("roleRights").value;
|
||||
// populateRoles();
|
||||
// userListTable = $('#UserListTable').DataTable({
|
||||
// ajax: $.extend({
|
||||
// url: '/Account/GetAllUsers',
|
||||
// type: 'GET',
|
||||
// }, beforeComplete(loader)),
|
||||
// initComplete: initCompleteCallback,
|
||||
// columns: colOnUserList,
|
||||
// columnDefs: colOnColDef,
|
||||
// language: {
|
||||
// emptyTable: "No record available"
|
||||
// },
|
||||
// rowCallback: rowAccountCallback,
|
||||
// responsive: true,
|
||||
// error: errorHandler
|
||||
// });
|
||||
//})
|
||||
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// Configuration
|
||||
const CONFIG = {
|
||||
timeoutMinutes: 120, // Total session timeout
|
||||
timeoutMinutes: 240, // Total session timeout
|
||||
checkIntervalSeconds: 60, // How often to check (every minute)
|
||||
warningMinutes: 5, // Warn THIS many minutes before timeout
|
||||
logoutUrl: '/Home/Index',
|
||||
@ -67,7 +67,7 @@ function showTimeoutWarning(remainingMinutes) {
|
||||
updateCountdown();
|
||||
countdownInterval = setInterval(updateCountdown, 1000);
|
||||
|
||||
console.log(`Session warning shown: ${remainingMinutes} minutes remaining`);
|
||||
//console.log(`Session warning shown: ${remainingMinutes} minutes remaining`);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -11,6 +11,7 @@
|
||||
deliverTo: '',
|
||||
itemName: '',
|
||||
specification: '',
|
||||
countryOrigin: '',
|
||||
qty: 0,
|
||||
uomName: '',
|
||||
uomId: 0
|
||||
@ -49,6 +49,7 @@ function poValidateParameters(poTypeId, method, isItem) {
|
||||
profInvoiceDate: document.getElementById('piDate'),
|
||||
shippingInstructionId: document.getElementById('shippingInstructionId'),
|
||||
podId: document.getElementById('podId'),
|
||||
countryOrigin: document.getElementById('countryOrigin'),
|
||||
});
|
||||
} else {
|
||||
// Fields specific to other poTypeId values
|
||||
@ -99,6 +100,7 @@ function clearCustomPOParam() {
|
||||
paymentTermsId: 0,
|
||||
supplierId: 0,
|
||||
supplierName: '',
|
||||
countryOrigin: '',
|
||||
deliveryDate: new Date().toISOString().split('T')[0],
|
||||
deliverTo: ''
|
||||
};
|
||||
@ -135,6 +137,7 @@ function poDTO(config) {
|
||||
DeliverTo = config.deliverTo;
|
||||
DeliveryDate = config.deliveryDate;
|
||||
ItemName = config.itemName;
|
||||
CountryOrigin = config.countryOrigin;
|
||||
Specification = config.specification;
|
||||
Qty = config.qty;
|
||||
UOMName = config.uomName;
|
||||
@ -116,8 +116,8 @@ $(document).ready(function () {
|
||||
},
|
||||
{ data: 'itemNo' },
|
||||
{ data: 'itemName' },
|
||||
{ data: 'itemDescription' },
|
||||
{ data: 'itemCategoryName' },
|
||||
{ data: 'prTypeId' },
|
||||
{ data: 'qty' },
|
||||
{
|
||||
data: null,
|
||||
@ -139,22 +139,11 @@ $(document).ready(function () {
|
||||
var cartItemCount = data.cartItemCount;
|
||||
var itemCount = parseInt(cartItemCount, 10);
|
||||
|
||||
var prTypeIdCell = $('td:eq(4)', row);
|
||||
var PRTypeId = prTypeIdCell.text();
|
||||
var PRTypeIdNumer = parseInt(PRTypeId, 10);
|
||||
|
||||
if (!isNaN(itemCount)) {
|
||||
$('#cartCount').text(itemCount);
|
||||
} else {
|
||||
$('#cartCount').text('0');
|
||||
}
|
||||
if (!isNaN(PRTypeIdNumer)) {
|
||||
if (PRTypeIdNumer === 1) {
|
||||
prTypeIdCell.text('Goods').addClass('next-facilitator');
|
||||
} else {
|
||||
prTypeIdCell.text('Service').addClass('next-facilitator');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
order: [[0, 'desc']],
|
||||
@ -59,9 +59,11 @@ async function fetchAndPopulatePOFormData(poType, poId = null) {
|
||||
$('#deliverTo').val(d.header.deliverTo || '');
|
||||
|
||||
$('#piNo').val(d.header.profInvoiceNo || '');
|
||||
$('#countryOrigin').val(d.header.countryOrigin || '');
|
||||
$('#currencyCER').val(d.header.currencyCER || '59.00');
|
||||
$('#podId').val(d.header.podId || 0);
|
||||
$('#shippingInstructionId').val(1);
|
||||
console.log('shipping Instruction', d.header.shippingInstructionId);
|
||||
$('#shippingInstructionId').val(d.header.shippingInstructionId);
|
||||
$('#discount').val(d.header.discount || 0);
|
||||
|
||||
$('#C-paymentTerms').val(d.header.paymentTerms || '');
|
||||
@ -98,9 +100,13 @@ async function fetchAndPopulatePOFormData(poType, poId = null) {
|
||||
'<td style="display: none;">' + charge.otherChargesId + '</td>' +
|
||||
'<td>' + charge.otherChargesName + '</td>' +
|
||||
'<td>' + charge.amount + '</td>' +
|
||||
'<td><button class="btn btn-default" onclick="removeRow(this)" data-otherChargesId="' + charge.otherChargesId + '">' +
|
||||
'<i class="fa-solid fa-trash fa-xl" style="color: #ff0000;" aria-hidden="true"></i>' +
|
||||
'</button></td>' +
|
||||
'<td>' +
|
||||
'<button class="btn btn-default btn-trash-sm" ' +
|
||||
'onclick="removeRow(this)" ' +
|
||||
'data-otherChargesId="' + charge.otherChargesId + '">' +
|
||||
'<i class="fa-regular fa-trash-can" style="color: #ff0000;" aria-hidden="true"></i>' +
|
||||
'</button>' +
|
||||
'</td>' +
|
||||
'</tr>';
|
||||
$tbody.append(newRow);
|
||||
});
|
||||
@ -24,8 +24,8 @@
|
||||
function renderDelItem(data, row) {
|
||||
var jsonData = JSON.stringify(row).replace(/"/g, """);
|
||||
var buttonsHtml = '';
|
||||
buttonsHtml += '<button onclick="removeRowMain(' + jsonData + ')" class="btn btn-default">' +
|
||||
'<i class="fa-solid fa-trash fa-xl" style="color: #ff0000;" aria-hidden="true"></i>' +
|
||||
buttonsHtml += '<button onclick="removeRowMain(' + jsonData + ')" class="btn btn-default btn-trash-sm">' +
|
||||
'<i class="fa-regular fa-trash-can" style="color: #ff0000;" aria-hidden="true"></i>' +
|
||||
'</button > ';
|
||||
return buttonsHtml;
|
||||
}
|
||||
@ -237,6 +237,7 @@ function postPutCustomPO() {
|
||||
return false;
|
||||
}
|
||||
let Discount = $('#discount').val();
|
||||
|
||||
showConfirmation({
|
||||
title: 'Create Purchase Order',
|
||||
message: 'Are you sure you want to create this PO? This action cannot be undone.',
|
||||
@ -249,7 +250,7 @@ function postPutCustomPO() {
|
||||
url: endpoint.PostPutCustomPO,
|
||||
type: 'POST',
|
||||
data: {
|
||||
DocRequiredList, OtherChargesList, PRItemList,
|
||||
DocRequiredList, OtherChargesList, PRItemList, CountryOrigin,
|
||||
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
|
||||
ShippingInstructionId, PodId, PaymentTermsId,
|
||||
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo
|
||||
@ -290,7 +291,8 @@ function updateExistingPO() {
|
||||
}
|
||||
let Discount = $('#discount').val();
|
||||
let IsUpdate = true;
|
||||
|
||||
console.log('Discount', Discount);
|
||||
console.log('countryOrigin', CountryOrigin);
|
||||
showConfirmation({
|
||||
title: 'Update Purchase Order',
|
||||
message: 'Are you sure you want to update this PO? This action cannot be undone.',
|
||||
@ -303,7 +305,7 @@ function updateExistingPO() {
|
||||
url: endpoint.PostPutCustomPO,
|
||||
type: 'POST',
|
||||
data: {
|
||||
DocRequiredList, OtherChargesList, PRItemList,
|
||||
DocRequiredList, OtherChargesList, PRItemList, CountryOrigin,
|
||||
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
|
||||
ShippingInstructionId, PodId, PaymentTermsId,
|
||||
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo, IsUpdate
|
||||
@ -136,6 +136,7 @@ function viewPOFormImport(data, isModal) {
|
||||
|
||||
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
||||
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
||||
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
|
||||
|
||||
tableElement = $('#ImportPODataTable');
|
||||
if (isModal == 1) {
|
||||
@ -443,7 +444,7 @@ function viewManualImport(data) {
|
||||
|
||||
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
||||
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
||||
|
||||
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
|
||||
tableElement = $('#ImportPODataTable');
|
||||
if (!tableElement.length) {
|
||||
console.error("Table element not found");
|
||||
|
||||
@ -64,6 +64,7 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function populatePOModificationForm(id) {
|
||||
if (!id) {
|
||||
console.warn("No PO Type selected.");
|
||||
|
||||
@ -137,8 +137,9 @@ function rowImportPOCallback(row, data) {
|
||||
document.getElementById('shippingInstruction').innerText = data.shippingInstruction;
|
||||
document.getElementById('profInvoiceNo').innerText = data.profInvoiceNo;
|
||||
|
||||
//document.getElementById('poNo-C-2ndPage').innerText = data.poNo;
|
||||
//document.getElementById('supplier-C-2ndPage').innerText = data.supplierName;
|
||||
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
||||
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
||||
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
|
||||
|
||||
document.getElementById('preparedBy').innerText = data.purchaseBy;
|
||||
|
||||
@ -1,70 +0,0 @@
|
||||
.modern-button {
|
||||
width: 150px; /* Adjust the width as needed */
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.modern-button:hover {
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
background-color: #28a745;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn-success:hover {
|
||||
background-color: #006400;
|
||||
}
|
||||
|
||||
.btn-warning {
|
||||
background-color: #ffc107;
|
||||
color: #fff;
|
||||
}
|
||||
.custom-modal-PR-List {
|
||||
max-width: 1320px !important;
|
||||
margin: 0 auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.btn-warning:hover {
|
||||
background-color: #ff8c00;
|
||||
}
|
||||
.text-left {
|
||||
text-align: left !important;
|
||||
}
|
||||
.charges-right-align {
|
||||
text-align: right;
|
||||
}
|
||||
.table-dest-container {
|
||||
height: 150px; /* Adjust height as needed */
|
||||
overflow-y: auto; /* Enables scrolling if content overflows */
|
||||
border: 1px solid #ddd; /* Optional: adds a border for visibility */
|
||||
}
|
||||
|
||||
#DestChargesTable {
|
||||
min-height: 150px; /* Ensures the table always has a fixed space */
|
||||
}
|
||||
.responsive-input {
|
||||
width: 100%;
|
||||
max-width: 550px;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.responsive-input {
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.responsive-input {
|
||||
width: 100%;
|
||||
max-width: 200px;
|
||||
}
|
||||
}
|
||||
128
CPRNIMS.WebApps/wwwroot/css/PO/CustomPOV3.css
Normal file
128
CPRNIMS.WebApps/wwwroot/css/PO/CustomPOV3.css
Normal file
@ -0,0 +1,128 @@
|
||||
:root {
|
||||
--teal: #01696f;
|
||||
--teal-hover: #0c4e54;
|
||||
--teal-dark: #054e53;
|
||||
--teal-bg: #edf6f6;
|
||||
--teal-border: rgba(1,105,111,0.18);
|
||||
--green: #437a22;
|
||||
--green-bg: #f2f7ee;
|
||||
--surface: #fff;
|
||||
--surface-2: #f7f9f9;
|
||||
--border: rgba(0,0,0,0.10);
|
||||
--text: #1a2e30;
|
||||
--muted: #5a7476;
|
||||
--faint: #9ab4b6;
|
||||
--radius: 6px;
|
||||
--radius-lg: 10px;
|
||||
--shadow: 0 2px 8px rgba(1,105,111,0.10);
|
||||
--fs: 11.5px;
|
||||
--lh: 1.4;
|
||||
--transition: 150ms cubic-bezier(.16,1,.3,1);
|
||||
}
|
||||
|
||||
.modern-button {
|
||||
width: 150px; /* Adjust the width as needed */
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.modern-button:hover {
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
background-color: #28a745;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn-success:hover {
|
||||
background-color: #006400;
|
||||
}
|
||||
|
||||
.btn-warning {
|
||||
background-color: #ffc107;
|
||||
color: #fff;
|
||||
}
|
||||
.custom-modal-PR-List {
|
||||
max-width: 1320px !important;
|
||||
margin: 0 auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.btn-warning:hover {
|
||||
background-color: #ff8c00;
|
||||
}
|
||||
.text-left {
|
||||
text-align: left !important;
|
||||
}
|
||||
.charges-right-align {
|
||||
text-align: right;
|
||||
}
|
||||
.table-dest-container {
|
||||
height: 150px; /* Adjust height as needed */
|
||||
overflow-y: auto; /* Enables scrolling if content overflows */
|
||||
border: 1px solid #ddd; /* Optional: adds a border for visibility */
|
||||
}
|
||||
|
||||
#DocRequiredTable tbody td {
|
||||
padding-top: 1px !important;
|
||||
padding-bottom: 1px !important;
|
||||
padding-left: 6px;
|
||||
padding-right: 6px;
|
||||
line-height: 1 !important;
|
||||
font-size: 12px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
/* Body rows only */
|
||||
#SourceChargesTable tbody td {
|
||||
padding-top: 1px !important;
|
||||
padding-bottom: 1px !important;
|
||||
padding-left: 6px;
|
||||
padding-right: 6px;
|
||||
line-height: 1 !important;
|
||||
font-size: 12px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.btn-choose {
|
||||
background: var(--teal);
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: var(--radius);
|
||||
padding: 8px 14px;
|
||||
font-size: var(--fs);
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: background var(--transition);
|
||||
}
|
||||
|
||||
.btn-choose:hover {
|
||||
background: var(--teal-hover);
|
||||
}
|
||||
/* Keep header normal */
|
||||
#SourceChargesTable thead th {
|
||||
padding: 4px 6px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.responsive-input {
|
||||
width: 100%;
|
||||
max-width: 550px;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.responsive-input {
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.responsive-input {
|
||||
width: 100%;
|
||||
max-width: 200px;
|
||||
}
|
||||
}
|
||||
23
CPRNIMS.WebApps/wwwroot/css/UserManagement/User.css
Normal file
23
CPRNIMS.WebApps/wwwroot/css/UserManagement/User.css
Normal file
@ -0,0 +1,23 @@
|
||||
@keyframes slideUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(20px) scale(.97);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes toastIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(12px);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
@ -63,8 +63,9 @@ table.dataTable tbody tr {
|
||||
|
||||
table.dataTable tbody td {
|
||||
border-bottom: 1px solid rgba(0, 150, 136, 0.08) !important;
|
||||
padding: 12px !important;
|
||||
font-size: 13.5px;
|
||||
padding: 6px !important;
|
||||
line-height: 1 !important;
|
||||
font-size: 12px;
|
||||
color: #2d2d2d;
|
||||
vertical-align: middle;
|
||||
}
|
||||
@ -84,7 +85,6 @@ table.dataTable thead th {
|
||||
border-right: 1px solid rgba(255,255,255,0.12) !important;
|
||||
}
|
||||
|
||||
/* Sort icons */
|
||||
table.dataTable thead th.sorting::before,
|
||||
table.dataTable thead th.sorting::after,
|
||||
table.dataTable thead th.sorting_asc::before,
|
||||
@ -93,7 +93,6 @@ table.dataTable thead th {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* Remove default border between header cells */
|
||||
table.dataTable thead th:not(:last-child) {
|
||||
border-right: 1px solid rgba(255,255,255,0.15) !important;
|
||||
}
|
||||
@ -111,9 +110,9 @@ table.dataTable thead th {
|
||||
.form-floating .bi-question-circle {
|
||||
font-size: 1.2rem;
|
||||
color: #6c757d;
|
||||
z-index: 9999 !important; /* higher than modal */
|
||||
font-size: 0.9rem; /* make it cleaner */
|
||||
opacity: 1 !important; /* ensure visible */
|
||||
z-index: 9999 !important;
|
||||
font-size: 0.9rem;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
.form-floating .bi-question-circle:hover {
|
||||
Loading…
Reference in New Issue
Block a user