Enhanced Shipping instructions and Custom PO for import
This commit is contained in:
parent
5c6fc08bf3
commit
f2aee9645d
@ -26,44 +26,36 @@ namespace CPRNIMS.Domain.Services.Account
|
|||||||
}
|
}
|
||||||
public async Task<List<object>> GetAllUsersProfile()
|
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
|
||||||
var usersWithRolesAndAttachments = await (from user in _userManager.Users
|
from ur in userRoles.DefaultIfEmpty()
|
||||||
join userRole in _dbContext.IdentityUserRoles on user.Id equals userRole.UserId into userRoles
|
join role in _dbContext.Roles on ur.RoleId equals role.Id into roles
|
||||||
from ur in userRoles.DefaultIfEmpty()
|
from r in roles.DefaultIfEmpty()
|
||||||
join role in _dbContext.Roles on ur.RoleId equals role.Id into roles
|
join attachment in _dbContext.Attachments on user.Id equals attachment.AttachmentId into attachments
|
||||||
from r in roles.DefaultIfEmpty()
|
from a in attachments.DefaultIfEmpty()
|
||||||
join attachment in _dbContext.Attachments on user.Id equals attachment.AttachmentId into attachments
|
select new
|
||||||
from a in attachments.DefaultIfEmpty()
|
{
|
||||||
select new
|
user.Id,
|
||||||
{
|
Role = r != null ? r.Name ?? "N/A" : "N/A",
|
||||||
user.Id,
|
URL = a != null ? a.URL ?? "404userImage" : "404userImage",
|
||||||
Role = r != null ? r.Name ?? "N/A" : "N/A",
|
FileName = a != null ? a.FileName ?? "404userImage.jpg" : "404userImage.jpg",
|
||||||
URL = a != null ? a.URL ?? "N/A" : "N/A",
|
user.Company,
|
||||||
FileName = a != null ? a.FileName ?? "N/A" : "N/A",
|
user.DepartmentId,
|
||||||
user.Company,
|
user.UserName,
|
||||||
user.DepartmentId,
|
user.FullName,
|
||||||
user.UserName,
|
user.Email,
|
||||||
user.FullName,
|
user.EmailConfirmed,
|
||||||
user.Email,
|
Address = user.Address ?? "N/A",
|
||||||
user.EmailConfirmed,
|
PhoneNumber = user.PhoneNumber ?? "N/A",
|
||||||
Address = user.Address ?? "N/A",
|
user.LockoutEnd,
|
||||||
PhoneNumber = user.PhoneNumber ?? "N/A",
|
user.LockoutEnabled,
|
||||||
user.LockoutEnd,
|
user.CreatedBy,
|
||||||
user.LockoutEnabled,
|
user.UpdatedBy,
|
||||||
user.CreatedBy,
|
user.CreatedDate,
|
||||||
user.UpdatedBy,
|
user.UpdatedDate
|
||||||
user.CreatedDate,
|
}).ToListAsync();
|
||||||
user.UpdatedDate
|
|
||||||
}).ToListAsync();
|
|
||||||
|
|
||||||
return usersWithRolesAndAttachments.Cast<object>().ToList();
|
return usersWithRolesAndAttachments.Cast<object>().ToList();
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
ex.ToString();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public async Task AssignUserRole(RegisterModel registerModel)
|
public async Task AssignUserRole(RegisterModel registerModel)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
using CPRNIMS.Domain.Contracts.Items;
|
using CPRNIMS.Domain.Contracts.Items;
|
||||||
using CPRNIMS.Infrastructure.Database;
|
using CPRNIMS.Infrastructure.Database;
|
||||||
using CPRNIMS.Infrastructure.Dto.Canvass;
|
|
||||||
using CPRNIMS.Infrastructure.Dto.Items;
|
using CPRNIMS.Infrastructure.Dto.Items;
|
||||||
using CPRNIMS.Infrastructure.Entities.Account;
|
using CPRNIMS.Infrastructure.Entities.Account;
|
||||||
using CPRNIMS.Infrastructure.Entities.Items;
|
using CPRNIMS.Infrastructure.Entities.Items;
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
using CPRNIMS.Infrastructure.Database;
|
using CPRNIMS.Infrastructure.Database;
|
||||||
using CPRNIMS.Infrastructure.Dto.Canvass.Response;
|
using CPRNIMS.Infrastructure.Dto.Canvass.Response;
|
||||||
using CPRNIMS.Infrastructure.Dto.PO;
|
using CPRNIMS.Infrastructure.Dto.PO;
|
||||||
using CPRNIMS.Infrastructure.Dto.PR;
|
|
||||||
using CPRNIMS.Infrastructure.Entities.Canvass;
|
using CPRNIMS.Infrastructure.Entities.Canvass;
|
||||||
using CPRNIMS.Infrastructure.Entities.Common;
|
using CPRNIMS.Infrastructure.Entities.Common;
|
||||||
using CPRNIMS.Infrastructure.Entities.LocalDb.NonInvent;
|
using CPRNIMS.Infrastructure.Entities.LocalDb.NonInvent;
|
||||||
@ -494,7 +493,7 @@ namespace CPRNIMS.Domain.Services.PO
|
|||||||
await _dbContext.Database
|
await _dbContext.Database
|
||||||
.ExecuteSqlRawAsync("EXEC PostPutCustomPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
|
.ExecuteSqlRawAsync("EXEC PostPutCustomPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
|
||||||
$"@PODId,@ProfInvoiceNo,@ProfInvoiceDate,@PaymentTermsId,@ShippingInstructionId,@SupplierId,@DeliveryDate,@Discount,@Amount," +
|
$"@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("@UserId", pODto.UserId),
|
||||||
new SqlParameter("@POTypeId", pODto.POTypeId),
|
new SqlParameter("@POTypeId", pODto.POTypeId),
|
||||||
new SqlParameter("@PONumber", formattedPONumber),
|
new SqlParameter("@PONumber", formattedPONumber),
|
||||||
@ -516,6 +515,7 @@ namespace CPRNIMS.Domain.Services.PO
|
|||||||
new SqlParameter("@UnitPrice", pODto.UnitPrice),
|
new SqlParameter("@UnitPrice", pODto.UnitPrice),
|
||||||
new SqlParameter("@Quantity", pODto.Quantity),
|
new SqlParameter("@Quantity", pODto.Quantity),
|
||||||
new SqlParameter("@DeliverTo", pODto.DeliverTo),
|
new SqlParameter("@DeliverTo", pODto.DeliverTo),
|
||||||
|
new SqlParameter("@CountryOrigin", pODto.CountryOrigin ?? "N/A"),
|
||||||
messCode,
|
messCode,
|
||||||
message);
|
message);
|
||||||
|
|
||||||
@ -544,7 +544,7 @@ namespace CPRNIMS.Domain.Services.PO
|
|||||||
await _dbContext.Database
|
await _dbContext.Database
|
||||||
.ExecuteSqlRawAsync("EXEC PutExistingPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
|
.ExecuteSqlRawAsync("EXEC PutExistingPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
|
||||||
$"@PODId,@ProfInvoiceNo,@ProfInvoiceDate,@PaymentTermsId,@ShippingInstructionId,@SupplierId,@DeliveryDate,@Discount,@Amount," +
|
$"@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("@UserId", pODto.UserId),
|
||||||
new SqlParameter("@POTypeId", pODto.POTypeId),
|
new SqlParameter("@POTypeId", pODto.POTypeId),
|
||||||
new SqlParameter("@PONumber", pODto.PONo),
|
new SqlParameter("@PONumber", pODto.PONo),
|
||||||
@ -567,6 +567,7 @@ namespace CPRNIMS.Domain.Services.PO
|
|||||||
new SqlParameter("@Quantity", pODto.Quantity),
|
new SqlParameter("@Quantity", pODto.Quantity),
|
||||||
new SqlParameter("@DeliverTo", pODto.DeliverTo),
|
new SqlParameter("@DeliverTo", pODto.DeliverTo),
|
||||||
new SqlParameter("@IsRemoved", isRemoved),
|
new SqlParameter("@IsRemoved", isRemoved),
|
||||||
|
new SqlParameter("@CountryOrigin", pODto.CountryOrigin ?? "N/A"),
|
||||||
messCode,
|
messCode,
|
||||||
message);
|
message);
|
||||||
|
|
||||||
@ -633,7 +634,8 @@ namespace CPRNIMS.Domain.Services.PO
|
|||||||
DeliveryDate = PODto.DeliveryDate,
|
DeliveryDate = PODto.DeliveryDate,
|
||||||
DeliverTo = PODto.DeliverTo ?? "N/A",
|
DeliverTo = PODto.DeliverTo ?? "N/A",
|
||||||
Specification = specification,
|
Specification = specification,
|
||||||
IsUpdate = PODto.IsUpdate
|
IsUpdate = PODto.IsUpdate,
|
||||||
|
CountryOrigin=PODto.CountryOrigin
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
public async Task<DocRequired> PostSuppDocRequirements(PODto poDto)
|
public async Task<DocRequired> PostSuppDocRequirements(PODto poDto)
|
||||||
|
|||||||
@ -115,5 +115,6 @@ namespace CPRNIMS.Infrastructure.Dto.PO
|
|||||||
public DateTime From { get; set; }
|
public DateTime From { get; set; }
|
||||||
public string? OtherChargesName { get; set; }
|
public string? OtherChargesName { get; set; }
|
||||||
public string? IncotermsName { 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? UserId { get; set; }
|
||||||
public string? ItemName { get; set; }
|
public string? ItemName { get; set; }
|
||||||
public string? ItemCategoryName { get; set; }
|
public string? ItemCategoryName { get; set; }
|
||||||
public byte PRTypeId { get; set; }
|
public string? ItemDescription { get; set; }
|
||||||
public decimal Qty { get; set; }
|
public decimal Qty { get; set; }
|
||||||
public int CartItemCount { get; set; }
|
public int CartItemCount { get; set; }
|
||||||
public int UOMId { 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 long ItemAttachId { get; set; }
|
||||||
public string? CreatedBy { get; set; }
|
public string? CreatedBy { get; set; }
|
||||||
public DateTime CreatedDate { get; set; }
|
public DateTime CreatedDate { get; set; }
|
||||||
|
|||||||
@ -21,7 +21,6 @@ namespace CPRNIMS.Infrastructure.Entities.PO
|
|||||||
public string? ItemName { get; set; }
|
public string? ItemName { get; set; }
|
||||||
public string? ItemDescription { get; set; }
|
public string? ItemDescription { get; set; }
|
||||||
public string? UOMName { get; set; }
|
public string? UOMName { get; set; }
|
||||||
public bool IsActive { get; set; }
|
|
||||||
public long ItemNo { get; set; }
|
public long ItemNo { get; set; }
|
||||||
public decimal Qty { get; set; }
|
public decimal Qty { get; set; }
|
||||||
public string? Remarks { get; set; }
|
public string? Remarks { get; set; }
|
||||||
@ -44,12 +43,13 @@ namespace CPRNIMS.Infrastructure.Entities.PO
|
|||||||
public DateTime ProfInvoiceDate { get; set; }
|
public DateTime ProfInvoiceDate { get; set; }
|
||||||
public string? PortOfDischarge { get; set; }
|
public string? PortOfDischarge { get; set; }
|
||||||
public string? PaymentTerms { get; set; }
|
public string? PaymentTerms { get; set; }
|
||||||
public string? ShippingInstruction { get; set; }
|
public byte ShippingInstructionId { get; set; }
|
||||||
public string? DeliverTo { get; set; }
|
public string? DeliverTo { get; set; }
|
||||||
public string? IncoTerms { get; set; }
|
public string? IncoTerms { get; set; }
|
||||||
public string? ProfInvoiceNo { get; set; }
|
public string? ProfInvoiceNo { get; set; }
|
||||||
public string? DocRequirements { get; set; }
|
public string? DocRequirements { get; set; }
|
||||||
public string? AmountInWords { get; set; }
|
public string? AmountInWords { get; set; }
|
||||||
public decimal Amount { 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 string? UserId { get; set; }
|
||||||
public byte Status { get; set; }
|
public byte Status { get; set; }
|
||||||
public byte PaymentTermsId { get; set; }
|
public byte PaymentTermsId { get; set; }
|
||||||
|
public byte ShippingInstructionId { get; set; }
|
||||||
public byte PODId { get; set; }
|
public byte PODId { get; set; }
|
||||||
public byte POTypeId { get; set; }
|
public byte POTypeId { get; set; }
|
||||||
public byte IncoTermsId { get; set; }
|
public byte IncoTermsId { get; set; }
|
||||||
public string? IncotermsName { 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? Password { get; set; }
|
||||||
public string? Server { get; set; }
|
public string? Server { get; set; }
|
||||||
public string? AggreQty { get; set; }
|
public string? AggreQty { get; set; }
|
||||||
|
public string? CountryOrigin { get; set; }
|
||||||
public DocRequirementList? DocRequiredList { get; set; }
|
public DocRequirementList? DocRequiredList { get; set; }
|
||||||
public POChargesList? OtherChargesList { get; set; }
|
public POChargesList? OtherChargesList { get; set; }
|
||||||
public PRItemList? PRItemList { get; set; }
|
public PRItemList? PRItemList { get; set; }
|
||||||
|
|||||||
@ -4,7 +4,6 @@ using CPRNIMS.Domain.Services.Account;
|
|||||||
using CPRNIMS.Infrastructure.Dto.Account;
|
using CPRNIMS.Infrastructure.Dto.Account;
|
||||||
using CPRNIMS.Infrastructure.Entities.Account;
|
using CPRNIMS.Infrastructure.Entities.Account;
|
||||||
using CPRNIMS.Infrastructure.Entities.Common;
|
using CPRNIMS.Infrastructure.Entities.Common;
|
||||||
using CPRNIMS.Infrastructure.Helper;
|
|
||||||
using CPRNIMS.Infrastructure.Models;
|
using CPRNIMS.Infrastructure.Models;
|
||||||
using CPRNIMS.Infrastructure.Models.Account;
|
using CPRNIMS.Infrastructure.Models.Account;
|
||||||
using CPRNIMS.Infrastructure.Models.Common;
|
using CPRNIMS.Infrastructure.Models.Common;
|
||||||
@ -19,7 +18,7 @@ using System.Security.Claims;
|
|||||||
|
|
||||||
namespace CPRNIMS.WebApi.Controllers.Account
|
namespace CPRNIMS.WebApi.Controllers.Account
|
||||||
{
|
{
|
||||||
[Security.AuthorizeRoles("Account")]
|
[AuthorizeRoles("Account")]
|
||||||
public class AccountController : Base.BaseController
|
public class AccountController : Base.BaseController
|
||||||
{
|
{
|
||||||
private readonly ErrorMessageService _errorMessageService;
|
private readonly ErrorMessageService _errorMessageService;
|
||||||
@ -150,189 +149,147 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
|||||||
[HttpGet("GetUserById/{userId}")]
|
[HttpGet("GetUserById/{userId}")]
|
||||||
public async Task<IActionResult> GetUserProfileById(string userId)
|
public async Task<IActionResult> GetUserProfileById(string userId)
|
||||||
{
|
{
|
||||||
try
|
var userWithUrl = await _userManager.Users
|
||||||
|
.Include(u => u.Attachment)
|
||||||
|
.Where(u => u.Id == userId)
|
||||||
|
.Select(u => new
|
||||||
|
{
|
||||||
|
u.Id,
|
||||||
|
u.UserName,
|
||||||
|
u.FullName,
|
||||||
|
u.Email,
|
||||||
|
u.Department,
|
||||||
|
u.Company,
|
||||||
|
u.LockoutEnabled,
|
||||||
|
u.CreatedBy,
|
||||||
|
u.PhoneNumber,
|
||||||
|
u.Address,
|
||||||
|
u.UpdatedBy,
|
||||||
|
u.CreatedDate,
|
||||||
|
u.UpdatedDate,
|
||||||
|
URL = u.Attachment != null ? u.Attachment.URL : string.Empty
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (userWithUrl == null)
|
||||||
{
|
{
|
||||||
var userWithUrl = await _userManager.Users
|
return NotFound();
|
||||||
.Include(u => u.Attachment)
|
|
||||||
.Where(u => u.Id == userId)
|
|
||||||
.Select(u => new
|
|
||||||
{
|
|
||||||
u.Id,
|
|
||||||
u.UserName,
|
|
||||||
u.FullName,
|
|
||||||
u.Email,
|
|
||||||
// u.Role,
|
|
||||||
u.Department,
|
|
||||||
u.Company,
|
|
||||||
u.LockoutEnabled,
|
|
||||||
u.CreatedBy,
|
|
||||||
u.PhoneNumber,
|
|
||||||
u.Address,
|
|
||||||
u.UpdatedBy,
|
|
||||||
u.CreatedDate,
|
|
||||||
u.UpdatedDate,
|
|
||||||
URL = u.Attachment != null ? u.Attachment.URL : string.Empty
|
|
||||||
})
|
|
||||||
.ToListAsync();
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Ok(userWithUrl);
|
||||||
}
|
}
|
||||||
[HttpGet("GetAllUser")]
|
[HttpGet("GetAllUser")]
|
||||||
public async Task<IActionResult> GetAllUsers()
|
public async Task<IActionResult> GetAllUsers()
|
||||||
{
|
{
|
||||||
try
|
var usersWithUrl = await _userClaimsManager.GetAllUsersProfile();
|
||||||
|
|
||||||
|
if (usersWithUrl == null)
|
||||||
{
|
{
|
||||||
var usersWithUrl = await _userClaimsManager.GetAllUsersProfile();
|
return NotFound();
|
||||||
|
|
||||||
if (usersWithUrl == null)
|
|
||||||
{
|
|
||||||
return NotFound();
|
|
||||||
}
|
|
||||||
|
|
||||||
return Ok(usersWithUrl);
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
|
||||||
await PostErrorMessage(message, "WebApi");
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Ok(usersWithUrl);
|
||||||
}
|
}
|
||||||
[HttpPost("GetUserRolesClaims")]
|
[HttpPost("GetUserRolesClaims")]
|
||||||
public async Task<IActionResult> GetUserRolesClaims([FromBody] LoginModel model)
|
public async Task<IActionResult> GetUserRolesClaims([FromBody] LoginModel model)
|
||||||
{
|
{
|
||||||
try
|
var user = await _userManager.Users
|
||||||
|
.Include(u => u.Department)
|
||||||
|
.SingleOrDefaultAsync(u => u.UserName == model.Username.ToLower());
|
||||||
|
|
||||||
|
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
|
||||||
{
|
{
|
||||||
var user = await _userManager.Users
|
var userRoles = await _userManager.GetRolesAsync(user);
|
||||||
.Include(u => u.Department) // Include the Department
|
|
||||||
.SingleOrDefaultAsync(u => u.UserName == model.Username.ToLower());
|
|
||||||
|
|
||||||
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
|
var roleDetails = await _roleManager.Roles
|
||||||
{
|
.Where(r => userRoles.Contains(r.Name))
|
||||||
var userRoles = await _userManager.GetRolesAsync(user);
|
.Select(r => new { r.Id, r.Name })
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
// Fetch the full role details from the Roles table
|
var myClaims = await _userManager.GetClaimsAsync(user);
|
||||||
var roleDetails = await _roleManager.Roles
|
var authClaims = new List<Claim>
|
||||||
.Where(r => userRoles.Contains(r.Name))
|
|
||||||
.Select(r => new { r.Id, r.Name })
|
|
||||||
.ToListAsync();
|
|
||||||
|
|
||||||
var myClaims = await _userManager.GetClaimsAsync(user);
|
|
||||||
var authClaims = new List<Claim>
|
|
||||||
{
|
{
|
||||||
new Claim(ClaimTypes.Name, user.UserName),
|
new Claim(ClaimTypes.Name, user.UserName),
|
||||||
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
|
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
|
||||||
};
|
};
|
||||||
|
|
||||||
var response = new UserClaimsResponse
|
var response = new UserClaimsResponse
|
||||||
|
{
|
||||||
|
UserId = user.Id,
|
||||||
|
UserRoles = roleDetails.Select(r => new UserRoleData
|
||||||
{
|
{
|
||||||
UserId = user.Id,
|
RoleId = r.Id,
|
||||||
UserRoles = roleDetails.Select(r => new UserRoleData
|
RoleName = r.Name
|
||||||
{
|
}).ToList(),
|
||||||
RoleId = r.Id,
|
OtherClaims = myClaims.Select(claim => new UserClaimData
|
||||||
RoleName = r.Name
|
{
|
||||||
}).ToList(),
|
issuer = claim.Issuer,
|
||||||
OtherClaims = myClaims.Select(claim => new UserClaimData
|
originalIssuer = claim.OriginalIssuer,
|
||||||
{
|
properties = claim.Properties.ToDictionary(p => p.Key, p => p.Value),
|
||||||
issuer = claim.Issuer,
|
subject = claim.Subject?.Name,
|
||||||
originalIssuer = claim.OriginalIssuer,
|
type = claim.Type,
|
||||||
properties = claim.Properties.ToDictionary(p => p.Key, p => p.Value),
|
value = claim.Value,
|
||||||
subject = claim.Subject?.Name,
|
valueType = claim.ValueType,
|
||||||
type = claim.Type,
|
company = user.Company,
|
||||||
value = claim.Value,
|
FullName = user.FullName,
|
||||||
valueType = claim.ValueType,
|
Department = user.Department?.Department,
|
||||||
company = user.Company,
|
}).ToList()
|
||||||
FullName=user.FullName,
|
};
|
||||||
Department = user.Department?.Department,
|
|
||||||
}).ToList()
|
|
||||||
};
|
|
||||||
|
|
||||||
return Ok(response);
|
return Ok(response);
|
||||||
}
|
|
||||||
return Unauthorized();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
|
||||||
await PostErrorMessage(message + "GetUserRolesClaims", "WebApi");
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
|
return Unauthorized();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("GetTClaim")]
|
[HttpPost("GetTClaim")]
|
||||||
public async Task<IActionResult> GetTClaim([FromBody] LoginModel model)
|
public async Task<IActionResult> GetTClaim([FromBody] LoginModel model)
|
||||||
{
|
{
|
||||||
try
|
var user = await _userManager.FindByNameAsync(model.Username.ToLower());
|
||||||
|
|
||||||
|
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
|
||||||
{
|
{
|
||||||
var user = await _userManager.FindByNameAsync(model.Username.ToLower());
|
var userRoles = await _userManager.GetRolesAsync(user);
|
||||||
|
|
||||||
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
|
try
|
||||||
{
|
{
|
||||||
var userRoles = await _userManager.GetRolesAsync(user);
|
var authClaims = new List<Claim>
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var authClaims = new List<Claim>
|
|
||||||
{
|
{
|
||||||
new Claim(ClaimTypes.Name, user.UserName),
|
new Claim(ClaimTypes.Name, user.UserName),
|
||||||
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
|
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var userRole in userRoles)
|
foreach (var userRole in userRoles)
|
||||||
{
|
|
||||||
authClaims.Add(new Claim(ClaimTypes.Role, userRole));
|
|
||||||
}
|
|
||||||
|
|
||||||
var token = GetToken(authClaims);
|
|
||||||
|
|
||||||
var roles = token.Claims
|
|
||||||
.Where(c => c.Type == ClaimTypes.Role)
|
|
||||||
.Select(c => c.Value)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
return Ok(new
|
|
||||||
{
|
|
||||||
roles
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
authClaims.Add(new Claim(ClaimTypes.Role, userRole));
|
||||||
var error = new ErrorMessage
|
|
||||||
{
|
|
||||||
Application = "WebApi",
|
|
||||||
Message = message,
|
|
||||||
CreatedDate = DateTime.Now,
|
|
||||||
CreatedBy = "Approval",
|
|
||||||
};
|
|
||||||
await _errorMessageService.PostErrorMessage(error);
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return Unauthorized();
|
|
||||||
|
|
||||||
|
var token = GetToken(authClaims);
|
||||||
|
|
||||||
|
var roles = token.Claims
|
||||||
|
.Where(c => c.Type == ClaimTypes.Role)
|
||||||
|
.Select(c => c.Value)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
return Ok(new
|
||||||
|
{
|
||||||
|
roles
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
||||||
|
var error = new ErrorMessage
|
||||||
|
{
|
||||||
|
Application = "WebApi",
|
||||||
|
Message = message,
|
||||||
|
CreatedDate = DateTime.Now,
|
||||||
|
CreatedBy = "Approval",
|
||||||
|
};
|
||||||
|
await _errorMessageService.PostErrorMessage(error);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
return Unauthorized();
|
||||||
{
|
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
|
||||||
await PostErrorMessage(message, "WebApi");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("register")]
|
[HttpPost("register")]
|
||||||
@ -405,123 +362,73 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
|||||||
[HttpPost("GetDepartment")]
|
[HttpPost("GetDepartment")]
|
||||||
public async Task<IActionResult> GetDepartment()
|
public async Task<IActionResult> GetDepartment()
|
||||||
{
|
{
|
||||||
try
|
var user = await _department.GetDepartment();
|
||||||
{
|
|
||||||
var user = await _department.GetDepartment();
|
|
||||||
|
|
||||||
if (user != null)
|
if (user != null)
|
||||||
{
|
return Ok(user);
|
||||||
return Ok(user);
|
else
|
||||||
}
|
return NotFound();
|
||||||
else
|
|
||||||
{
|
|
||||||
return NotFound();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
|
||||||
await PostErrorMessage(message, "WebApi");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
[HttpPost("GetUserRights")]
|
[HttpPost("GetUserRights")]
|
||||||
public async Task<IActionResult> GetUserRights(AccountDto accountDto)
|
public async Task<IActionResult> GetUserRights(AccountDto accountDto)
|
||||||
{
|
{
|
||||||
try
|
var user = await _account.GetUserRights(accountDto);
|
||||||
{
|
|
||||||
var user = await _account.GetUserRights(accountDto);
|
|
||||||
|
|
||||||
if (user != null)
|
if (user != null)
|
||||||
{
|
return Ok(user);
|
||||||
return Ok(user);
|
else
|
||||||
}
|
return NotFound();
|
||||||
else
|
|
||||||
{
|
|
||||||
return NotFound();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
|
||||||
await PostErrorMessage(message, "WebApi");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
[HttpPost("PutPostUserAccess")]
|
[HttpPost("PutPostUserAccess")]
|
||||||
public async Task<IActionResult> PutPostUserAccess([FromBody] UserRightsVM viewModel)
|
public async Task<IActionResult> PutPostUserAccess([FromBody] UserRightsVM viewModel)
|
||||||
{
|
{
|
||||||
try
|
var itemDto = new AccountDto();
|
||||||
|
if (viewModel.UserRightsList != null)
|
||||||
{
|
{
|
||||||
var itemDto = new AccountDto();
|
foreach (var itemList in viewModel.UserRightsList.ContAccId)
|
||||||
if (viewModel.UserRightsList != null)
|
|
||||||
{
|
{
|
||||||
foreach (var itemList in viewModel.UserRightsList.ContAccId)
|
var index = viewModel.UserRightsList.ContAccId.IndexOf(itemList);
|
||||||
|
itemDto = new AccountDto
|
||||||
{
|
{
|
||||||
var index = viewModel.UserRightsList.ContAccId.IndexOf(itemList);
|
ContAccId = viewModel.UserRightsList.ContAccId[index],
|
||||||
itemDto = new AccountDto
|
UserAccessId = viewModel.UserRightsList.UserAccessId[index],
|
||||||
{
|
AccessTypeId = viewModel.UserRightsList.AccessTypeId[index],
|
||||||
ContAccId = viewModel.UserRightsList.ContAccId[index],
|
IsActive = viewModel.UserRightsList.IsActive[index],
|
||||||
UserAccessId = viewModel.UserRightsList.UserAccessId[index],
|
AdminUserId = viewModel.AdminUserId,
|
||||||
AccessTypeId = viewModel.UserRightsList.AccessTypeId[index],
|
UserId = viewModel.UserId
|
||||||
IsActive = viewModel.UserRightsList.IsActive[index],
|
};
|
||||||
AdminUserId = viewModel.AdminUserId,
|
await _account.PutPostUserAccess(itemDto);
|
||||||
UserId = viewModel.UserId
|
|
||||||
};
|
|
||||||
await _account.PutPostUserAccess(itemDto);
|
|
||||||
}
|
|
||||||
return Ok(itemDto);
|
|
||||||
}
|
}
|
||||||
return BadRequest(new { success = false, messCode = 0, message = "Your email has not yet been configured. Please go to the SMTP page." });
|
return Ok(itemDto);
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
|
||||||
await PostErrorMessage(message + "PutPostUserAccess", "WebApi");
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
|
return BadRequest(new { success = false, messCode = 0, message = "Your email has not yet been configured. Please go to the SMTP page." });
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("CreateUpdateRole")]
|
[HttpPost("CreateUpdateRole")]
|
||||||
public async Task<IActionResult> CreateUpdateRole([FromBody] UserRoleModel model)
|
public async Task<IActionResult> CreateUpdateRole([FromBody] UserRoleModel model)
|
||||||
{
|
{
|
||||||
try
|
var existingRole = await _roleManager.FindByIdAsync(model.Id);
|
||||||
|
if (existingRole != null)
|
||||||
{
|
{
|
||||||
/* IdentityRole userRole = new()
|
existingRole.Name = model.Name; // Update the role name
|
||||||
{
|
var result = await _roleManager.UpdateAsync(existingRole);
|
||||||
Id=model.Id,
|
if (!result.Succeeded)
|
||||||
Name = model.Name,
|
|
||||||
};*/
|
|
||||||
// Check if a role with the given ID exists
|
|
||||||
var existingRole = await _roleManager.FindByIdAsync(model.Id);
|
|
||||||
if (existingRole != null)
|
|
||||||
{
|
{
|
||||||
existingRole.Name = model.Name; // Update the role name
|
string errorMessage = result.Errors.FirstOrDefault()?.Description;
|
||||||
var result = await _roleManager.UpdateAsync(existingRole);
|
return StatusCode(StatusCodes.Status500InternalServerError, new ResponseObject { statusResponse = "Error", message = errorMessage });
|
||||||
if (!result.Succeeded)
|
|
||||||
{
|
|
||||||
string errorMessage = result.Errors.FirstOrDefault()?.Description;
|
|
||||||
return StatusCode(StatusCodes.Status500InternalServerError, new ResponseObject { statusResponse = "Error", message = errorMessage });
|
|
||||||
}
|
|
||||||
return Ok(new ResponseObject { statusResponse = "Success", message = "Role updated successfully!" });
|
|
||||||
}
|
}
|
||||||
else
|
return Ok(new ResponseObject { statusResponse = "Success", message = "Role updated successfully!" });
|
||||||
{
|
|
||||||
var result = await _roleManager.CreateAsync(new IdentityRole(model.Name));
|
|
||||||
if (!result.Succeeded)
|
|
||||||
{
|
|
||||||
string errorMessage = result.Errors.FirstOrDefault()?.Description;
|
|
||||||
return StatusCode(StatusCodes.Status500InternalServerError, new ResponseObject { statusResponse = "Error", message = errorMessage });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Ok(new ResponseObject { statusResponse = "Success", message = "Role created successfully!" });
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
else
|
||||||
{
|
{
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
var result = await _roleManager.CreateAsync(new IdentityRole(model.Name));
|
||||||
await PostErrorMessage(message, "WebApi");
|
if (!result.Succeeded)
|
||||||
throw;
|
{
|
||||||
|
string errorMessage = result.Errors.FirstOrDefault()?.Description;
|
||||||
|
return StatusCode(StatusCodes.Status500InternalServerError, new ResponseObject { statusResponse = "Error", message = errorMessage });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return Ok(new ResponseObject { statusResponse = "Success", message = "Role created successfully!" });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@ namespace CPRNIMS.WebApi.Controllers.Account
|
|||||||
return Ok(new
|
return Ok(new
|
||||||
{
|
{
|
||||||
token,
|
token,
|
||||||
expiresAt= DateTime.UtcNow.AddMinutes(30),
|
expiresAt= DateTime.UtcNow.AddHours(2),
|
||||||
userId = user.Id,
|
userId = user.Id,
|
||||||
userName = user.UserName,
|
userName = user.UserName,
|
||||||
fullName = user.FullName,
|
fullName = user.FullName,
|
||||||
|
|||||||
@ -11,11 +11,14 @@ namespace CPRNIMS.WebApps.Controllers.Account
|
|||||||
{
|
{
|
||||||
private readonly IAccount _account;
|
private readonly IAccount _account;
|
||||||
List<UserRightsVM>? response;
|
List<UserRightsVM>? response;
|
||||||
|
private readonly IConfiguration _configuration;
|
||||||
public AccountController(IWebHostEnvironment webHostEnvironment,
|
public AccountController(IWebHostEnvironment webHostEnvironment,
|
||||||
IAccount account,ErrorLogHelper errorMessageService,TokenHelper tokenHelper
|
IAccount account,ErrorLogHelper errorMessageService,TokenHelper tokenHelper,
|
||||||
|
IConfiguration configuration
|
||||||
) : base(errorMessageService, webHostEnvironment,tokenHelper, account)
|
) : base(errorMessageService, webHostEnvironment,tokenHelper, account)
|
||||||
{
|
{
|
||||||
_account = account;
|
_account = account;
|
||||||
|
_configuration = configuration;
|
||||||
}
|
}
|
||||||
#region Change Password
|
#region Change Password
|
||||||
public async Task<IActionResult> SendOTPByEmail(EmailMessageDetailsVM model)
|
public async Task<IActionResult> SendOTPByEmail(EmailMessageDetailsVM model)
|
||||||
@ -200,17 +203,9 @@ namespace CPRNIMS.WebApps.Controllers.Account
|
|||||||
}
|
}
|
||||||
public async Task<IActionResult> GetAllUsers()
|
public async Task<IActionResult> GetAllUsers()
|
||||||
{
|
{
|
||||||
try
|
var userResponse = await _account.GetAllUserAsync(GetUser());
|
||||||
{
|
userResponse[0].URL = _configuration["LLI:BaseUrl"] ?? "https://llipurchasingnoninventory.com:8080/";
|
||||||
var userResponse = await _account.GetAllUserAsync(GetUser());
|
return GetResponse(userResponse);
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public async Task<IActionResult> GetDepartment()
|
public async Task<IActionResult> GetDepartment()
|
||||||
{
|
{
|
||||||
@ -242,19 +237,11 @@ namespace CPRNIMS.WebApps.Controllers.Account
|
|||||||
return Json(new { data = "No Data" });
|
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(), viewModel);
|
||||||
{
|
return GetResponse(response);
|
||||||
response = await _account.GetUserRights(GetUser(), viewModels);
|
|
||||||
return GetResponse(response);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
|
|
||||||
|
|
||||||
return Json(new { data = "No Data" });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region Views
|
#region Views
|
||||||
|
|||||||
@ -12,7 +12,11 @@ namespace CPRNIMS.WebApps.ViewComponents.POMgmt
|
|||||||
1 => "~/Views/Components/POMgmt/ShippingInstructions/Air.cshtml",
|
1 => "~/Views/Components/POMgmt/ShippingInstructions/Air.cshtml",
|
||||||
2 => "~/Views/Components/POMgmt/ShippingInstructions/Courier.cshtml",
|
2 => "~/Views/Components/POMgmt/ShippingInstructions/Courier.cshtml",
|
||||||
3 => "~/Views/Components/POMgmt/ShippingInstructions/SeaFCL.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
|
// Render the selected view
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -7,16 +7,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
|
<div class="form-group">
|
||||||
<label for="discount">Discount</label>
|
<label class="lbl">Discount</label>
|
||||||
<div style="flex: 1; display: flex; align-items: center;">
|
<input type="number" id="discount" name="discount"
|
||||||
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
|
class="form-control" placeholder="0.00" step="0.01" min="0">
|
||||||
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
|
|
||||||
onclick="AddDiscount()"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<textarea id="discount" readonly disabled
|
|
||||||
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
|
|||||||
@ -1,218 +1,675 @@
|
|||||||
<div class="row">
|
<style>
|
||||||
<div class="col-6">
|
*, *::before, *::after {
|
||||||
<div class="row">
|
box-sizing: border-box;
|
||||||
<div class="col-6">
|
margin: 0;
|
||||||
<div class="form-group">
|
padding: 0;
|
||||||
<label for="deliveryDate">Est. Delivery Date</label>
|
}
|
||||||
<input type="date" id="deliveryDate" class="form-control">
|
|
||||||
</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>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-3">
|
body {
|
||||||
<div class="form-group">
|
font-family: 'Inter',sans-serif;
|
||||||
<label for="grossAmountUSD">Gross (USD) Amount</label>
|
font-size: var(--fs);
|
||||||
<input readonly name="grossAmountUSD" id="grossAmountUSD" class="form-control" style="margin-bottom:5px;">
|
line-height: var(--lh);
|
||||||
</div>
|
color: var(--text);
|
||||||
</div>
|
background: #e8eeee;
|
||||||
<div class="col-3">
|
}
|
||||||
<div class="form-group">
|
|
||||||
<label for="finalAmountUSD">Final (USD) Amount</label>
|
/* Header */
|
||||||
<input readonly name="finalAmountUSD" id="finalAmountUSD" class="form-control" style="margin-bottom:5px;">
|
.po-header {
|
||||||
</div>
|
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>
|
</div>
|
||||||
|
<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>
|
||||||
<div class="col-6">
|
|
||||||
<div class="row">
|
<!-- Row 2: Left terms | Right charges+amounts -->
|
||||||
<div class="col-3">
|
<div class="g-row-2">
|
||||||
<div class="form-group">
|
|
||||||
<label for="podId">Port Of Discharge</label>
|
<!-- Left column -->
|
||||||
<select class="form-control" name="podId" id="podId"
|
<div class="terms-col">
|
||||||
style="margin-bottom:5px;">
|
|
||||||
<option disabled>-Select Discharge Port-</option>
|
<!-- Payment Terms + Incoterms -->
|
||||||
<option value="1">MANILA PORT</option>
|
<div class="terms-row">
|
||||||
<option value="2">NORTH SEA PORT</option>
|
<div>
|
||||||
<option value="3">SOUTH SEA PORT</option>
|
<label class="lbl">Payment Terms</label>
|
||||||
<option value="4">MANILA PORT PHILS</option>
|
<input type="search" name="C-paymentTerms" id="C-paymentTerms" class="fc" placeholder="Search...">
|
||||||
<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;">
|
|
||||||
<input type="hidden" id="C-paymentTermsId" name="C-paymentTermsId" />
|
<input type="hidden" id="C-paymentTermsId" name="C-paymentTermsId" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div>
|
||||||
<div class="col-3">
|
<label class="lbl">Incoterms <i class="bx bxs-message-rounded-add icon-add" onclick="viewIncoterms()" title="Add"></i></label>
|
||||||
<div class="form-group">
|
<input type="search" name="incotermsName" id="incotermsName" class="fc" placeholder="Search...">
|
||||||
<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;">
|
|
||||||
<input type="hidden" id="incoTermsId" name="incoTermsId" />
|
<input type="hidden" id="incoTermsId" name="incoTermsId" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3">
|
|
||||||
<div class="form-group">
|
<!-- Port + Shipping -->
|
||||||
<label for="shippingInstructionId">Shipping Instrctn.</label>
|
<div class="terms-row">
|
||||||
<select class="form-control" name="shippingInstructionId" id="shippingInstructionId"
|
<div>
|
||||||
style="margin-bottom:5px;">
|
<label class="lbl">Port of Discharge</label>
|
||||||
<option disabled>-Select Shipping Instruction-</option>
|
<select class="fc" name="podId" id="podId">
|
||||||
<option value="1">AIR</option>
|
<option disabled selected>— Select —</option>
|
||||||
<option value="2">COURIER</option>
|
<option value="1">Manila Port</option>
|
||||||
<option value="3">SEA FCL</option>
|
<option value="2">North Sea Port</option>
|
||||||
<option value="4">SEA LCL</option>
|
<option value="3">South Sea Port</option>
|
||||||
<option value="5">N/A</option>
|
<option value="4">Manila Port PHILS</option>
|
||||||
<option value="4">OTHERS</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>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-6">
|
<!-- Docs + Remarks -->
|
||||||
<div class="row">
|
<div class="terms-row" style="flex:1;">
|
||||||
<div class="col-6">
|
<div style="display:flex;flex-direction:column;">
|
||||||
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
|
<label class="lbl">Docs Required <i class="bx bxs-message-rounded-add icon-add" onclick="viewDocRequired()" title="Add"></i></label>
|
||||||
<label for="discount">Discount</label>
|
<textarea readonly id="docRequiredId" class="fc" placeholder="Docs will appear here..." style="flex:1;resize:none;height:80px;"></textarea>
|
||||||
<div style="flex: 1; display: flex; align-items: center;">
|
</div>
|
||||||
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
|
<div style="display:flex;flex-direction:column;">
|
||||||
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
|
<label class="lbl">Remarks</label>
|
||||||
onclick="AddDiscount()"></i>
|
<textarea id="remarks" class="fc" placeholder="Special instructions…" style="flex:1;resize:none;height:80px;"></textarea>
|
||||||
</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
|
|
||||||
</button>
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<table id="IncotermsTable" class="row-border" style="width: 100%;">
|
|
||||||
<colgroup>
|
|
||||||
<col style="width:90%" />
|
|
||||||
<col style="width:10%" />
|
|
||||||
</colgroup>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Incoterms</th>
|
|
||||||
<th>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>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div><!-- /terms-col -->
|
||||||
</div>
|
<!-- Right column -->
|
||||||
<!-- Modal viewIncotermsModal-->
|
<div class="right-panel">
|
||||||
<div class="modal fade custom-modal-backdrop" id="viewIncotermsModal" tabindex="-1"
|
|
||||||
aria-labelledby="incotermsLabel"
|
<!-- List of Charges -->
|
||||||
data-bs-backdrop="static">
|
<div style="display:flex;flex-direction:column;flex:1;">
|
||||||
<div class="modal-dialog" role="document" data-bs-backdrop="static">
|
<div class="charges-wrap" style="display:flex;flex-direction:column;flex:1;">
|
||||||
<div class="modal-content">
|
<div class="charges-header">
|
||||||
<div class="modal-header">
|
<span>List of Charges</span>
|
||||||
<h5 id="incotermsHeader" class="modal-title">
|
<button class="btn-add-charge" onclick="viewCharges()">
|
||||||
</h5>
|
<i class="bx bxs-message-rounded-add"></i>
|
||||||
</div>
|
<span>Add</span>
|
||||||
<div class="modal-body">
|
</button>
|
||||||
<div class="form-group">
|
</div>
|
||||||
<label for="update-incotermsName">Incoterms Name</label>
|
<div class="charges-table-wrap" style="flex:1;">
|
||||||
<input id="update-incotermsName" class="form-control" style="margin-top:10px" placeholder="input here..." />
|
<table id="DestChargesTable" class="tbl-charges">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<input hidden id="update-incotermsId" />
|
|
||||||
<div class="modal-footer">
|
<!-- Amounts 2×2 -->
|
||||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Back</button>
|
<div class="amounts-row">
|
||||||
<button type="button" id="btnPostPutIncoterms" onclick="postPutIncoterms()" class="btn btn-success">Submit</button>
|
<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>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
</div>
|
|
||||||
</div>
|
</div><!-- /right-panel -->
|
||||||
</div>
|
</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")
|
@await Html.PartialAsync("PagesView/PO/_DocRequired")
|
||||||
<input hidden id="dr-ImportPoNo" />
|
|
||||||
<input hidden id="si-ImportPoNo" />
|
|
||||||
|
|||||||
@ -7,16 +7,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
|
<div>
|
||||||
<label for="discount">Discount</label>
|
<div class="form-group">
|
||||||
<div style="flex: 1; display: flex; align-items: center;">
|
<label class="lbl">Discount</label>
|
||||||
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
|
<input type="number" id="discount" name="discount"
|
||||||
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
|
class="form-control" placeholder="0.00" step="0.01" min="0">
|
||||||
onclick="AddDiscount()"></i>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<textarea id="discount" readonly disabled
|
|
||||||
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
|
|||||||
@ -1,125 +1,191 @@
|
|||||||
<style>
|
<title>Shipping Instructions – Annex A</title>
|
||||||
body {
|
<style>
|
||||||
font-family: Arial, sans-serif;
|
body {
|
||||||
}
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
.container-Form {
|
color: #000;
|
||||||
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;
|
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.instructions ul {
|
.title {
|
||||||
list-style: none;
|
|
||||||
padding-left: 20px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.instructions ul li {
|
|
||||||
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 {
|
|
||||||
display: inline-block;
|
|
||||||
width: 200px;
|
|
||||||
border-top: 1px solid black;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 10px;
|
font-weight: bold;
|
||||||
|
font-size: 18px;
|
||||||
|
margin-bottom: 25px;
|
||||||
}
|
}
|
||||||
</style>
|
|
||||||
<body>
|
.field-row {
|
||||||
<div class="instructions">
|
margin-bottom: 10px;
|
||||||
<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>
|
.field-label {
|
||||||
<li>*NAME OF MANUFACTURER WITH COMPLETE ADDRESS AND CONTACT NUMBERS</li>
|
font-weight: bold;
|
||||||
<li>*PRODUCT NAME</li>
|
display: inline-block;
|
||||||
<li>*GROSS WEIGHT/NET WEIGHT</li>
|
min-width: 140px;
|
||||||
<li>*MANUFACTURING DATE</li>
|
}
|
||||||
<li>*EXPIRATION DATE</li>
|
|
||||||
<li>*BATCH/LOT NO</li>
|
.line {
|
||||||
<li>*STORAGE REQUIREMENT</li>
|
display: inline-block;
|
||||||
</ul>
|
border-bottom: 1px solid #000;
|
||||||
<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>
|
min-width: 300px;
|
||||||
<p>3.) THE MANUFACTURING AND EXPIRATION DATE OF THE MATERIAL SHOULD BE MORE THAN 3 YEARS BUT NOT LESS THAN 1 YEAR.</p>
|
height: 16px;
|
||||||
<p>4.) GOODS TO BE DELIVERED SHOULD COME FROM ONE (1) BATCH ONLY.</p>
|
vertical-align: bottom;
|
||||||
<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>
|
.section-title {
|
||||||
<div class="shipping-address">
|
font-weight: bold;
|
||||||
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
|
margin-top: 25px;
|
||||||
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 MOBILE NUMBER: +63922-899-6318</p>
|
margin-bottom: 10px;
|
||||||
<p>CONTACT PERSON: TERESA MANIO</p>
|
font-size: 14px;
|
||||||
</div>
|
}
|
||||||
<div class="instructions">
|
|
||||||
<p>7.) ONLY ATTACH THE AIRWAY BILL (AWB) AND MSDS WITH THE SHIPMENT.</p>
|
ol {
|
||||||
<p>8.) ARRIVAL OF SHIPMENT MUST BE FROM MONDAY TO WEDNESDAY PREFERABLY.</p>
|
padding-left: 20px;
|
||||||
<p>9.) LOAD THE GOODS WITH ANY OF THE FOLLOWING PREFERRED AIRLINES:</p>
|
margin-top: 5px;
|
||||||
</div>
|
}
|
||||||
<div class="preferred-airlines">
|
|
||||||
<ul>
|
ul {
|
||||||
<li>a.) BR - Eva Air</li>
|
padding-left: 20px;
|
||||||
<li>b.) CI - China Airlines</li>
|
margin-top: 5px;
|
||||||
<li>c.) CZ - China Southern Airlines</li>
|
}
|
||||||
<li>d.) CX - Cathay Pacific</li>
|
|
||||||
<li>e.) JL - Japan Airlines</li>
|
li {
|
||||||
<li>f.) LH - Lufthansa German Airlines</li>
|
margin-bottom: 5px;
|
||||||
<li>g.) NW - Northwest Orient</li>
|
}
|
||||||
<li>h.) NX - Air Macau</li>
|
|
||||||
<li>i.) QF - Quantas Airways</li>
|
.company-address {
|
||||||
<li>j.) SQ - Singapore Airlines</li>
|
margin-top: 10px;
|
||||||
<li>k.) TG - Thai Airways</li>
|
margin-bottom: 15px;
|
||||||
<li>l.) EK - Emirates Air</li>
|
line-height: 1.6;
|
||||||
<li>m.) KE - Korean Airlines</li>
|
}
|
||||||
<li>n.) GF - Gulf Air</li>
|
|
||||||
<li>o.) EY - Ethad Airways</li>
|
.airlines {
|
||||||
</ul>
|
columns: 2;
|
||||||
</div>
|
-webkit-columns: 2;
|
||||||
<p><em>*NON-COMPLIANCE TO INSTRUCTIONS WOULD MEAN NON-ACCEPTANCE OF DELIVERIES.</em></p>
|
-moz-columns: 2;
|
||||||
<div class="conforme">
|
margin-top: 5px;
|
||||||
<p>Conforme:</p>
|
}
|
||||||
<span>Supplier</span>
|
|
||||||
</div>
|
.non-compliance {
|
||||||
</body>
|
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>
|
||||||
|
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) 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>
|
||||||
@ -1,91 +1,164 @@
|
|||||||
<body>
|
|
||||||
<div class="instructions">
|
<title>Shipping Instructions – Annex A Courier</title>
|
||||||
<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>
|
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
font-family: Arial, sans-serif;
|
font-family: Arial, sans-serif;
|
||||||
}
|
font-size: 13px;
|
||||||
|
color: #000;
|
||||||
.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;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.instructions ul {
|
|
||||||
list-style: none;
|
|
||||||
padding-left: 20px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.instructions ul li {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shipping-address {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.conforme {
|
.title {
|
||||||
margin-top: 40px;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
.conforme span {
|
|
||||||
display: inline-block;
|
|
||||||
width: 200px;
|
|
||||||
border-top: 1px solid black;
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
</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>
|
||||||
body {
|
<style>
|
||||||
font-family: Arial, sans-serif;
|
body {
|
||||||
}
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
.container-Form {
|
color: #000;
|
||||||
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;
|
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.instructions ul {
|
.title {
|
||||||
list-style: none;
|
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;
|
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;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
.instructions ul li {
|
<div class="field-row">
|
||||||
margin-bottom: 10px;
|
<span class="field-label">Mode of Shipment:</span>
|
||||||
}
|
<span>FCL</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
.shipping-address {
|
<div class="section-title">Shipping Instructions</div>
|
||||||
margin-bottom: 20px;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conforme {
|
<ol>
|
||||||
margin-top: 40px;
|
<li>
|
||||||
margin-bottom: 20px;
|
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>
|
||||||
|
|
||||||
.conforme span {
|
<div class="company-address">
|
||||||
display: inline-block;
|
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||||
width: 200px;
|
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||||
border-top: 1px solid black;
|
Tel. No.: +632-372-3984 to 89 local 145<br />
|
||||||
text-align: center;
|
Mobile No.: +63 946 900 8240<br />
|
||||||
margin-top: 10px;
|
Contact Person: Ms. Marilou Pangilinan
|
||||||
}
|
|
||||||
</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>
|
|
||||||
<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.) 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>
|
||||||
<div class="shipping-address">
|
|
||||||
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
|
<div class="section-title">Trade and Shipping Documents</div>
|
||||||
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 MOBILE NUMBER: +63922-899-6318</p>
|
|
||||||
<p>CONTACT PERSON: TERESA MANIO</p>
|
<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>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>
|
</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>
|
|
||||||
<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>
|
|
||||||
</ul>
|
|
||||||
<p>Shipping Lines to avoid are:</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>
|
|
||||||
</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>
|
|
||||||
</body>
|
|
||||||
|
|||||||
@ -1,101 +1,175 @@
|
|||||||
<style>
|
<title>Shipping Instructions – Annex A LCL</title>
|
||||||
body {
|
<style>
|
||||||
font-family: Arial, sans-serif;
|
body {
|
||||||
}
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
.container-Form {
|
color: #000;
|
||||||
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;
|
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.instructions ul {
|
.title {
|
||||||
list-style: none;
|
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;
|
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;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
.instructions ul li {
|
<div class="field-row">
|
||||||
margin-bottom: 10px;
|
<span class="field-label">Mode of Shipment:</span>
|
||||||
}
|
<span>LCL</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
.shipping-address {
|
<div class="section-title">Shipping Instructions</div>
|
||||||
margin-bottom: 20px;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conforme {
|
<ol>
|
||||||
margin-top: 40px;
|
<li>
|
||||||
margin-bottom: 20px;
|
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>
|
||||||
|
|
||||||
.conforme span {
|
<div class="company-address">
|
||||||
display: inline-block;
|
<strong>LLOYD LABORATORIES, INC.</strong><br />
|
||||||
width: 200px;
|
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
|
||||||
border-top: 1px solid black;
|
Tel. No.: +632-372-3984 to 89 local 145<br />
|
||||||
text-align: center;
|
Mobile No.: +63 946 900 8240<br />
|
||||||
margin-top: 10px;
|
Contact Person: Ms. Marilou Pangilinan
|
||||||
}
|
|
||||||
</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>
|
|
||||||
<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, FORM AI AND COA) SHOULD BE COURIERED/SENT TO:</p>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="shipping-address">
|
|
||||||
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
|
<div class="section-title">Trade and Shipping Documents</div>
|
||||||
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 MOBILE NUMBER: +63922-899-6318</p>
|
|
||||||
<p>CONTACT PERSON: TERESA MANIO</p>
|
<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>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>
|
</div>
|
||||||
<div class="instructions">
|
|
||||||
<p>7.) FOR LESS THAN CONTAINER LOAD, KINDLY SEE BELOW PREFERRED SHIPPING LINES AND WAREHOUSE FOR CHEAPER INBOUND CHARGES:</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>
|
|
||||||
</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>
|
||||||
<th>ItemNo</th>
|
<th>ItemNo</th>
|
||||||
<th>ItemName</th>
|
<th>ItemName</th>
|
||||||
|
<th>Description</th>
|
||||||
<th>CategoryName</th>
|
<th>CategoryName</th>
|
||||||
<th>PRTypeId</th>
|
|
||||||
<th>Qty</th>
|
<th>Qty</th>
|
||||||
<th>Action</th>
|
<th>Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -139,5 +139,5 @@
|
|||||||
</div>
|
</div>
|
||||||
<link href="~/css/item/cartv2.css" rel="stylesheet" />
|
<link href="~/css/item/cartv2.css" rel="stylesheet" />
|
||||||
@await Html.PartialAsync("PagesView/Item/_Scripts")
|
@await Html.PartialAsync("PagesView/Item/_Scripts")
|
||||||
<script src="~/JsFunctions/Items/ItemCartV4.js"></script>
|
<script src="~/JsFunctions/Items/ItemCartV5.js"></script>
|
||||||
</body>
|
</body>
|
||||||
@ -1,52 +1,80 @@
|
|||||||
<body>
|
<body>
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row table-container shadow-lg p-2 mb-3 bg-white rounded">
|
<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>
|
<h2 id="customPOHeading">Custom P.O. Creation</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row" style="margin-bottom:10px">
|
||||||
<!-- Left side (half of the row) -->
|
<!-- Left side (half of the row) -->
|
||||||
<div class="col-6">
|
<div class="col-12 mb-2">
|
||||||
<div class="row">
|
<div class="row align-items-end">
|
||||||
<div class="col-4">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="poNo">PO No.</label>
|
|
||||||
<i class="bx bx-pencil"
|
|
||||||
style="color: orange; font-size: 1.2rem; cursor: pointer;"
|
|
||||||
onclick="enablePONoAutocomplete()"> </i>
|
|
||||||
<input type="search" readonly id="poNo" class="form-control">
|
|
||||||
<input type="hidden" id="poId" class="form-control" name="poId" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-4">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="poNoFinal">Final PO No.</label>
|
|
||||||
<input readonly id="poNoFinal" class="form-control">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-4">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="poType">PO Type</label>
|
|
||||||
<select class="form-control" name="poType" id="poType"
|
|
||||||
onchange="customFormPOElemComponent(this.value)">
|
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Right side (half of the row) -->
|
<!-- PO No -->
|
||||||
<div class="col-6">
|
<div class="col-md-2">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="supplierName">Supplier</label>
|
<label for="poNo">
|
||||||
<input type="search" id="supplierName" class="form-control mb-2" name="supplierName" />
|
PO No.
|
||||||
<input type="hidden" id="supplierId" class="form-control" name="supplierId" />
|
<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" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 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>
|
||||||
|
|
||||||
|
<!-- 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"
|
||||||
|
onchange="customFormPOElemComponent(this.value)">
|
||||||
|
|
||||||
|
<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>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
@ -55,7 +83,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-container shadow-lg p-3 mb-3 bg-white rounded">
|
<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()">
|
id="chooseItem" onclick="viewPRWOCanvass()">
|
||||||
Choose Item
|
Choose Item
|
||||||
</button>
|
</button>
|
||||||
@ -94,10 +122,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Modal OtherCharges-->
|
<!-- Modal OtherCharges-->
|
||||||
<div class="modal fade custom-modal-backdrop" id="addCharges"
|
<div class="modal fade custom-modal-backdrop" id="addCharges"
|
||||||
tabindex="-1" aria-labelledby="addChargesLabel" data-bs-backdrop="static">
|
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-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3 id="addChargesLabel" class="modal-title">
|
<h3 id="addChargesLabel" class="modal-title">
|
||||||
@ -113,7 +142,7 @@
|
|||||||
<br />
|
<br />
|
||||||
<table id="SourceChargesTable" class="row-border" style="width: 100%;">
|
<table id="SourceChargesTable" class="row-border" style="width: 100%;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width:10%"/>
|
<col style="width:10%" />
|
||||||
<col style="width:65%" />
|
<col style="width:65%" />
|
||||||
<col style="width:15%" />
|
<col style="width:15%" />
|
||||||
<col style="width:10%" />
|
<col style="width:10%" />
|
||||||
@ -124,7 +153,7 @@
|
|||||||
All
|
All
|
||||||
<input id="selectAllCheckboxItem" type="checkbox" class="selectAllCheckboxItem" />
|
<input id="selectAllCheckboxItem" type="checkbox" class="selectAllCheckboxItem" />
|
||||||
</th>
|
</th>
|
||||||
<th >Charges</th>
|
<th>Charges</th>
|
||||||
<th style="text-align:center;width:15%;">Amount</th>
|
<th style="text-align:center;width:15%;">Amount</th>
|
||||||
<th>Action</th>
|
<th>Action</th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -165,9 +194,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input hidden id="poTypeId"/>
|
<input hidden id="poTypeId"/>
|
||||||
<link href="~/css/po/CustomPOV2.css" rel="stylesheet" />
|
<link href="~/css/po/CustomPOV3.css" rel="stylesheet" />
|
||||||
<script src="~/JsFunctions/PO/CustomPOV8.js"></script>
|
<script src="~/JsFunctions/PO/CustomPOV9.js"></script>
|
||||||
@await Html.PartialAsync("PagesView/PR/_PRWOCanvass")
|
@await Html.PartialAsync("PagesView/PR/_PRWOCanvass")
|
||||||
@await Html.PartialAsync("PagesView/PO/_POScripts")
|
@await Html.PartialAsync("PagesView/PO/_POScripts")
|
||||||
</body>
|
</body>
|
||||||
@ -235,18 +235,29 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="second-page">
|
<div class="second-page">
|
||||||
<div class="container-Form">
|
<div class="container-Form">
|
||||||
<div class="header">
|
<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 class="supplier">
|
|
||||||
<p>SUPPLIER: <strong id="supplier-C-2ndPage"></strong></p>
|
|
||||||
</div>
|
</div>
|
||||||
|
@* <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="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 -->
|
<!-- Toggle Button -->
|
||||||
<button id="toggleShippingInstructions" class="btn btn-secondary" onclick="toggleShippingInstructions()">Hide Shipping Instructions</button>
|
<button id="toggleShippingInstructions" class="btn btn-secondary" onclick="toggleShippingInstructions()">Hide Shipping Instructions</button>
|
||||||
<div id="shippingInstructionsContainer">
|
<div id="shippingInstructionsContainer">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -305,10 +316,15 @@
|
|||||||
<select class="form-control" name="shippingInstructionId" id="shippingInstructionId"
|
<select class="form-control" name="shippingInstructionId" id="shippingInstructionId"
|
||||||
style="margin-bottom:5px;">
|
style="margin-bottom:5px;">
|
||||||
<option disabled>-Select Shipping Instruction-</option>
|
<option disabled>-Select Shipping Instruction-</option>
|
||||||
<option value="1">AIR</option>
|
<option disabled selected>— Select —</option>
|
||||||
<option value="2">COURIER</option>
|
<option value="1">General AIR</option>
|
||||||
<option value="3">SEA FCL</option>
|
<option value="2">General COURIER</option>
|
||||||
<option value="4">SEA LCL</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>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|||||||
@ -11,11 +11,11 @@
|
|||||||
<script src="~/jsfunctions/common/termsV2.js"></script>
|
<script src="~/jsfunctions/common/termsV2.js"></script>
|
||||||
<script src="~/jsfunctions/common/ColumnCommonV2.js"></script>
|
<script src="~/jsfunctions/common/ColumnCommonV2.js"></script>
|
||||||
<script src="~/jsfunctions/common/genericcrud.js"></script>
|
<script src="~/jsfunctions/common/genericcrud.js"></script>
|
||||||
<script src="~/jsfunctions/common/ParamConfigV2.js"></script>
|
<script src="~/jsfunctions/common/ParamConfigV3.js"></script>
|
||||||
<script src="~/jsfunctions/common/PostPutV2.js"></script>
|
<script src="~/jsfunctions/common/PostPutV3.js"></script>
|
||||||
<script src="~/jsfunctions/common/PRWOCanvassV2.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/PrintingV2.js"></script>
|
||||||
<script src="~/JsFunctions/PO/POColumn.js"></script>
|
<script src="~/JsFunctions/PO/POColumn.js"></script>
|
||||||
<script src="~/jsfunctions/po/ApiV5.js"></script>
|
<script src="~/jsfunctions/po/ApiV5.js"></script>
|
||||||
@ -23,8 +23,8 @@
|
|||||||
<script src="~/jsfunctions/po/POVarV6.js"></script>
|
<script src="~/jsfunctions/po/POVarV6.js"></script>
|
||||||
<script src="~/jsfunctions/po/POViewV5.js"></script>
|
<script src="~/jsfunctions/po/POViewV5.js"></script>
|
||||||
<script src="~/jsfunctions/po/PopulateDopdownV4.js"></script>
|
<script src="~/jsfunctions/po/PopulateDopdownV4.js"></script>
|
||||||
<script src="~/jsfunctions/po/POPutPostV4.js"></script>
|
<script src="~/jsfunctions/po/POPutPostV5.js"></script>
|
||||||
<script src="~/jsfunctions/po/rowCallBackV5.js"></script>
|
<script src="~/jsfunctions/po/rowCallBackV6.js"></script>
|
||||||
|
|
||||||
<script src="~/jsfunctions/utilities/NewStyle.js"></script>
|
<script src="~/jsfunctions/utilities/NewStyle.js"></script>
|
||||||
<script src="~/jsfunctions/utilities/utilsV3.js"></script>
|
<script src="~/jsfunctions/utilities/utilsV3.js"></script>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<title>@ViewData["Title"] - LLI Purchasing Non-Inventory System</title>
|
<title>@ViewData["Title"] - LLI Purchasing Non-Inventory System</title>
|
||||||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
|
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" href="~/css/sideBarStyleV2.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 rel="stylesheet" href="~/css/spinner.css" />
|
||||||
<link href="~/lib/font-awesome/css/all.css" rel="stylesheet" />
|
<link href="~/lib/font-awesome/css/all.css" rel="stylesheet" />
|
||||||
<link href="~/lib/font-awesome/css/all.min.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="~/js/sidebar.js"></script>
|
||||||
<script src="~/Datatables/DataTables-1.13.6/js/jquery.dataTables.min.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="~/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>
|
<script src="~/lib/jquery-ui-1132custom/jquery-ui.min.js"></script>
|
||||||
|
|
||||||
<!-- DataTables Buttons and Export JS -->
|
<!-- DataTables Buttons and Export JS -->
|
||||||
|
|||||||
@ -52,24 +52,7 @@ var colOnColDef = [
|
|||||||
visible: false,
|
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 = [
|
var colAccountDetailNot = [
|
||||||
{
|
{
|
||||||
data: 'userAccessId',
|
data: 'userAccessId',
|
||||||
|
|||||||
@ -1,55 +1,52 @@
|
|||||||
function postPutAccessRights(IsNotExist) {
|
function postPutAccessRights(IsNotExist) {
|
||||||
loader = $('#overlay, #loader').css('z-index', 1070);
|
loader = $('#overlay, #loader').css('z-index', 1070);
|
||||||
|
|
||||||
var selectedCheckboxes = IsNotExist ? $('.select-NotAccess-checkbox:checked') :
|
const selectedItems = Object.values(selectedProductsMap);
|
||||||
$('.select-Access-checkbox:checked');
|
if (selectedItems.length === 0) {
|
||||||
var dynamicTable = IsNotExist ? notAccessDataTable : accessDataTable;
|
showToast('warning', 'Please select items for access first!', 'User access failed', 4000);
|
||||||
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!');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const confirmation = confirm('Are you sure you want to proceed?');
|
|
||||||
|
|
||||||
if (confirmation) {
|
const userRightsList = selectedItems.map(item => {
|
||||||
$.ajax({
|
return {
|
||||||
url: '/Account/PutPostUserAccess',
|
UserAccessId: item.userAccessId,
|
||||||
type: 'POST',
|
ContAccId: item.contAccId,
|
||||||
data: { userRightsList, IsNotExist, UserId },
|
AccessTypeId: item.accessTypeId,
|
||||||
success: function (response) {
|
IsActive: true,
|
||||||
if (response.success) {
|
};
|
||||||
$('#viewItemList').modal('hide');
|
});
|
||||||
notAccessDataTable.ajax.reload();
|
console.log(userRightsList);
|
||||||
accessDataTable.ajax.reload();
|
|
||||||
alert('Pages Successfully Added!');
|
showConfirmation({
|
||||||
} else {
|
title: 'User Access Rights',
|
||||||
alert('Failed: ' + response.response);
|
message: 'Are you sure you want to proceed? This action cannot be undone.',
|
||||||
notAccessDataTable.ajax.reload();
|
type: 'warning',
|
||||||
accessDataTable.ajax.reload();
|
confirmText: 'Yes',
|
||||||
|
cancelText: 'No'
|
||||||
|
}).then((confirmed) => {
|
||||||
|
|
||||||
|
if (confirmed) {
|
||||||
|
$.ajax({
|
||||||
|
url: '/Account/PutPostUserAccess',
|
||||||
|
type: 'POST',
|
||||||
|
data: { userRightsList, IsNotExist, UserId },
|
||||||
|
success: function (response) {
|
||||||
|
if (response.success) {
|
||||||
|
closeModal('modalAccess');
|
||||||
|
accessDataTable.ajax.reload();
|
||||||
|
showToast('success', 'Access rights saved!', 'User access', 4000);
|
||||||
|
} else {
|
||||||
|
showToast('error', response.response, 'User access failed', 4000);
|
||||||
|
accessDataTable.ajax.reload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeSend: function () {
|
||||||
|
loader.show();
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
loader.hide();
|
||||||
}
|
}
|
||||||
},
|
});
|
||||||
beforeSend: function () {
|
}
|
||||||
loader.show();
|
});
|
||||||
},
|
|
||||||
complete: function () {
|
|
||||||
loader.hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -1,31 +1,31 @@
|
|||||||
//navigate the picture
|
//navigate the picture
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
//document.addEventListener("DOMContentLoaded", function () {
|
||||||
var profilePictureImage = document.getElementById("profilePictureImage");
|
// var profilePictureImage = document.getElementById("profilePictureImage");
|
||||||
var profilePictureInput = document.getElementById("profilePictureInput");
|
// var profilePictureInput = document.getElementById("profilePictureInput");
|
||||||
|
|
||||||
// Set a default image source for the profile picture
|
// // Set a default image source for the profile picture
|
||||||
profilePictureImage.src = "/Content/Images/404userImage.jpg";
|
// profilePictureImage.src = "wwwroot/Content/Images/404userImage.jpg";
|
||||||
|
|
||||||
// Add a click event listener to the profile picture to trigger the file input
|
// // Add a click event listener to the profile picture to trigger the file input
|
||||||
profilePictureImage.addEventListener("click", function () {
|
// profilePictureImage.addEventListener("click", function () {
|
||||||
profilePictureInput.click();
|
// profilePictureInput.click();
|
||||||
});
|
// });
|
||||||
|
|
||||||
// Add a change event listener to the file input
|
// // Add a change event listener to the file input
|
||||||
profilePictureInput.addEventListener("change", function () {
|
// profilePictureInput.addEventListener("change", function () {
|
||||||
var ProfilePicture = profilePictureInput.files[0];
|
// var ProfilePicture = profilePictureInput.files[0];
|
||||||
|
|
||||||
if (ProfilePicture) {
|
// if (ProfilePicture) {
|
||||||
// Display the selected image
|
// // Display the selected image
|
||||||
var imageURL = URL.createObjectURL(ProfilePicture);
|
// var imageURL = URL.createObjectURL(ProfilePicture);
|
||||||
profilePictureImage.src = imageURL;
|
// profilePictureImage.src = imageURL;
|
||||||
} else {
|
// } else {
|
||||||
// No file selected, revert to the default image
|
// // No file selected, revert to the default image
|
||||||
console.log("No file selected, using default image");
|
// console.log("No file selected, using default image");
|
||||||
profilePictureImage.src = "/Content/Images/404userImage.jpg";
|
// profilePictureImage.src = "wwwroot/Content/Images/404userImage.jpg";
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
});
|
//});
|
||||||
|
|
||||||
let jsonObj = {};
|
let jsonObj = {};
|
||||||
|
|
||||||
@ -39,134 +39,134 @@ function renderAccessDetailbtn(data, row) {
|
|||||||
|
|
||||||
return buttonsHtml;
|
return buttonsHtml;
|
||||||
}
|
}
|
||||||
function viewUserAccessNotExist() {
|
////function viewUserAccessNotExist() {
|
||||||
loader = $('#overlay, #loader');
|
//// loader = $('#overlay, #loader');
|
||||||
$('#viewUserAccessNotExist').modal('show');
|
//// $('#viewUserAccessNotExist').modal('show');
|
||||||
$('#viewUserAccessNotExist').css('z-index', 1060);
|
//// $('#viewUserAccessNotExist').css('z-index', 1060);
|
||||||
tableElement = $('#NotAccessDataTable');
|
//// tableElement = $('#NotAccessDataTable');
|
||||||
tableDestroy(tableElement);
|
//// tableDestroy(tableElement);
|
||||||
var submitButton = $('#btnNotAccess');
|
//// var submitButton = $('#btnNotAccess');
|
||||||
var totalSelectedLabel = $('#totalSelNotAccess');
|
//// var totalSelectedLabel = $('#totalSelNotAccess');
|
||||||
let IsNotExist = true;
|
//// let IsNotExist = true;
|
||||||
notAccessDataTable = tableElement.DataTable({
|
//// notAccessDataTable = tableElement.DataTable({
|
||||||
ajax: $.extend({
|
//// ajax: $.extend({
|
||||||
url: '/Account/GetUserRights',
|
//// url: '/Account/GetUserRights',
|
||||||
type: 'POST',
|
//// type: 'POST',
|
||||||
data: { UserId, IsNotExist },
|
//// data: { UserId, IsNotExist },
|
||||||
}, beforeComplete(loader)),
|
//// }, beforeComplete(loader)),
|
||||||
language: {
|
//// language: {
|
||||||
emptyTable: "No record available"
|
//// emptyTable: "No record available"
|
||||||
},
|
//// },
|
||||||
initComplete: function () {
|
//// initComplete: function () {
|
||||||
var api = this.api();
|
//// var api = this.api();
|
||||||
var data = api.ajax.json();
|
//// var data = api.ajax.json();
|
||||||
if (!data || !data.data || data.data === "No Data") {
|
//// if (!data || !data.data || data.data === "No Data") {
|
||||||
$('.dataTables_empty').html("No record available");
|
//// $('.dataTables_empty').html("No record available");
|
||||||
}
|
//// }
|
||||||
updateSubmitBtnVisib();
|
//// updateSubmitBtnVisib();
|
||||||
updateSelectedCount();
|
//// updateSelectedCount();
|
||||||
},
|
//// },
|
||||||
columns: colAccountDetailNot,
|
//// columns: colAccountDetailNot,
|
||||||
responsive: true,
|
//// responsive: true,
|
||||||
error: errorHandler
|
//// error: errorHandler
|
||||||
});
|
//// });
|
||||||
function updateSubmitBtnVisib() {
|
//// function updateSubmitBtnVisib() {
|
||||||
var isEmpty = notAccessDataTable.data().length === 0;
|
//// var isEmpty = notAccessDataTable.data().length === 0;
|
||||||
submitButton.toggle(!isEmpty);
|
//// submitButton.toggle(!isEmpty);
|
||||||
}
|
//// }
|
||||||
$('#NotAccessDataTable').on('change', '.select-NotAccess-checkbox', function () {
|
//// $('#NotAccessDataTable').on('change', '.select-NotAccess-checkbox', function () {
|
||||||
var row = $(this).closest('tr');
|
//// var row = $(this).closest('tr');
|
||||||
if ($(this).prop('checked')) {
|
//// if ($(this).prop('checked')) {
|
||||||
row.addClass('selected-row');
|
//// row.addClass('selected-row');
|
||||||
} else {
|
//// } else {
|
||||||
row.removeClass('selected-row');
|
//// row.removeClass('selected-row');
|
||||||
}
|
//// }
|
||||||
updateSelectedCount();
|
//// updateSelectedCount();
|
||||||
});
|
//// });
|
||||||
|
|
||||||
$('#selectAllCheckboxNotAccess').on('change', function () {
|
//// $('#selectAllCheckboxNotAccess').on('change', function () {
|
||||||
var isChecked = $(this).prop('checked');
|
//// var isChecked = $(this).prop('checked');
|
||||||
$('.select-NotAccess-checkbox').prop('checked', isChecked);
|
//// $('.select-NotAccess-checkbox').prop('checked', isChecked);
|
||||||
if (isChecked) {
|
//// if (isChecked) {
|
||||||
$('#NotAccessDataTable tbody tr').addClass('selected-row');
|
//// $('#NotAccessDataTable tbody tr').addClass('selected-row');
|
||||||
} else {
|
//// } else {
|
||||||
$('#NotAccessDataTable tbody tr').removeClass('selected-row');
|
//// $('#NotAccessDataTable tbody tr').removeClass('selected-row');
|
||||||
}
|
//// }
|
||||||
updateSelectedCount();
|
//// updateSelectedCount();
|
||||||
});
|
//// });
|
||||||
function updateSelectedCount() {
|
//// function updateSelectedCount() {
|
||||||
var totalSelected = $('.select-NotAccess-checkbox:checked').length;
|
//// var totalSelected = $('.select-NotAccess-checkbox:checked').length;
|
||||||
totalSelectedLabel.text(totalSelected);
|
//// totalSelectedLabel.text(totalSelected);
|
||||||
}
|
//// }
|
||||||
}
|
////}
|
||||||
function viewUserAccess(data) {
|
////function viewUserAccess(data) {
|
||||||
loader = $('#overlay, #loader');
|
//// loader = $('#overlay, #loader');
|
||||||
$('#viewUserAccess').modal('show');
|
//// $('#viewUserAccess').modal('show');
|
||||||
$('#viewUserAccess').css('z-index', 1050);
|
//// $('#viewUserAccess').css('z-index', 1050);
|
||||||
tableElement = $('#AccessDataTable');
|
//// tableElement = $('#AccessDataTable');
|
||||||
tableDestroy(tableElement);
|
//// tableDestroy(tableElement);
|
||||||
var submitButton = $('#btnAccess');
|
//// var submitButton = $('#btnAccess');
|
||||||
var totalSelectedLabel = $('#totalSelAccess');
|
//// var totalSelectedLabel = $('#totalSelAccess');
|
||||||
UserId = data.id;
|
//// UserId = data.id;
|
||||||
//CanvassId = data.canvassId;
|
//// //CanvassId = data.canvassId;
|
||||||
$('#ua-EmailAddress').val(data.email);
|
//// $('#ua-EmailAddress').val(data.email);
|
||||||
$('#ua-FullName').val(data.fullName);
|
//// $('#ua-FullName').val(data.fullName);
|
||||||
$('#uan-EmailAddress').val(data.email);
|
//// $('#uan-EmailAddress').val(data.email);
|
||||||
$('#uan-FullName').val(data.fullName);
|
//// $('#uan-FullName').val(data.fullName);
|
||||||
accessDataTable = tableElement.DataTable({
|
//// accessDataTable = tableElement.DataTable({
|
||||||
ajax: $.extend({
|
//// ajax: $.extend({
|
||||||
url: '/Account/GetUserRights',
|
//// url: '/Account/GetUserRights',
|
||||||
type: 'POST',
|
//// type: 'POST',
|
||||||
data: { UserId },
|
//// data: { UserId },
|
||||||
}, beforeComplete(loader)),
|
//// }, beforeComplete(loader)),
|
||||||
language: {
|
//// language: {
|
||||||
emptyTable: "No record available"
|
//// emptyTable: "No record available"
|
||||||
},
|
//// },
|
||||||
initComplete: function () {
|
//// initComplete: function () {
|
||||||
var api = this.api();
|
//// var api = this.api();
|
||||||
var data = api.ajax.json();
|
//// var data = api.ajax.json();
|
||||||
if (!data || !data.data || data.data === "No Data") {
|
//// if (!data || !data.data || data.data === "No Data") {
|
||||||
$('.dataTables_empty').html("No record available");
|
//// $('.dataTables_empty').html("No record available");
|
||||||
}
|
//// }
|
||||||
updateSubmitBtnVisib();
|
//// updateSubmitBtnVisib();
|
||||||
updateSelectedCount();
|
//// updateSelectedCount();
|
||||||
},
|
//// },
|
||||||
columns: colAccountDetail,
|
//// columns: colAccountDetail,
|
||||||
responsive: true,
|
//// responsive: true,
|
||||||
error: errorHandler
|
//// error: errorHandler
|
||||||
});
|
//// });
|
||||||
function updateSubmitBtnVisib() {
|
//// function updateSubmitBtnVisib() {
|
||||||
var isEmpty = accessDataTable.data().length === 0;
|
//// var isEmpty = accessDataTable.data().length === 0;
|
||||||
submitButton.toggle(!isEmpty);
|
//// submitButton.toggle(!isEmpty);
|
||||||
}
|
//// }
|
||||||
$('#AccessDataTable').on('change', '.select-Access-checkbox', function () {
|
//// $('#AccessDataTable').on('change', '.select-Access-checkbox', function () {
|
||||||
var row = $(this).closest('tr');
|
//// var row = $(this).closest('tr');
|
||||||
if ($(this).prop('checked')) {
|
//// if ($(this).prop('checked')) {
|
||||||
row.addClass('selected-row');
|
//// row.addClass('selected-row');
|
||||||
} else {
|
//// } else {
|
||||||
row.removeClass('selected-row');
|
//// row.removeClass('selected-row');
|
||||||
}
|
//// }
|
||||||
updateSelectedCount();
|
//// updateSelectedCount();
|
||||||
});
|
//// });
|
||||||
|
|
||||||
$('#selectAllCheckboxAccess').on('change', function () {
|
//// $('#selectAllCheckboxAccess').on('change', function () {
|
||||||
var isChecked = $(this).prop('checked');
|
//// var isChecked = $(this).prop('checked');
|
||||||
$('.select-Access-checkbox').prop('checked', isChecked);
|
//// $('.select-Access-checkbox').prop('checked', isChecked);
|
||||||
if (isChecked) {
|
//// if (isChecked) {
|
||||||
$('#AccessDataTable tbody tr').addClass('selected-row');
|
//// $('#AccessDataTable tbody tr').addClass('selected-row');
|
||||||
} else {
|
//// } else {
|
||||||
$('#AccessDataTable tbody tr').removeClass('selected-row');
|
//// $('#AccessDataTable tbody tr').removeClass('selected-row');
|
||||||
}
|
//// }
|
||||||
updateSelectedCount();
|
//// updateSelectedCount();
|
||||||
});
|
//// });
|
||||||
function updateSelectedCount() {
|
//// function updateSelectedCount() {
|
||||||
var totalSelected = $('.select-Access-checkbox:checked').length;
|
//// var totalSelected = $('.select-Access-checkbox:checked').length;
|
||||||
totalSelectedLabel.text(totalSelected);
|
//// totalSelectedLabel.text(totalSelected);
|
||||||
}
|
//// }
|
||||||
}
|
////}
|
||||||
function ShowNewAccess() {
|
////function ShowNewAccess() {
|
||||||
viewUserAccessNotExist();
|
//// viewUserAccessNotExist();
|
||||||
}
|
////}
|
||||||
function showUpdateUserProfile(jsonData) {
|
function showUpdateUserProfile(jsonData) {
|
||||||
jsonObj = jsonData;
|
jsonObj = jsonData;
|
||||||
|
|
||||||
@ -414,20 +414,7 @@ function addNewUser() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Use this function to populate roles
|
// 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() {
|
function populateRoles() {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/Account/GetRoles", // Update this with your actual controller and action
|
url: "/Account/GetRoles", // Update this with your actual controller and action
|
||||||
@ -456,25 +443,25 @@ function populateRoles() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
$(document).ready(function () {
|
//$(document).ready(function () {
|
||||||
loader = $('#overlay, #loader');
|
// loader = $('#overlay, #loader');
|
||||||
UserRights = document.getElementById("roleRights").value;
|
// //UserRights = document.getElementById("roleRights").value;
|
||||||
populateRoles();
|
// populateRoles();
|
||||||
userListTable = $('#UserListTable').DataTable({
|
// userListTable = $('#UserListTable').DataTable({
|
||||||
ajax: $.extend({
|
// ajax: $.extend({
|
||||||
url: '/Account/GetAllUsers',
|
// url: '/Account/GetAllUsers',
|
||||||
type: 'GET',
|
// type: 'GET',
|
||||||
}, beforeComplete(loader)),
|
// }, beforeComplete(loader)),
|
||||||
initComplete: initCompleteCallback,
|
// initComplete: initCompleteCallback,
|
||||||
columns: colOnUserList,
|
// columns: colOnUserList,
|
||||||
columnDefs: colOnColDef,
|
// columnDefs: colOnColDef,
|
||||||
language: {
|
// language: {
|
||||||
emptyTable: "No record available"
|
// emptyTable: "No record available"
|
||||||
},
|
// },
|
||||||
rowCallback: rowAccountCallback,
|
// rowCallback: rowAccountCallback,
|
||||||
responsive: true,
|
// responsive: true,
|
||||||
error: errorHandler
|
// error: errorHandler
|
||||||
});
|
// });
|
||||||
})
|
//})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// Configuration
|
// Configuration
|
||||||
const CONFIG = {
|
const CONFIG = {
|
||||||
timeoutMinutes: 120, // Total session timeout
|
timeoutMinutes: 240, // Total session timeout
|
||||||
checkIntervalSeconds: 60, // How often to check (every minute)
|
checkIntervalSeconds: 60, // How often to check (every minute)
|
||||||
warningMinutes: 5, // Warn THIS many minutes before timeout
|
warningMinutes: 5, // Warn THIS many minutes before timeout
|
||||||
logoutUrl: '/Home/Index',
|
logoutUrl: '/Home/Index',
|
||||||
@ -67,7 +67,7 @@ function showTimeoutWarning(remainingMinutes) {
|
|||||||
updateCountdown();
|
updateCountdown();
|
||||||
countdownInterval = setInterval(updateCountdown, 1000);
|
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: '',
|
deliverTo: '',
|
||||||
itemName: '',
|
itemName: '',
|
||||||
specification: '',
|
specification: '',
|
||||||
|
countryOrigin: '',
|
||||||
qty: 0,
|
qty: 0,
|
||||||
uomName: '',
|
uomName: '',
|
||||||
uomId: 0
|
uomId: 0
|
||||||
@ -49,6 +49,7 @@ function poValidateParameters(poTypeId, method, isItem) {
|
|||||||
profInvoiceDate: document.getElementById('piDate'),
|
profInvoiceDate: document.getElementById('piDate'),
|
||||||
shippingInstructionId: document.getElementById('shippingInstructionId'),
|
shippingInstructionId: document.getElementById('shippingInstructionId'),
|
||||||
podId: document.getElementById('podId'),
|
podId: document.getElementById('podId'),
|
||||||
|
countryOrigin: document.getElementById('countryOrigin'),
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Fields specific to other poTypeId values
|
// Fields specific to other poTypeId values
|
||||||
@ -99,6 +100,7 @@ function clearCustomPOParam() {
|
|||||||
paymentTermsId: 0,
|
paymentTermsId: 0,
|
||||||
supplierId: 0,
|
supplierId: 0,
|
||||||
supplierName: '',
|
supplierName: '',
|
||||||
|
countryOrigin: '',
|
||||||
deliveryDate: new Date().toISOString().split('T')[0],
|
deliveryDate: new Date().toISOString().split('T')[0],
|
||||||
deliverTo: ''
|
deliverTo: ''
|
||||||
};
|
};
|
||||||
@ -135,6 +137,7 @@ function poDTO(config) {
|
|||||||
DeliverTo = config.deliverTo;
|
DeliverTo = config.deliverTo;
|
||||||
DeliveryDate = config.deliveryDate;
|
DeliveryDate = config.deliveryDate;
|
||||||
ItemName = config.itemName;
|
ItemName = config.itemName;
|
||||||
|
CountryOrigin = config.countryOrigin;
|
||||||
Specification = config.specification;
|
Specification = config.specification;
|
||||||
Qty = config.qty;
|
Qty = config.qty;
|
||||||
UOMName = config.uomName;
|
UOMName = config.uomName;
|
||||||
@ -116,8 +116,8 @@ $(document).ready(function () {
|
|||||||
},
|
},
|
||||||
{ data: 'itemNo' },
|
{ data: 'itemNo' },
|
||||||
{ data: 'itemName' },
|
{ data: 'itemName' },
|
||||||
|
{ data: 'itemDescription' },
|
||||||
{ data: 'itemCategoryName' },
|
{ data: 'itemCategoryName' },
|
||||||
{ data: 'prTypeId' },
|
|
||||||
{ data: 'qty' },
|
{ data: 'qty' },
|
||||||
{
|
{
|
||||||
data: null,
|
data: null,
|
||||||
@ -139,22 +139,11 @@ $(document).ready(function () {
|
|||||||
var cartItemCount = data.cartItemCount;
|
var cartItemCount = data.cartItemCount;
|
||||||
var itemCount = parseInt(cartItemCount, 10);
|
var itemCount = parseInt(cartItemCount, 10);
|
||||||
|
|
||||||
var prTypeIdCell = $('td:eq(4)', row);
|
|
||||||
var PRTypeId = prTypeIdCell.text();
|
|
||||||
var PRTypeIdNumer = parseInt(PRTypeId, 10);
|
|
||||||
|
|
||||||
if (!isNaN(itemCount)) {
|
if (!isNaN(itemCount)) {
|
||||||
$('#cartCount').text(itemCount);
|
$('#cartCount').text(itemCount);
|
||||||
} else {
|
} else {
|
||||||
$('#cartCount').text('0');
|
$('#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']],
|
order: [[0, 'desc']],
|
||||||
@ -59,9 +59,11 @@ async function fetchAndPopulatePOFormData(poType, poId = null) {
|
|||||||
$('#deliverTo').val(d.header.deliverTo || '');
|
$('#deliverTo').val(d.header.deliverTo || '');
|
||||||
|
|
||||||
$('#piNo').val(d.header.profInvoiceNo || '');
|
$('#piNo').val(d.header.profInvoiceNo || '');
|
||||||
|
$('#countryOrigin').val(d.header.countryOrigin || '');
|
||||||
$('#currencyCER').val(d.header.currencyCER || '59.00');
|
$('#currencyCER').val(d.header.currencyCER || '59.00');
|
||||||
$('#podId').val(d.header.podId || 0);
|
$('#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);
|
$('#discount').val(d.header.discount || 0);
|
||||||
|
|
||||||
$('#C-paymentTerms').val(d.header.paymentTerms || '');
|
$('#C-paymentTerms').val(d.header.paymentTerms || '');
|
||||||
@ -98,9 +100,13 @@ async function fetchAndPopulatePOFormData(poType, poId = null) {
|
|||||||
'<td style="display: none;">' + charge.otherChargesId + '</td>' +
|
'<td style="display: none;">' + charge.otherChargesId + '</td>' +
|
||||||
'<td>' + charge.otherChargesName + '</td>' +
|
'<td>' + charge.otherChargesName + '</td>' +
|
||||||
'<td>' + charge.amount + '</td>' +
|
'<td>' + charge.amount + '</td>' +
|
||||||
'<td><button class="btn btn-default" onclick="removeRow(this)" data-otherChargesId="' + charge.otherChargesId + '">' +
|
'<td>' +
|
||||||
'<i class="fa-solid fa-trash fa-xl" style="color: #ff0000;" aria-hidden="true"></i>' +
|
'<button class="btn btn-default btn-trash-sm" ' +
|
||||||
'</button></td>' +
|
'onclick="removeRow(this)" ' +
|
||||||
|
'data-otherChargesId="' + charge.otherChargesId + '">' +
|
||||||
|
'<i class="fa-regular fa-trash-can" style="color: #ff0000;" aria-hidden="true"></i>' +
|
||||||
|
'</button>' +
|
||||||
|
'</td>' +
|
||||||
'</tr>';
|
'</tr>';
|
||||||
$tbody.append(newRow);
|
$tbody.append(newRow);
|
||||||
});
|
});
|
||||||
@ -24,8 +24,8 @@
|
|||||||
function renderDelItem(data, row) {
|
function renderDelItem(data, row) {
|
||||||
var jsonData = JSON.stringify(row).replace(/"/g, """);
|
var jsonData = JSON.stringify(row).replace(/"/g, """);
|
||||||
var buttonsHtml = '';
|
var buttonsHtml = '';
|
||||||
buttonsHtml += '<button onclick="removeRowMain(' + jsonData + ')" class="btn btn-default">' +
|
buttonsHtml += '<button onclick="removeRowMain(' + jsonData + ')" class="btn btn-default btn-trash-sm">' +
|
||||||
'<i class="fa-solid fa-trash fa-xl" style="color: #ff0000;" aria-hidden="true"></i>' +
|
'<i class="fa-regular fa-trash-can" style="color: #ff0000;" aria-hidden="true"></i>' +
|
||||||
'</button > ';
|
'</button > ';
|
||||||
return buttonsHtml;
|
return buttonsHtml;
|
||||||
}
|
}
|
||||||
@ -237,6 +237,7 @@ function postPutCustomPO() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let Discount = $('#discount').val();
|
let Discount = $('#discount').val();
|
||||||
|
|
||||||
showConfirmation({
|
showConfirmation({
|
||||||
title: 'Create Purchase Order',
|
title: 'Create Purchase Order',
|
||||||
message: 'Are you sure you want to create this PO? This action cannot be undone.',
|
message: 'Are you sure you want to create this PO? This action cannot be undone.',
|
||||||
@ -249,7 +250,7 @@ function postPutCustomPO() {
|
|||||||
url: endpoint.PostPutCustomPO,
|
url: endpoint.PostPutCustomPO,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: {
|
data: {
|
||||||
DocRequiredList, OtherChargesList, PRItemList,
|
DocRequiredList, OtherChargesList, PRItemList, CountryOrigin,
|
||||||
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
|
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
|
||||||
ShippingInstructionId, PodId, PaymentTermsId,
|
ShippingInstructionId, PodId, PaymentTermsId,
|
||||||
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo
|
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo
|
||||||
@ -290,7 +291,8 @@ function updateExistingPO() {
|
|||||||
}
|
}
|
||||||
let Discount = $('#discount').val();
|
let Discount = $('#discount').val();
|
||||||
let IsUpdate = true;
|
let IsUpdate = true;
|
||||||
|
console.log('Discount', Discount);
|
||||||
|
console.log('countryOrigin', CountryOrigin);
|
||||||
showConfirmation({
|
showConfirmation({
|
||||||
title: 'Update Purchase Order',
|
title: 'Update Purchase Order',
|
||||||
message: 'Are you sure you want to update this PO? This action cannot be undone.',
|
message: 'Are you sure you want to update this PO? This action cannot be undone.',
|
||||||
@ -303,7 +305,7 @@ function updateExistingPO() {
|
|||||||
url: endpoint.PostPutCustomPO,
|
url: endpoint.PostPutCustomPO,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: {
|
data: {
|
||||||
DocRequiredList, OtherChargesList, PRItemList,
|
DocRequiredList, OtherChargesList, PRItemList, CountryOrigin,
|
||||||
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
|
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
|
||||||
ShippingInstructionId, PodId, PaymentTermsId,
|
ShippingInstructionId, PodId, PaymentTermsId,
|
||||||
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo, IsUpdate
|
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo, IsUpdate
|
||||||
@ -136,6 +136,7 @@ function viewPOFormImport(data, isModal) {
|
|||||||
|
|
||||||
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
||||||
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
||||||
|
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
|
||||||
|
|
||||||
tableElement = $('#ImportPODataTable');
|
tableElement = $('#ImportPODataTable');
|
||||||
if (isModal == 1) {
|
if (isModal == 1) {
|
||||||
@ -443,7 +444,7 @@ function viewManualImport(data) {
|
|||||||
|
|
||||||
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
||||||
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
||||||
|
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
|
||||||
tableElement = $('#ImportPODataTable');
|
tableElement = $('#ImportPODataTable');
|
||||||
if (!tableElement.length) {
|
if (!tableElement.length) {
|
||||||
console.error("Table element not found");
|
console.error("Table element not found");
|
||||||
|
|||||||
@ -64,6 +64,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function populatePOModificationForm(id) {
|
async function populatePOModificationForm(id) {
|
||||||
if (!id) {
|
if (!id) {
|
||||||
console.warn("No PO Type selected.");
|
console.warn("No PO Type selected.");
|
||||||
|
|||||||
@ -137,8 +137,9 @@ function rowImportPOCallback(row, data) {
|
|||||||
document.getElementById('shippingInstruction').innerText = data.shippingInstruction;
|
document.getElementById('shippingInstruction').innerText = data.shippingInstruction;
|
||||||
document.getElementById('profInvoiceNo').innerText = data.profInvoiceNo;
|
document.getElementById('profInvoiceNo').innerText = data.profInvoiceNo;
|
||||||
|
|
||||||
//document.getElementById('poNo-C-2ndPage').innerText = data.poNo;
|
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
|
||||||
//document.getElementById('supplier-C-2ndPage').innerText = data.supplierName;
|
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
|
||||||
|
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
|
||||||
|
|
||||||
document.getElementById('preparedBy').innerText = data.purchaseBy;
|
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 {
|
table.dataTable tbody td {
|
||||||
border-bottom: 1px solid rgba(0, 150, 136, 0.08) !important;
|
border-bottom: 1px solid rgba(0, 150, 136, 0.08) !important;
|
||||||
padding: 12px !important;
|
padding: 6px !important;
|
||||||
font-size: 13.5px;
|
line-height: 1 !important;
|
||||||
|
font-size: 12px;
|
||||||
color: #2d2d2d;
|
color: #2d2d2d;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
@ -84,7 +85,6 @@ table.dataTable thead th {
|
|||||||
border-right: 1px solid rgba(255,255,255,0.12) !important;
|
border-right: 1px solid rgba(255,255,255,0.12) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sort icons */
|
|
||||||
table.dataTable thead th.sorting::before,
|
table.dataTable thead th.sorting::before,
|
||||||
table.dataTable thead th.sorting::after,
|
table.dataTable thead th.sorting::after,
|
||||||
table.dataTable thead th.sorting_asc::before,
|
table.dataTable thead th.sorting_asc::before,
|
||||||
@ -93,7 +93,6 @@ table.dataTable thead th {
|
|||||||
opacity: 1 !important;
|
opacity: 1 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove default border between header cells */
|
|
||||||
table.dataTable thead th:not(:last-child) {
|
table.dataTable thead th:not(:last-child) {
|
||||||
border-right: 1px solid rgba(255,255,255,0.15) !important;
|
border-right: 1px solid rgba(255,255,255,0.15) !important;
|
||||||
}
|
}
|
||||||
@ -111,9 +110,9 @@ table.dataTable thead th {
|
|||||||
.form-floating .bi-question-circle {
|
.form-floating .bi-question-circle {
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
color: #6c757d;
|
color: #6c757d;
|
||||||
z-index: 9999 !important; /* higher than modal */
|
z-index: 9999 !important;
|
||||||
font-size: 0.9rem; /* make it cleaner */
|
font-size: 0.9rem;
|
||||||
opacity: 1 !important; /* ensure visible */
|
opacity: 1 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-floating .bi-question-circle:hover {
|
.form-floating .bi-question-circle:hover {
|
||||||
Loading…
Reference in New Issue
Block a user