Enhanced Shipping instructions and Custom PO for import

This commit is contained in:
rowell_m_soriano 2026-05-20 16:50:48 +08:00
parent 5c6fc08bf3
commit f2aee9645d
47 changed files with 4499 additions and 1751 deletions

View File

@ -26,44 +26,36 @@ namespace CPRNIMS.Domain.Services.Account
}
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
from ur in userRoles.DefaultIfEmpty()
join role in _dbContext.Roles on ur.RoleId equals role.Id into roles
from r in roles.DefaultIfEmpty()
join attachment in _dbContext.Attachments on user.Id equals attachment.AttachmentId into attachments
from a in attachments.DefaultIfEmpty()
select new
{
user.Id,
Role = r != null ? r.Name ?? "N/A" : "N/A",
URL = a != null ? a.URL ?? "N/A" : "N/A",
FileName = a != null ? a.FileName ?? "N/A" : "N/A",
user.Company,
user.DepartmentId,
user.UserName,
user.FullName,
user.Email,
user.EmailConfirmed,
Address = user.Address ?? "N/A",
PhoneNumber = user.PhoneNumber ?? "N/A",
user.LockoutEnd,
user.LockoutEnabled,
user.CreatedBy,
user.UpdatedBy,
user.CreatedDate,
user.UpdatedDate
}).ToListAsync();
var usersWithRolesAndAttachments = await (from user in _userManager.Users
join userRole in _dbContext.IdentityUserRoles on user.Id equals userRole.UserId into userRoles
from ur in userRoles.DefaultIfEmpty()
join role in _dbContext.Roles on ur.RoleId equals role.Id into roles
from r in roles.DefaultIfEmpty()
join attachment in _dbContext.Attachments on user.Id equals attachment.AttachmentId into attachments
from a in attachments.DefaultIfEmpty()
select new
{
user.Id,
Role = r != null ? r.Name ?? "N/A" : "N/A",
URL = a != null ? a.URL ?? "404userImage" : "404userImage",
FileName = a != null ? a.FileName ?? "404userImage.jpg" : "404userImage.jpg",
user.Company,
user.DepartmentId,
user.UserName,
user.FullName,
user.Email,
user.EmailConfirmed,
Address = user.Address ?? "N/A",
PhoneNumber = user.PhoneNumber ?? "N/A",
user.LockoutEnd,
user.LockoutEnabled,
user.CreatedBy,
user.UpdatedBy,
user.CreatedDate,
user.UpdatedDate
}).ToListAsync();
return usersWithRolesAndAttachments.Cast<object>().ToList();
}
catch (Exception ex)
{
ex.ToString();
throw;
}
return usersWithRolesAndAttachments.Cast<object>().ToList();
}
public async Task AssignUserRole(RegisterModel registerModel)
{

View File

@ -1,6 +1,5 @@
using CPRNIMS.Domain.Contracts.Items;
using CPRNIMS.Infrastructure.Database;
using CPRNIMS.Infrastructure.Dto.Canvass;
using CPRNIMS.Infrastructure.Dto.Items;
using CPRNIMS.Infrastructure.Entities.Account;
using CPRNIMS.Infrastructure.Entities.Items;

View File

@ -2,7 +2,6 @@
using CPRNIMS.Infrastructure.Database;
using CPRNIMS.Infrastructure.Dto.Canvass.Response;
using CPRNIMS.Infrastructure.Dto.PO;
using CPRNIMS.Infrastructure.Dto.PR;
using CPRNIMS.Infrastructure.Entities.Canvass;
using CPRNIMS.Infrastructure.Entities.Common;
using CPRNIMS.Infrastructure.Entities.LocalDb.NonInvent;
@ -494,7 +493,7 @@ namespace CPRNIMS.Domain.Services.PO
await _dbContext.Database
.ExecuteSqlRawAsync("EXEC PostPutCustomPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
$"@PODId,@ProfInvoiceNo,@ProfInvoiceDate,@PaymentTermsId,@ShippingInstructionId,@SupplierId,@DeliveryDate,@Discount,@Amount," +
$"@UnitPrice,@Quantity,@DeliverTo, @MessCode OUTPUT, @Message OUTPUT",
$"@UnitPrice,@Quantity,@DeliverTo,@CountryOrigin, @MessCode OUTPUT, @Message OUTPUT",
new SqlParameter("@UserId", pODto.UserId),
new SqlParameter("@POTypeId", pODto.POTypeId),
new SqlParameter("@PONumber", formattedPONumber),
@ -516,6 +515,7 @@ namespace CPRNIMS.Domain.Services.PO
new SqlParameter("@UnitPrice", pODto.UnitPrice),
new SqlParameter("@Quantity", pODto.Quantity),
new SqlParameter("@DeliverTo", pODto.DeliverTo),
new SqlParameter("@CountryOrigin", pODto.CountryOrigin ?? "N/A"),
messCode,
message);
@ -544,7 +544,7 @@ namespace CPRNIMS.Domain.Services.PO
await _dbContext.Database
.ExecuteSqlRawAsync("EXEC PutExistingPO @UserId,@POTypeId,@PONumber,@PRDetailsId,@Specification,@PRNo,@PORemarks,@IncoTermsId," +
$"@PODId,@ProfInvoiceNo,@ProfInvoiceDate,@PaymentTermsId,@ShippingInstructionId,@SupplierId,@DeliveryDate,@Discount,@Amount," +
$"@UnitPrice,@Quantity,@DeliverTo,@IsRemoved, @MessCode OUTPUT, @Message OUTPUT",
$"@UnitPrice,@Quantity,@DeliverTo,@IsRemoved,@CountryOrigin, @MessCode OUTPUT, @Message OUTPUT",
new SqlParameter("@UserId", pODto.UserId),
new SqlParameter("@POTypeId", pODto.POTypeId),
new SqlParameter("@PONumber", pODto.PONo),
@ -567,6 +567,7 @@ namespace CPRNIMS.Domain.Services.PO
new SqlParameter("@Quantity", pODto.Quantity),
new SqlParameter("@DeliverTo", pODto.DeliverTo),
new SqlParameter("@IsRemoved", isRemoved),
new SqlParameter("@CountryOrigin", pODto.CountryOrigin ?? "N/A"),
messCode,
message);
@ -633,7 +634,8 @@ namespace CPRNIMS.Domain.Services.PO
DeliveryDate = PODto.DeliveryDate,
DeliverTo = PODto.DeliverTo ?? "N/A",
Specification = specification,
IsUpdate = PODto.IsUpdate
IsUpdate = PODto.IsUpdate,
CountryOrigin=PODto.CountryOrigin
};
}
public async Task<DocRequired> PostSuppDocRequirements(PODto poDto)

View File

@ -115,5 +115,6 @@ namespace CPRNIMS.Infrastructure.Dto.PO
public DateTime From { get; set; }
public string? OtherChargesName { get; set; }
public string? IncotermsName { get; set; }
public string? CountryOrigin { get; set; }
}
}

View File

@ -18,13 +18,10 @@ namespace CPRNIMS.Infrastructure.Entities.Items
public string? UserId { get; set; }
public string? ItemName { get; set; }
public string? ItemCategoryName { get; set; }
public byte PRTypeId { get; set; }
public string? ItemDescription { get; set; }
public decimal Qty { get; set; }
public int CartItemCount { get; set; }
public int UOMId { get; set; }
public int ItemColorId { get; set; }
public short ItemCategoryId { get; set; }
public byte PackagingTypeId { get; set; }
public long ItemAttachId { get; set; }
public string? CreatedBy { get; set; }
public DateTime CreatedDate { get; set; }

View File

@ -21,7 +21,6 @@ namespace CPRNIMS.Infrastructure.Entities.PO
public string? ItemName { get; set; }
public string? ItemDescription { get; set; }
public string? UOMName { get; set; }
public bool IsActive { get; set; }
public long ItemNo { get; set; }
public decimal Qty { get; set; }
public string? Remarks { get; set; }
@ -44,12 +43,13 @@ namespace CPRNIMS.Infrastructure.Entities.PO
public DateTime ProfInvoiceDate { get; set; }
public string? PortOfDischarge { get; set; }
public string? PaymentTerms { get; set; }
public string? ShippingInstruction { get; set; }
public byte ShippingInstructionId { get; set; }
public string? DeliverTo { get; set; }
public string? IncoTerms { get; set; }
public string? ProfInvoiceNo { get; set; }
public string? DocRequirements { get; set; }
public string? AmountInWords { get; set; }
public decimal Amount { get; set; }
public string? CountryOrigin { get; set; }
}
}

View File

@ -30,9 +30,11 @@ namespace CPRNIMS.Infrastructure.Entities.PO
public string? UserId { get; set; }
public byte Status { get; set; }
public byte PaymentTermsId { get; set; }
public byte ShippingInstructionId { get; set; }
public byte PODId { get; set; }
public byte POTypeId { get; set; }
public byte IncoTermsId { get; set; }
public string? IncotermsName { get; set; }
public string? CountryOrigin { get; set; }
}
}

View File

@ -140,6 +140,7 @@ namespace CPRNIMS.Infrastructure.ViewModel.PO
public string? Password { get; set; }
public string? Server { get; set; }
public string? AggreQty { get; set; }
public string? CountryOrigin { get; set; }
public DocRequirementList? DocRequiredList { get; set; }
public POChargesList? OtherChargesList { get; set; }
public PRItemList? PRItemList { get; set; }

View File

@ -4,7 +4,6 @@ using CPRNIMS.Domain.Services.Account;
using CPRNIMS.Infrastructure.Dto.Account;
using CPRNIMS.Infrastructure.Entities.Account;
using CPRNIMS.Infrastructure.Entities.Common;
using CPRNIMS.Infrastructure.Helper;
using CPRNIMS.Infrastructure.Models;
using CPRNIMS.Infrastructure.Models.Account;
using CPRNIMS.Infrastructure.Models.Common;
@ -19,7 +18,7 @@ using System.Security.Claims;
namespace CPRNIMS.WebApi.Controllers.Account
{
[Security.AuthorizeRoles("Account")]
[AuthorizeRoles("Account")]
public class AccountController : Base.BaseController
{
private readonly ErrorMessageService _errorMessageService;
@ -150,189 +149,147 @@ namespace CPRNIMS.WebApi.Controllers.Account
[HttpGet("GetUserById/{userId}")]
public async Task<IActionResult> GetUserProfileById(string userId)
{
try
var userWithUrl = await _userManager.Users
.Include(u => u.Attachment)
.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
.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 NotFound();
}
return Ok(userWithUrl);
}
[HttpGet("GetAllUser")]
public async Task<IActionResult> GetAllUsers()
{
try
var usersWithUrl = await _userClaimsManager.GetAllUsersProfile();
if (usersWithUrl == null)
{
var usersWithUrl = await _userClaimsManager.GetAllUsersProfile();
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 NotFound();
}
return Ok(usersWithUrl);
}
[HttpPost("GetUserRolesClaims")]
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
.Include(u => u.Department) // Include the Department
.SingleOrDefaultAsync(u => u.UserName == model.Username.ToLower());
var userRoles = await _userManager.GetRolesAsync(user);
if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
{
var userRoles = await _userManager.GetRolesAsync(user);
var roleDetails = await _roleManager.Roles
.Where(r => userRoles.Contains(r.Name))
.Select(r => new { r.Id, r.Name })
.ToListAsync();
// Fetch the full role details from the Roles table
var roleDetails = await _roleManager.Roles
.Where(r => userRoles.Contains(r.Name))
.Select(r => new { r.Id, r.Name })
.ToListAsync();
var myClaims = await _userManager.GetClaimsAsync(user);
var authClaims = new List<Claim>
var myClaims = await _userManager.GetClaimsAsync(user);
var authClaims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName),
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,
UserRoles = roleDetails.Select(r => new UserRoleData
{
RoleId = r.Id,
RoleName = r.Name
}).ToList(),
OtherClaims = myClaims.Select(claim => new UserClaimData
{
issuer = claim.Issuer,
originalIssuer = claim.OriginalIssuer,
properties = claim.Properties.ToDictionary(p => p.Key, p => p.Value),
subject = claim.Subject?.Name,
type = claim.Type,
value = claim.Value,
valueType = claim.ValueType,
company = user.Company,
FullName=user.FullName,
Department = user.Department?.Department,
}).ToList()
};
RoleId = r.Id,
RoleName = r.Name
}).ToList(),
OtherClaims = myClaims.Select(claim => new UserClaimData
{
issuer = claim.Issuer,
originalIssuer = claim.OriginalIssuer,
properties = claim.Properties.ToDictionary(p => p.Key, p => p.Value),
subject = claim.Subject?.Name,
type = claim.Type,
value = claim.Value,
valueType = claim.ValueType,
company = user.Company,
FullName = user.FullName,
Department = user.Department?.Department,
}).ToList()
};
return Ok(response);
}
return Unauthorized();
}
catch (Exception ex)
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
await PostErrorMessage(message + "GetUserRolesClaims", "WebApi");
throw;
return Ok(response);
}
return Unauthorized();
}
[HttpPost("GetTClaim")]
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);
try
{
var authClaims = new List<Claim>
var authClaims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
};
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)
foreach (var userRole in userRoles)
{
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;
authClaims.Add(new Claim(ClaimTypes.Role, userRole));
}
}
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)
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
await PostErrorMessage(message, "WebApi");
throw;
}
return Unauthorized();
}
[HttpPost("register")]
@ -405,123 +362,73 @@ namespace CPRNIMS.WebApi.Controllers.Account
[HttpPost("GetDepartment")]
public async Task<IActionResult> GetDepartment()
{
try
{
var user = await _department.GetDepartment();
var user = await _department.GetDepartment();
if (user != null)
{
return Ok(user);
}
else
{
return NotFound();
}
}
catch (Exception ex)
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
await PostErrorMessage(message, "WebApi");
throw;
}
if (user != null)
return Ok(user);
else
return NotFound();
}
[HttpPost("GetUserRights")]
public async Task<IActionResult> GetUserRights(AccountDto accountDto)
{
try
{
var user = await _account.GetUserRights(accountDto);
var user = await _account.GetUserRights(accountDto);
if (user != null)
{
return Ok(user);
}
else
{
return NotFound();
}
}
catch (Exception ex)
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
await PostErrorMessage(message, "WebApi");
throw;
}
if (user != null)
return Ok(user);
else
return NotFound();
}
[HttpPost("PutPostUserAccess")]
public async Task<IActionResult> PutPostUserAccess([FromBody] UserRightsVM viewModel)
{
try
var itemDto = new AccountDto();
if (viewModel.UserRightsList != null)
{
var itemDto = new AccountDto();
if (viewModel.UserRightsList != null)
foreach (var itemList in viewModel.UserRightsList.ContAccId)
{
foreach (var itemList in viewModel.UserRightsList.ContAccId)
var index = viewModel.UserRightsList.ContAccId.IndexOf(itemList);
itemDto = new AccountDto
{
var index = viewModel.UserRightsList.ContAccId.IndexOf(itemList);
itemDto = new AccountDto
{
ContAccId = viewModel.UserRightsList.ContAccId[index],
UserAccessId = viewModel.UserRightsList.UserAccessId[index],
AccessTypeId = viewModel.UserRightsList.AccessTypeId[index],
IsActive = viewModel.UserRightsList.IsActive[index],
AdminUserId = viewModel.AdminUserId,
UserId = viewModel.UserId
};
await _account.PutPostUserAccess(itemDto);
}
return Ok(itemDto);
ContAccId = viewModel.UserRightsList.ContAccId[index],
UserAccessId = viewModel.UserRightsList.UserAccessId[index],
AccessTypeId = viewModel.UserRightsList.AccessTypeId[index],
IsActive = viewModel.UserRightsList.IsActive[index],
AdminUserId = viewModel.AdminUserId,
UserId = viewModel.UserId
};
await _account.PutPostUserAccess(itemDto);
}
return BadRequest(new { success = false, messCode = 0, message = "Your email has not yet been configured. Please go to the SMTP page." });
}
catch (Exception ex)
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
await PostErrorMessage(message + "PutPostUserAccess", "WebApi");
throw;
return Ok(itemDto);
}
return BadRequest(new { success = false, messCode = 0, message = "Your email has not yet been configured. Please go to the SMTP page." });
}
[HttpPost("CreateUpdateRole")]
public async Task<IActionResult> CreateUpdateRole([FromBody] UserRoleModel model)
{
try
var existingRole = await _roleManager.FindByIdAsync(model.Id);
if (existingRole != null)
{
/* IdentityRole userRole = new()
{
Id=model.Id,
Name = model.Name,
};*/
// Check if a role with the given ID exists
var existingRole = await _roleManager.FindByIdAsync(model.Id);
if (existingRole != null)
existingRole.Name = model.Name; // Update the role name
var result = await _roleManager.UpdateAsync(existingRole);
if (!result.Succeeded)
{
existingRole.Name = model.Name; // Update the role name
var result = await _roleManager.UpdateAsync(existingRole);
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!" });
string errorMessage = result.Errors.FirstOrDefault()?.Description;
return StatusCode(StatusCodes.Status500InternalServerError, new ResponseObject { statusResponse = "Error", message = errorMessage });
}
else
{
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!" });
return Ok(new ResponseObject { statusResponse = "Success", message = "Role updated successfully!" });
}
catch (Exception ex)
else
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
await PostErrorMessage(message, "WebApi");
throw;
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!" });
}
}
}

View File

@ -63,7 +63,7 @@ namespace CPRNIMS.WebApi.Controllers.Account
return Ok(new
{
token,
expiresAt= DateTime.UtcNow.AddMinutes(30),
expiresAt= DateTime.UtcNow.AddHours(2),
userId = user.Id,
userName = user.UserName,
fullName = user.FullName,

View File

@ -11,11 +11,14 @@ namespace CPRNIMS.WebApps.Controllers.Account
{
private readonly IAccount _account;
List<UserRightsVM>? response;
private readonly IConfiguration _configuration;
public AccountController(IWebHostEnvironment webHostEnvironment,
IAccount account,ErrorLogHelper errorMessageService,TokenHelper tokenHelper
IAccount account,ErrorLogHelper errorMessageService,TokenHelper tokenHelper,
IConfiguration configuration
) : base(errorMessageService, webHostEnvironment,tokenHelper, account)
{
_account = account;
_configuration = configuration;
}
#region Change Password
public async Task<IActionResult> SendOTPByEmail(EmailMessageDetailsVM model)
@ -200,17 +203,9 @@ namespace CPRNIMS.WebApps.Controllers.Account
}
public async Task<IActionResult> GetAllUsers()
{
try
{
var userResponse = await _account.GetAllUserAsync(GetUser());
return Json(new { data = userResponse });
}
catch (Exception ex)
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
return Json(new { data = "No Data" }); // Return empty array instead of "No Data" string
}
var userResponse = await _account.GetAllUserAsync(GetUser());
userResponse[0].URL = _configuration["LLI:BaseUrl"] ?? "https://llipurchasingnoninventory.com:8080/";
return GetResponse(userResponse);
}
public async Task<IActionResult> GetDepartment()
{
@ -242,19 +237,11 @@ namespace CPRNIMS.WebApps.Controllers.Account
return Json(new { data = "No Data" });
}
}
public async Task<IActionResult> GetUserRights(UserRightsVM viewModels)
[HttpGet]
public async Task<IActionResult> GetUserRights(UserRightsVM viewModel)
{
try
{
response = await _account.GetUserRights(GetUser(), viewModels);
return GetResponse(response);
}
catch (Exception ex)
{
var message = ex.InnerException?.ToString() ?? ex.Message.ToString();
return Json(new { data = "No Data" });
}
response = await _account.GetUserRights(GetUser(), viewModel);
return GetResponse(response);
}
#endregion
#region Views

View File

@ -12,7 +12,11 @@ namespace CPRNIMS.WebApps.ViewComponents.POMgmt
1 => "~/Views/Components/POMgmt/ShippingInstructions/Air.cshtml",
2 => "~/Views/Components/POMgmt/ShippingInstructions/Courier.cshtml",
3 => "~/Views/Components/POMgmt/ShippingInstructions/SeaFCL.cshtml",
_ => "~/Views/Components/POMgmt/ShippingInstructions/SeaLCL.cshtml"
4 => "~/Views/Components/POMgmt/ShippingInstructions/SeaLCL.cshtml",
5 => "~/Views/Components/POMgmt/ShippingInstructions/RawMatAir.cshtml",
6 => "~/Views/Components/POMgmt/ShippingInstructions/RawMatCourier.cshtml",
7 => "~/Views/Components/POMgmt/ShippingInstructions/RawMatSeaFCL.cshtml",
_ => "~/Views/Components/POMgmt/ShippingInstructions/RawMatSeaLCL.cshtml"
};
// Render the selected view

File diff suppressed because it is too large Load Diff

View File

@ -7,16 +7,11 @@
</div>
</div>
<div class="col-3">
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
<label for="discount">Discount</label>
<div style="flex: 1; display: flex; align-items: center;">
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
onclick="AddDiscount()"></i>
</div>
<div class="form-group">
<label class="lbl">Discount</label>
<input type="number" id="discount" name="discount"
class="form-control" placeholder="0.00" step="0.01" min="0">
</div>
<textarea id="discount" readonly disabled
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
</div>
<div class="col-6">

View File

@ -1,218 +1,675 @@
<div class="row">
<div class="col-6">
<div class="row">
<div class="col-6">
<div class="form-group">
<label for="deliveryDate">Est. Delivery Date</label>
<input type="date" id="deliveryDate" class="form-control">
</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>
<style>
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
<div class="col-3">
<div class="form-group">
<label for="grossAmountUSD">Gross (USD) Amount</label>
<input readonly name="grossAmountUSD" id="grossAmountUSD" class="form-control" style="margin-bottom:5px;">
</div>
</div>
<div class="col-3">
<div class="form-group">
<label for="finalAmountUSD">Final (USD) Amount</label>
<input readonly name="finalAmountUSD" id="finalAmountUSD" class="form-control" style="margin-bottom:5px;">
</div>
body {
font-family: 'Inter',sans-serif;
font-size: var(--fs);
line-height: var(--lh);
color: var(--text);
background: #e8eeee;
}
/* Header */
.po-header {
background: linear-gradient(135deg,#01696f 0%,#0a9ea6 100%);
border-radius: var(--radius-lg) var(--radius-lg) 0 0;
padding: 10px 16px;
text-align: center;
color: #fff;
}
.po-header h5 {
font-size: 15px;
font-weight: 700;
letter-spacing: .01em;
margin: 0;
}
/* Card */
.po-card {
background: var(--surface);
border: 1px solid var(--teal-border);
border-top: none;
border-radius: 0 0 var(--radius-lg) var(--radius-lg);
box-shadow: var(--shadow);
padding: 10px 14px 8px;
}
/* Meta row */
.meta-row {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-bottom: 8px;
}
.meta-field {
display: flex;
flex-direction: column;
gap: 2px;
}
.meta-field.po-no {
flex: 0 0 120px;
}
.meta-field.final-po {
flex: 0 0 120px;
}
.meta-field.po-type {
flex: 0 0 150px;
}
.meta-field.supplier {
flex: 1 1 200px;
}
/* Import zone */
.import-zone {
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 8px 10px 6px;
margin-bottom: 8px;
}
.import-grid {
display: grid;
gap: 6px 8px;
}
.g-row-1 {
grid-template-columns: repeat(6,1fr);
}
.g-row-2 {
display: flex;
gap: 8px;
margin-top: 4px;
}
/* Left col */
.terms-col {
display: flex;
flex-direction: column;
gap: 5px;
flex: 1 1 0;
}
.terms-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 6px;
}
/* Right panel */
.right-panel {
display: flex;
flex-direction: column;
gap: 6px;
flex: 0 0 660px;
min-width: 0;
}
.amounts-row {
display: grid;
grid-template-columns: repeat(4,1fr);
gap: 5px;
}
/* Labels */
label.lbl {
font-size: 10px;
font-weight: 600;
color: var(--muted);
letter-spacing: .03em;
text-transform: uppercase;
display: flex;
align-items: center;
gap: 3px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-bottom: 2px;
}
label.lbl i {
font-size: .85rem;
color: var(--teal);
flex-shrink: 0;
}
/* Form controls */
.fc {
width: 100%;
height: 30px;
padding: 0 8px;
border: 1px solid var(--teal-border);
border-radius: var(--radius);
background: var(--surface);
font-size: var(--fs);
color: var(--text);
transition: border-color var(--transition),box-shadow var(--transition);
}
.fc:focus {
outline: none;
border-color: var(--teal);
box-shadow: 0 0 0 2px rgba(1,105,111,0.14);
}
.fc[readonly], .fc:disabled {
background: var(--surface-2);
color: var(--muted);
cursor: default;
}
select.fc {
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%235a7476'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 7px center;
padding-right: 20px;
}
textarea.fc {
height: auto;
resize: vertical;
padding-top: 4px;
padding-bottom: 4px;
line-height: var(--lh);
}
/* Currency pair */
.cur-pair {
display: flex;
height: 28px;
border: 1px solid var(--teal-border);
border-radius: var(--radius);
overflow: hidden;
background: var(--surface);
transition: border-color var(--transition),box-shadow var(--transition);
}
.cur-pair:focus-within {
border-color: var(--teal);
box-shadow: 0 0 0 2px rgba(1,105,111,0.14);
}
.cur-badge {
background: rgba(1,105,111,0.10);
color: var(--teal);
font-weight: 700;
font-size: 10px;
padding: 0 7px;
display: flex;
align-items: center;
border-right: 1px solid var(--teal-border);
white-space: nowrap;
letter-spacing: .04em;
}
.cur-pair .fc {
border: none;
border-radius: 0;
background: transparent;
box-shadow: none;
flex: 1;
min-width: 0;
padding-left: 6px;
}
.cur-pair .fc:focus {
box-shadow: none;
}
/* Amount boxes */
.amt-box {
background: var(--teal-bg);
border: 1px solid var(--teal-border);
border-radius: var(--radius);
padding: 2px 7px;
display: flex;
flex-direction: column;
justify-content: center;
min-height: 28px;
}
.amt-box.php {
background: var(--green-bg);
border-color: rgba(67,122,34,0.22);
}
.amt-box .albl {
font-size: 9px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .04em;
color: var(--muted);
line-height: 1;
}
.amt-box input {
border: none;
background: transparent;
font-size: 11px;
font-weight: 700;
color: var(--teal);
font-family: inherit;
outline: none;
padding: 0;
width: 100%;
height: auto;
}
.amt-box.php input {
color: var(--green);
}
/* ── Discount — simple single input ── */
#discount {
width: 100%;
height: 32px;
padding: 0 10px;
border: 1px solid var(--teal-border);
border-radius: var(--radius);
background: var(--surface);
font-size: var(--fs);
color: var(--text);
font-family: inherit;
transition: border-color var(--transition), box-shadow var(--transition);
display: block; /* override old display:none */
}
#discount:focus {
outline: none;
border-color: var(--teal);
box-shadow: 0 0 0 2px rgba(1,105,111,0.14);
}
/* Charges table */
.charges-wrap {
border: 1px solid var(--teal-border);
border-radius: var(--radius);
overflow: hidden;
flex: 1;
}
.charges-header {
background: linear-gradient(90deg,var(--teal) 0%,#0a9ea6 100%);
color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
padding: 3px 8px;
}
.charges-header span {
font-size: 10.5px;
font-weight: 700;
letter-spacing: .04em;
text-transform: uppercase;
}
.charges-header .btn-add-charge {
background: rgba(255,255,255,0.15);
border: none;
cursor: pointer;
color: #fff;
border-radius: 4px;
padding: 1px 5px;
font-size: .85rem;
display: flex;
align-items: center;
gap: 3px;
transition: background var(--transition);
}
.charges-header .btn-add-charge:hover {
background: rgba(255,255,255,0.30);
}
.charges-header .btn-add-charge span {
font-size: 10px;
font-weight: 600;
}
.charges-table-wrap {
overflow-y: auto;
max-height: 108px;
}
/* Icon add */
.icon-add {
color: var(--teal);
font-size: .9rem;
cursor: pointer;
transition: color var(--transition),transform var(--transition);
vertical-align: middle;
}
.icon-add:hover {
color: var(--teal-hover);
transform: scale(1.2);
}
/* DataTable */
.dt-wrapper {
background: var(--surface);
/* border: 1px solid var(--teal-border); */
/* border-radius: var(--radius-lg); */
box-shadow: var(--shadow);
/* padding: 8px 12px 10px; */
}
/* Reduce row height */
#DestChargesTable td,
#DestChargesTable th {
padding: 2px 6px; /* top/bottom left/right */
line-height: 1.1;
font-size: 12px; /* optional */
vertical-align: middle;
}
/* Optional: make DataTables wrapper compact too */
#DestChargesTable tbody tr {
height: 22px;
}
.dt-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 6px;
flex-wrap: wrap;
gap: 6px;
}
.dt-controls {
display: flex;
align-items: center;
gap: 8px;
font-size: var(--fs);
color: var(--muted);
}
.dt-controls select, .dt-controls input {
height: 24px;
font-size: 11px;
padding: 0 6px;
border: 1px solid var(--border);
border-radius: var(--radius);
color: var(--text);
}
/* table.dt-table {
width: 100%;
border-collapse: collapse;
font-size: var(--fs);
}
table.dt-table thead tr {
background: linear-gradient(90deg,var(--teal) 0%,#0a9ea6 100%);
color: #fff;
}
table.dt-table th {
padding: 5px 8px;
font-size: 10.5px;
font-weight: 600;
letter-spacing: .02em;
white-space: nowrap;
}
table.dt-table th .sort-arrows {
display: inline-flex;
flex-direction: column;
margin-left: 3px;
opacity: .7;
}
table.dt-table th .sort-arrows svg {
width: 7px;
height: 5px;
fill: currentColor;
}
table.dt-table td {
padding: 5px 8px;
border-bottom: 1px solid rgba(0,0,0,0.05);
}
table.dt-table .no-rec {
text-align: center;
color: var(--faint);
font-style: italic;
padding: 16px;
} */
.dt-footer {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 6px;
flex-wrap: wrap;
gap: 4px;
}
.dt-info {
font-size: 11px;
color: var(--muted);
}
.dt-pager {
display: flex;
gap: 4px;
align-items: center;
}
/* .dt-pager button, .btn-cancel {
background: none;
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 2px 10px;
font-size: 11px;
color: var(--muted);
cursor: pointer;
transition: border-color var(--transition),color var(--transition);
}
.dt-pager button:hover, .btn-cancel:hover {
border-color: var(--teal);
color: var(--teal);
}
*/
.btn-submit {
background: var(--teal);
color: #fff;
border: none;
border-radius: var(--radius);
padding: 4px 14px;
font-size: var(--fs);
font-weight: 600;
cursor: pointer;
transition: background var(--transition);
}
.btn-submit:hover {
background: var(--teal-hover);
}
</style>
<!-- Import Dynamic Component -->
<div class="import-zone">
<!-- Row 1: Dates + PI + Currency + Country -->
<div class="import-grid g-row-1" style="margin-bottom:5px;">
<div>
<label class="lbl">Est. Delivery Date</label>
<input type="date" id="deliveryDate" class="fc">
</div>
<div>
<label class="lbl">Prof. Inv. Date</label>
<input type="date" id="piDate" class="fc">
</div>
<div>
<label class="lbl">Prof. Inv. No.</label>
<input type="text" id="piNo" class="fc" placeholder="PI-XXXX">
</div>
<div>
<label class="lbl">Country of Origin</label>
<input id="countryOrigin" name="countryOrigin" class="fc" placeholder="INDIA">
</div>
<div>
<label class="lbl">Currency / CER</label>
<div class="cur-pair">
<span class="cur-badge">USD</span>
<input type="hidden" id="currency" value="USD" />
<input type="number" id="currencyCER" name="currencyCER" value="59.00" class="fc" step="0.01">
</div>
</div>
<div>
<label class="lbl">Discount</label>
<input type="number" id="discount" name="discount"
class="fc" placeholder="0.00" step="0.01" min="0">
</div>
</div>
<div class="col-6">
<div class="row">
<div class="col-3">
<div class="form-group">
<label for="podId">Port Of Discharge</label>
<select class="form-control" name="podId" id="podId"
style="margin-bottom:5px;">
<option disabled>-Select Discharge Port-</option>
<option value="1">MANILA PORT</option>
<option value="2">NORTH SEA PORT</option>
<option value="3">SOUTH SEA PORT</option>
<option value="4">MANILA PORT PHILS</option>
<option value="5">OTHERS</option>
<option value="6">MANILA PHILIPPINES</option>
<option value="7">N/A</option>
</select>
</div>
</div>
<div class="col-3">
<div class="form-group">
<label for="C-paymentTerms">Payment Terms</label>
<input type="search" name="C-paymentTerms" id="C-paymentTerms" class="form-control" style="margin-bottom:5px;">
<!-- Row 2: Left terms | Right charges+amounts -->
<div class="g-row-2">
<!-- Left column -->
<div class="terms-col">
<!-- Payment Terms + Incoterms -->
<div class="terms-row">
<div>
<label class="lbl">Payment Terms</label>
<input type="search" name="C-paymentTerms" id="C-paymentTerms" class="fc" placeholder="Search...">
<input type="hidden" id="C-paymentTermsId" name="C-paymentTermsId" />
</div>
</div>
<div class="col-3">
<div class="form-group">
<label for="docRequiredId">Incoterms</label>
<i class="bx bxs-message-rounded-add" style="color: green; font-size: 1rem; cursor: pointer;"
onclick="viewIncoterms()"></i>
<input type="search" name="incotermsName" id="incotermsName" class="form-control" style="margin-bottom:5px;">
<div>
<label class="lbl">Incoterms <i class="bx bxs-message-rounded-add icon-add" onclick="viewIncoterms()" title="Add"></i></label>
<input type="search" name="incotermsName" id="incotermsName" class="fc" placeholder="Search...">
<input type="hidden" id="incoTermsId" name="incoTermsId" />
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label for="shippingInstructionId">Shipping Instrctn.</label>
<select class="form-control" name="shippingInstructionId" id="shippingInstructionId"
style="margin-bottom:5px;">
<option disabled>-Select Shipping Instruction-</option>
<option value="1">AIR</option>
<option value="2">COURIER</option>
<option value="3">SEA FCL</option>
<option value="4">SEA LCL</option>
<option value="5">N/A</option>
<option value="4">OTHERS</option>
</div>
</div>
<!-- Port + Shipping -->
<div class="terms-row">
<div>
<label class="lbl">Port of Discharge</label>
<select class="fc" name="podId" id="podId">
<option disabled selected>— Select —</option>
<option value="1">Manila Port</option>
<option value="2">North Sea Port</option>
<option value="3">South Sea Port</option>
<option value="4">Manila Port PHILS</option>
<option value="5">Others</option>
<option value="6">Manila Philippines</option>
<option value="7">N/A</option>
</select>
</div>
<div>
<label class="lbl">Shipping Instruction</label>
<select class="fc" name="shippingInstructionId" id="shippingInstructionId">
<option disabled selected>— Select —</option>
<option value="1">General AIR</option>
<option value="2">General COURIER</option>
<option value="3">General SEA FCL</option>
<option value="4">General SEA LCL</option>
<option value="5">RawMat AIR</option>
<option value="6">RawMat COURIER</option>
<option value="7">RawMat SEA FCL</option>
<option value="8">RawMat SEA LCL</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-6">
<div class="row">
<div class="col-6">
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
<label for="discount">Discount</label>
<div style="flex: 1; display: flex; align-items: center;">
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
onclick="AddDiscount()"></i>
</div>
</div>
<textarea id="discount" readonly disabled
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
</div>
<div class="col-3">
<div class="form-group">
<label for="grossAmountPHP">Gross (PHP) Amount</label>
<input readonly name="grossAmountPHP" id="grossAmountPHP" class="form-control" style="margin-bottom:5px;">
</div>
</div>
<div class="col-3">
<div class="form-group">
<label for="finalAmountPHP">Final (PHP) Amount</label>
<input readonly name="finalAmountPHP" id="finalAmountPHP" class="form-control" style="margin-bottom:5px;">
</div>
</div>
</div>
</div>
<div class="col-6" style="margin-top:-15px;">
<div class="form-group">
<div class="row">
<div class="col-6">
<label for="docRequiredId">Docs Required</label>
<i class="bx bxs-message-rounded-add" style="color: green; font-size: 1rem; cursor: pointer;"
onclick="viewDocRequired()"></i>
<textarea readonly id="docRequiredId" class="form-control"
style="width: 100%; height: 150px;margin-bottom:10px;"></textarea>
</div>
<div class="col-6">
<label for="remarks">Remarks</label>
<textarea id="remarks" class="form-control"
style="width: 100%; height: 150px;margin-bottom:10px;"></textarea>
</div>
</div>
</div>
</div>
@await Html.PartialAsync("PagesView/PO/_OtherCharges")
</div>
<!-- Modal Incoterms-->
<div class="modal fade custom-modal-backdrop" id="viewIncoterms"
tabindex="-1" aria-labelledby="IncotermsLabel" data-bs-backdrop="static">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 id="IncotermsLabel" class="modal-title">
Incoterms List
</h3>
</div>
<div class="modal-body">
<button type="button" class="btn btn-success"
id="chooseItem" onclick="viewIncotermsModal(0,{})">
Add new
</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>
<!-- Docs + Remarks -->
<div class="terms-row" style="flex:1;">
<div style="display:flex;flex-direction:column;">
<label class="lbl">Docs Required <i class="bx bxs-message-rounded-add icon-add" onclick="viewDocRequired()" title="Add"></i></label>
<textarea readonly id="docRequiredId" class="fc" placeholder="Docs will appear here..." style="flex:1;resize:none;height:80px;"></textarea>
</div>
<div style="display:flex;flex-direction:column;">
<label class="lbl">Remarks</label>
<textarea id="remarks" class="fc" placeholder="Special instructions…" style="flex:1;resize:none;height:80px;"></textarea>
</div>
</div>
</div>
</div>
</div>
<!-- Modal viewIncotermsModal-->
<div class="modal fade custom-modal-backdrop" id="viewIncotermsModal" tabindex="-1"
aria-labelledby="incotermsLabel"
data-bs-backdrop="static">
<div class="modal-dialog" role="document" data-bs-backdrop="static">
<div class="modal-content">
<div class="modal-header">
<h5 id="incotermsHeader" class="modal-title">
</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label for="update-incotermsName">Incoterms Name</label>
<input id="update-incotermsName" class="form-control" style="margin-top:10px" placeholder="input here..." />
</div><!-- /terms-col -->
<!-- Right column -->
<div class="right-panel">
<!-- List of Charges -->
<div style="display:flex;flex-direction:column;flex:1;">
<div class="charges-wrap" style="display:flex;flex-direction:column;flex:1;">
<div class="charges-header">
<span>List of Charges</span>
<button class="btn-add-charge" onclick="viewCharges()">
<i class="bx bxs-message-rounded-add"></i>
<span>Add</span>
</button>
</div>
<div class="charges-table-wrap" style="flex:1;">
<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>
<input hidden id="update-incotermsId" />
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Back</button>
<button type="button" id="btnPostPutIncoterms" onclick="postPutIncoterms()" class="btn btn-success">Submit</button>
<!-- Amounts 2×2 -->
<div class="amounts-row">
<div>
<label class="lbl">Gross (USD)</label>
<div class="amt-box">
<span class="albl">USD Gross</span>
<input readonly name="grossAmountUSD" id="grossAmountUSD" placeholder="—">
</div>
</div>
<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>
@await Html.PartialAsync("PagesView/PO/_DocRequired")
<input hidden id="dr-ImportPoNo" />
<input hidden id="si-ImportPoNo" />
</div><!-- /right-panel -->
</div><!-- /g-row-2 -->
</div><!-- /import-zone -->
<!-- Hidden inputs -->
<input hidden id="dr-ImportPoNo" />
<input hidden id="si-ImportPoNo" />
@await Html.PartialAsync("PagesView/PO/_DocRequired")

View File

@ -7,16 +7,13 @@
</div>
</div>
<div class="col-3">
<div class="form-group" style="display: flex; align-items: center; gap: 10px;">
<label for="discount">Discount</label>
<div style="flex: 1; display: flex; align-items: center;">
<input id="discountAmount" type="number" class="form-control" style="flex: 1; margin-right: 10px;">
<i class="bx bxs-plus-circle" style="color: green; font-size: 1.5rem; cursor: pointer;"
onclick="AddDiscount()"></i>
<div>
<div class="form-group">
<label class="lbl">Discount</label>
<input type="number" id="discount" name="discount"
class="form-control" placeholder="0.00" step="0.01" min="0">
</div>
</div>
<textarea id="discount" readonly disabled
style="width: 100%; height: 45px; margin-top: 10px;"></textarea>
</div>
<div class="col-6">

View File

@ -1,125 +1,191 @@
<style>
body {
font-family: Arial, sans-serif;
}
.container-Form {
max-width: 1000px;
margin: 0 auto;
}
.header {
text-align: right;
margin-bottom: 20px;
}
.header p {
margin: 0;
}
.supplier {
margin-bottom: 20px;
}
.instructions {
margin-bottom: 20px;
}
.instructions p {
margin: 0;
margin-bottom: 5px;
 <title>Shipping Instructions Annex A</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 13px;
color: #000;
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;
}
.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;
.title {
text-align: center;
margin-top: 10px;
font-weight: bold;
font-size: 18px;
margin-bottom: 25px;
}
</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 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 &nbsp;&nbsp;&nbsp; MOBILE NUMBER: +63922-899-6318</p>
<p>CONTACT PERSON: TERESA MANIO</p>
</div>
<div class="instructions">
<p>7.) ONLY ATTACH THE AIRWAY BILL (AWB) AND MSDS WITH THE SHIPMENT.</p>
<p>8.) ARRIVAL OF SHIPMENT MUST BE FROM MONDAY TO WEDNESDAY PREFERABLY.</p>
<p>9.) LOAD THE GOODS WITH ANY OF THE FOLLOWING PREFERRED AIRLINES:</p>
</div>
<div class="preferred-airlines">
<ul>
<li>a.) BR - Eva Air</li>
<li>b.) CI - China Airlines</li>
<li>c.) CZ - China Southern Airlines</li>
<li>d.) CX - Cathay Pacific</li>
<li>e.) JL - Japan Airlines</li>
<li>f.) LH - Lufthansa German Airlines</li>
<li>g.) NW - Northwest Orient</li>
<li>h.) NX - Air Macau</li>
<li>i.) QF - Quantas Airways</li>
<li>j.) SQ - Singapore Airlines</li>
<li>k.) TG - Thai Airways</li>
<li>l.) EK - Emirates Air</li>
<li>m.) KE - Korean Airlines</li>
<li>n.) GF - Gulf Air</li>
<li>o.) EY - Ethad Airways</li>
</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>
.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>
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>

View File

@ -1,91 +1,164 @@
<body>
<div class="instructions">
<p>SHIPPING INSTRUCTIONS:</p>
<p>1.) IN COMPLIANCE WITH FDA GMP PIC/S STANDARD FOR ALL MANUFACTURING COMPANY, CONTAINERS OF ACTIVE PHARMACEUTICAL INGREDIENTS (API), AS WELL AS EXCIPIENTS SHOULD BEAR IN THE LABEL THE FOLLOWING INFORMATION:</p>
<ul>
<li>*NAME OF MANUFACTURER WITH COMPLETE ADDRESS AND CONTACT NUMBERS</li>
<li>*PRODUCT NAME</li>
<li>*GROSS WEIGHT/NET WEIGHT</li>
<li>*MANUFACTURING DATE</li>
<li>*EXPIRATION DATE</li>
<li>*BATCH/LOT NO</li>
<li>*STORAGE REQUIREMENT</li>
</ul>
<p>2.) CERTIFICATE OF ANALYSIS SHOULD BE IN COMPANY'S LETTERHEAD (MANUFACTURER) WITH COMPLETE ADDRESS AND CONTACT NUMBER, SPECIFICATIONS WITH RESULTS, STATEMENT OF CONFORMANCE, REFERENCE OFFICIAL MONOGRAPH, SIGNATURE OF THE ANALYST AND APPROVING AUTHORITY.</p>
<p>3.) THE MANUFACTURING AND EXPIRATION DATE OF THE MATERIAL SHOULD BE MORE THAN 3 YEARS BUT NOT LESS THAN 1 YEAR.</p>
<p>4.) GOODS TO BE DELIVERED SHOULD COME FROM ONE (1) BATCH ONLY.</p>
<p>5.) KINDLY FURNISH IN ADVANCE, COPY OF THE SHIPPING DOCUMENTS FOR CHECKING AND APPROVAL PRIOR TO DESPATCH.</p>
<p>6.) ORIGINAL COPIES OF THE SHIPPING DOCUMENTS (INVOICE, PACKING LIST AND COA) SHOULD BE COURIERED/SENT TO:</p>
</div>
<div class="shipping-address">
<p>LLOYD LABORATORIES, INC. WITH ADDRESS AT #73 SCOUT FERNANDEZ ST., BRGY. LAGING HANDA, QUEZON CITY 1103, PHILIPPINES.</p>
<p>TEL NO: +632-372-3984 TO 89 LOCAL 103 &nbsp;&nbsp;&nbsp; MOBILE NUMBER: +63922-899-6318</p>
<p>CONTACT PERSON: TERESA MANIO</p>
</div>
<p><em>*NON-COMPLIANCE TO INSTRUCTIONS WOULD MEAN NON-ACCEPTANCE OF DELIVERIES.</em></p>
<div class="conforme">
<p>Conforme:</p>
<span>Supplier</span>
</div>

<title>Shipping Instructions Annex A Courier</title>
<style>
body {
font-family: Arial, sans-serif;
}
.container-Form {
max-width: 1000px;
margin: 0 auto;
}
.header {
text-align: right;
margin-bottom: 20px;
}
.header p {
margin: 0;
}
.supplier {
margin-bottom: 20px;
}
.instructions {
margin-bottom: 20px;
}
.instructions p {
margin: 0;
margin-bottom: 5px;
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;
font-size: 13px;
color: #000;
line-height: 1.5;
}
.conforme {
margin-top: 40px;
.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;
}
.conforme span {
display: inline-block;
width: 200px;
border-top: 1px solid black;
text-align: center;
margin-top: 10px;
margin-bottom: 20px;
}
</style>
</body>
<div class="field-row">
<span class="field-label">Mode of Shipment:</span>
<span>Air</span>
</div>
<div class="section-title">Shipping Instructions</div>
<ol>
<li>
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
</li>
<li>
Original copies of the shipping documents such as Invoice, Packing List, and applicable trade or origin documents should be couriered/sent to:
</li>
</ol>
<div class="company-address">
<strong>LLOYD LABORATORIES, INC.</strong><br />
#73 Scout Fernandez St., Brgy. Laging Handa, Quezon City 1103, Philippines<br />
Tel. No.: +632-372-3984 to 89 local 103<br />
Mobile No.: +63 946 900 8240<br />
Contact Person: Ms. Marilou Pangilinan
</div>
<div class="section-title">Trade and Shipping Documents</div>
<p>Please provide the following documents, as applicable:</p>
<ul>
<li>Commercial Invoice</li>
<li>Packing List</li>
<li>Product brochures</li>
<li>Product Manuals</li>
<li>Insurance Certificate, if applicable</li>
<li>Airway Bill (AWB)</li>
<li>Certificate of Origin / preferential trade form, depending on country of export</li>
</ul>
<div class="section-title">Preferential Trade Forms</div>
<p>
Use the applicable preferential trade form or certificate of origin depending on the country of shipment:
</p>
<ul>
<li>China: Form E / China-ASEAN Certificate of Origin</li>
<li>India: Form AI / ASEAN-India Certificate of Origin</li>
<li>Thailand: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
<li>Vietnam: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
<li>Indonesia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
<li>Malaysia: Form D / ASEAN Trade in Goods Agreement (ATIGA) Certificate of Origin</li>
<li>Other countries: Standard Certificate of Origin, if no preferential form applies</li>
</ul>
<div class="section-title">Courier Shipments</div>
<p>For courier shipments:</p>
<ul>
<li>Attach only the Airway Bill (AWB) and MSDS with the shipment.</li>
</ul>
<div class="section-title">Non-Compliance</div>
<p class="non-compliance">
Non-compliance with these instructions would mean non-acceptance of deliveries.
</p>
<div class="signature-section">
<div class="signature-row">
<strong>Conforme</strong>
</div>
<div class="signature-row">
<span class="field-label">Supplier:</span>
<span class="line" style="min-width: 400px;"></span>
</div>
<div class="signature-row">
<span class="field-label">Authorized Signature:</span>
<span class="line" style="min-width: 340px;"></span>
</div>
<div class="signature-row">
<span class="field-label">Date:</span>
<span class="line" style="min-width: 220px;"></span>
</div>
</div>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 &amp; 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>

View File

@ -1,109 +1,188 @@
<style>
body {
font-family: Arial, sans-serif;
}
.container-Form {
max-width: 1000px;
margin: 0 auto;
}
.header {
text-align: right;
margin-bottom: 20px;
}
.header p {
margin: 0;
}
.supplier {
margin-bottom: 20px;
}
.instructions {
margin-bottom: 20px;
}
.instructions p {
margin: 0;
margin-bottom: 5px;
 <title>Shipping Instructions Annex A General 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;
}
.instructions ul {
list-style: none;
.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>
.instructions ul li {
margin-bottom: 10px;
}
<div class="field-row">
<span class="field-label">Mode of Shipment:</span>
<span>FCL</span>
</div>
.shipping-address {
margin-bottom: 20px;
line-height: 1.5;
}
<div class="section-title">Shipping Instructions</div>
.conforme {
margin-top: 40px;
margin-bottom: 20px;
}
<ol>
<li>
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
</li>
<li>
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
</li>
</ol>
.conforme span {
display: inline-block;
width: 200px;
border-top: 1px solid black;
text-align: center;
margin-top: 10px;
}
</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 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="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 &nbsp;&nbsp;&nbsp; MOBILE NUMBER: +63922-899-6318</p>
<p>CONTACT PERSON: TERESA MANIO</p>
<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>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 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>

View File

@ -1,101 +1,175 @@
<style>
body {
font-family: Arial, sans-serif;
}
.container-Form {
max-width: 1000px;
margin: 0 auto;
}
.header {
text-align: right;
margin-bottom: 20px;
}
.header p {
margin: 0;
}
.supplier {
margin-bottom: 20px;
}
.instructions {
margin-bottom: 20px;
}
.instructions p {
margin: 0;
margin-bottom: 5px;
 <title>Shipping Instructions Annex A LCL</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 13px;
color: #000;
line-height: 1.5;
}
.instructions ul {
list-style: none;
.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>
.instructions ul li {
margin-bottom: 10px;
}
<div class="field-row">
<span class="field-label">Mode of Shipment:</span>
<span>LCL</span>
</div>
.shipping-address {
margin-bottom: 20px;
line-height: 1.5;
}
<div class="section-title">Shipping Instructions</div>
.conforme {
margin-top: 40px;
margin-bottom: 20px;
}
<ol>
<li>
Kindly furnish in advance a copy of the shipping documents for checking and approval prior to dispatch.
</li>
<li>
Original copies of the shipping documents such as Invoice, Packing List, Certificate of Analysis, and applicable trade or origin documents should be couriered/sent to:
</li>
</ol>
.conforme span {
display: inline-block;
width: 200px;
border-top: 1px solid black;
text-align: center;
margin-top: 10px;
}
</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 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="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 &nbsp;&nbsp;&nbsp; MOBILE NUMBER: +63922-899-6318</p>
<p>CONTACT PERSON: TERESA MANIO</p>
<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>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 &amp; 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 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>

View File

@ -22,8 +22,8 @@
</th>
<th>ItemNo</th>
<th>ItemName</th>
<th>Description</th>
<th>CategoryName</th>
<th>PRTypeId</th>
<th>Qty</th>
<th>Action</th>
</tr>
@ -139,5 +139,5 @@
</div>
<link href="~/css/item/cartv2.css" rel="stylesheet" />
@await Html.PartialAsync("PagesView/Item/_Scripts")
<script src="~/JsFunctions/Items/ItemCartV4.js"></script>
<script src="~/JsFunctions/Items/ItemCartV5.js"></script>
</body>

View File

@ -1,52 +1,80 @@
<body>
<div class="container-fluid">
<div class="row table-container shadow-lg p-2 mb-3 bg-white rounded">
<div class="header-container">
<div class="header-container" style="margin-bottom:10px">
<h2 id="customPOHeading">Custom P.O. Creation</h2>
</div>
<div class="row">
<div class="row" style="margin-bottom:10px">
<!-- Left side (half of the row) -->
<div class="col-6">
<div class="row">
<div class="col-4">
<div class="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>
<div class="col-12 mb-2">
<div class="row align-items-end">
<!-- Right side (half of the row) -->
<div class="col-6">
<div class="form-group">
<label for="supplierName">Supplier</label>
<input type="search" id="supplierName" class="form-control mb-2" name="supplierName" />
<input type="hidden" id="supplierId" class="form-control" name="supplierId" />
<!-- PO No -->
<div class="col-md-2">
<div class="form-group">
<label for="poNo">
PO No.
<i class="bx bx-pencil"
style="color: orange; font-size: 1.2rem; cursor: pointer;"
onclick="enablePONoAutocomplete()"></i>
</label>
<input type="search" readonly id="poNo" class="form-control">
<input type="hidden"
id="poId"
class="form-control"
name="poId" />
</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>
<br />
@ -55,7 +83,7 @@
</div>
<div class="table-container shadow-lg p-3 mb-3 bg-white rounded">
<button type="button" class="btn btn-success"
<button type="button" class="btn-choose"
id="chooseItem" onclick="viewPRWOCanvass()">
Choose Item
</button>
@ -94,16 +122,17 @@
</div>
</div>
</div>
<!-- Modal OtherCharges-->
<div class="modal fade custom-modal-backdrop" id="addCharges"
tabindex="-1" aria-labelledby="addChargesLabel" data-bs-backdrop="static">
<div class="modal-dialog modal-xl" role="document">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 id="addChargesLabel" class="modal-title">
Other Charges List
</h3>
</div>
</div>
<div class="modal-body">
<button type="button" class="btn btn-success"
id="chooseItem" onclick="viewOtherChargesModal(0,'n/a')">
@ -113,7 +142,7 @@
<br />
<table id="SourceChargesTable" class="row-border" style="width: 100%;">
<colgroup>
<col style="width:10%"/>
<col style="width:10%" />
<col style="width:65%" />
<col style="width:15%" />
<col style="width:10%" />
@ -124,7 +153,7 @@
All
<input id="selectAllCheckboxItem" type="checkbox" class="selectAllCheckboxItem" />
</th>
<th >Charges</th>
<th>Charges</th>
<th style="text-align:center;width:15%;">Amount</th>
<th>Action</th>
</tr>
@ -165,9 +194,10 @@
</div>
</div>
</div>
<input hidden id="poTypeId"/>
<link href="~/css/po/CustomPOV2.css" rel="stylesheet" />
<script src="~/JsFunctions/PO/CustomPOV8.js"></script>
<link href="~/css/po/CustomPOV3.css" rel="stylesheet" />
<script src="~/JsFunctions/PO/CustomPOV9.js"></script>
@await Html.PartialAsync("PagesView/PR/_PRWOCanvass")
@await Html.PartialAsync("PagesView/PO/_POScripts")
</body>
</body>

View File

@ -235,18 +235,29 @@
</div>
<div class="second-page">
<div class="container-Form">
<div class="header">
<p>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 class="header">
<p class="title">Shipping Instructions Annex A</p>
</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 -->
<button id="toggleShippingInstructions" class="btn btn-secondary" onclick="toggleShippingInstructions()">Hide Shipping Instructions</button>
<div id="shippingInstructionsContainer">
</div>
</div>
</div>
@ -305,10 +316,15 @@
<select class="form-control" name="shippingInstructionId" id="shippingInstructionId"
style="margin-bottom:5px;">
<option disabled>-Select Shipping Instruction-</option>
<option value="1">AIR</option>
<option value="2">COURIER</option>
<option value="3">SEA FCL</option>
<option value="4">SEA LCL</option>
<option disabled selected>— Select —</option>
<option value="1">General AIR</option>
<option value="2">General COURIER</option>
<option value="3">General SEA FCL</option>
<option value="4">General SEA LCL</option>
<option value="5">RawMat AIR</option>
<option value="6">RawMat COURIER</option>
<option value="7">RawMat SEA FCL</option>
<option value="8">RawMat SEA LCL</option>
</select>
</div>
<div class="form-group">

View File

@ -11,11 +11,11 @@
<script src="~/jsfunctions/common/termsV2.js"></script>
<script src="~/jsfunctions/common/ColumnCommonV2.js"></script>
<script src="~/jsfunctions/common/genericcrud.js"></script>
<script src="~/jsfunctions/common/ParamConfigV2.js"></script>
<script src="~/jsfunctions/common/PostPutV2.js"></script>
<script src="~/jsfunctions/common/ParamConfigV3.js"></script>
<script src="~/jsfunctions/common/PostPutV3.js"></script>
<script src="~/jsfunctions/common/PRWOCanvassV2.js"></script>
<script src="~/jsfunctions/po/POButtonV9.js"></script>
<script src="~/jsfunctions/po/POButton.js"></script>
<script src="~/jsfunctions/po/PrintingV2.js"></script>
<script src="~/JsFunctions/PO/POColumn.js"></script>
<script src="~/jsfunctions/po/ApiV5.js"></script>
@ -23,8 +23,8 @@
<script src="~/jsfunctions/po/POVarV6.js"></script>
<script src="~/jsfunctions/po/POViewV5.js"></script>
<script src="~/jsfunctions/po/PopulateDopdownV4.js"></script>
<script src="~/jsfunctions/po/POPutPostV4.js"></script>
<script src="~/jsfunctions/po/rowCallBackV5.js"></script>
<script src="~/jsfunctions/po/POPutPostV5.js"></script>
<script src="~/jsfunctions/po/rowCallBackV6.js"></script>
<script src="~/jsfunctions/utilities/NewStyle.js"></script>
<script src="~/jsfunctions/utilities/utilsV3.js"></script>

View File

@ -3,7 +3,7 @@
<title>@ViewData["Title"] - LLI Purchasing Non-Inventory System</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/sideBarStyleV2.css" />
<link rel="stylesheet" href="~/css/siteV7.css" asp-append-version="true" />
<link rel="stylesheet" href="~/css/siteV8.css" asp-append-version="true" />
<link rel="stylesheet" href="~/css/spinner.css" />
<link href="~/lib/font-awesome/css/all.css" rel="stylesheet" />
<link href="~/lib/font-awesome/css/all.min.css" rel="stylesheet" />

View File

@ -6,7 +6,7 @@
<script src="~/js/sidebar.js"></script>
<script src="~/Datatables/DataTables-1.13.6/js/jquery.dataTables.min.js"></script>
<script src="~/datatables/responsive-2.5.0/js/datatables.responsive.min.js"></script>
<script src="~/jsfunctions/account/sessionTimeoutV3.js"></script>
<script src="~/jsfunctions/account/sessionTimeoutV4.js"></script>
<script src="~/lib/jquery-ui-1132custom/jquery-ui.min.js"></script>
<!-- DataTables Buttons and Export JS -->

View File

@ -52,24 +52,7 @@ var colOnColDef = [
visible: false,
}
];
var colAccountDetail = [
{
data: 'userAccessId',
render: function () {
return '<input type="checkbox" class="select-Access-checkbox" />';
}
},
{ data: 'accessType' },
{ data: 'pageName' },
{ data: 'isActive' },
{
data: null,
render: function (data, type, row) {
return renderAccessDetailbtn(data, row);
}
},
{ data: 'contAccId', visible: false },
];
var colAccountDetailNot = [
{
data: 'userAccessId',

View File

@ -1,55 +1,52 @@
function postPutAccessRights(IsNotExist) {
loader = $('#overlay, #loader').css('z-index', 1070);
var selectedCheckboxes = IsNotExist ? $('.select-NotAccess-checkbox:checked') :
$('.select-Access-checkbox:checked');
var dynamicTable = IsNotExist ? notAccessDataTable : accessDataTable;
var userRightsList = [];
selectedCheckboxes.each(function () {
var $row = $(this).closest('tr');
var rowIndex = dynamicTable.row($row).index();
var rowData = dynamicTable.row(rowIndex).data();
var userAccessId = IsNotExist ? 13 : rowData.userAccessId;
var contAccId = rowData.contAccId;
var accessTypeId = rowData.accessTypeId;
var isActive = rowData.isActive;
var itemData = {
UserAccessId: userAccessId,
ContAccId: contAccId,
AccessTypeId: accessTypeId,
IsActive: isActive,
};
userRightsList.push(itemData);
});
if (selectedCheckboxes.length <= 0) {
alert('No selected item!');
const selectedItems = Object.values(selectedProductsMap);
if (selectedItems.length === 0) {
showToast('warning', 'Please select items for access first!', 'User access failed', 4000);
return;
}
const confirmation = confirm('Are you sure you want to proceed?');
if (confirmation) {
$.ajax({
url: '/Account/PutPostUserAccess',
type: 'POST',
data: { userRightsList, IsNotExist, UserId },
success: function (response) {
if (response.success) {
$('#viewItemList').modal('hide');
notAccessDataTable.ajax.reload();
accessDataTable.ajax.reload();
alert('Pages Successfully Added!');
} else {
alert('Failed: ' + response.response);
notAccessDataTable.ajax.reload();
accessDataTable.ajax.reload();
const userRightsList = selectedItems.map(item => {
return {
UserAccessId: item.userAccessId,
ContAccId: item.contAccId,
AccessTypeId: item.accessTypeId,
IsActive: true,
};
});
console.log(userRightsList);
showConfirmation({
title: 'User Access Rights',
message: 'Are you sure you want to proceed? This action cannot be undone.',
type: 'warning',
confirmText: 'Yes',
cancelText: 'No'
}).then((confirmed) => {
if (confirmed) {
$.ajax({
url: '/Account/PutPostUserAccess',
type: 'POST',
data: { userRightsList, IsNotExist, UserId },
success: function (response) {
if (response.success) {
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();
}
});
}
});
}
});
}

View File

@ -1,31 +1,31 @@
//navigate the picture
document.addEventListener("DOMContentLoaded", function () {
var profilePictureImage = document.getElementById("profilePictureImage");
var profilePictureInput = document.getElementById("profilePictureInput");
//document.addEventListener("DOMContentLoaded", function () {
// var profilePictureImage = document.getElementById("profilePictureImage");
// var profilePictureInput = document.getElementById("profilePictureInput");
// Set a default image source for the profile picture
profilePictureImage.src = "/Content/Images/404userImage.jpg";
// // Set a default image source for the profile picture
// profilePictureImage.src = "wwwroot/Content/Images/404userImage.jpg";
// Add a click event listener to the profile picture to trigger the file input
profilePictureImage.addEventListener("click", function () {
profilePictureInput.click();
});
// // Add a click event listener to the profile picture to trigger the file input
// profilePictureImage.addEventListener("click", function () {
// profilePictureInput.click();
// });
// Add a change event listener to the file input
profilePictureInput.addEventListener("change", function () {
var ProfilePicture = profilePictureInput.files[0];
// // Add a change event listener to the file input
// profilePictureInput.addEventListener("change", function () {
// var ProfilePicture = profilePictureInput.files[0];
if (ProfilePicture) {
// Display the selected image
var imageURL = URL.createObjectURL(ProfilePicture);
profilePictureImage.src = imageURL;
} else {
// No file selected, revert to the default image
console.log("No file selected, using default image");
profilePictureImage.src = "/Content/Images/404userImage.jpg";
}
});
});
// if (ProfilePicture) {
// // Display the selected image
// var imageURL = URL.createObjectURL(ProfilePicture);
// profilePictureImage.src = imageURL;
// } else {
// // No file selected, revert to the default image
// console.log("No file selected, using default image");
// profilePictureImage.src = "wwwroot/Content/Images/404userImage.jpg";
// }
// });
//});
let jsonObj = {};
@ -39,134 +39,134 @@ function renderAccessDetailbtn(data, row) {
return buttonsHtml;
}
function viewUserAccessNotExist() {
loader = $('#overlay, #loader');
$('#viewUserAccessNotExist').modal('show');
$('#viewUserAccessNotExist').css('z-index', 1060);
tableElement = $('#NotAccessDataTable');
tableDestroy(tableElement);
var submitButton = $('#btnNotAccess');
var totalSelectedLabel = $('#totalSelNotAccess');
let IsNotExist = true;
notAccessDataTable = tableElement.DataTable({
ajax: $.extend({
url: '/Account/GetUserRights',
type: 'POST',
data: { UserId, IsNotExist },
}, beforeComplete(loader)),
language: {
emptyTable: "No record available"
},
initComplete: function () {
var api = this.api();
var data = api.ajax.json();
if (!data || !data.data || data.data === "No Data") {
$('.dataTables_empty').html("No record available");
}
updateSubmitBtnVisib();
updateSelectedCount();
},
columns: colAccountDetailNot,
responsive: true,
error: errorHandler
});
function updateSubmitBtnVisib() {
var isEmpty = notAccessDataTable.data().length === 0;
submitButton.toggle(!isEmpty);
}
$('#NotAccessDataTable').on('change', '.select-NotAccess-checkbox', function () {
var row = $(this).closest('tr');
if ($(this).prop('checked')) {
row.addClass('selected-row');
} else {
row.removeClass('selected-row');
}
updateSelectedCount();
});
////function viewUserAccessNotExist() {
//// loader = $('#overlay, #loader');
//// $('#viewUserAccessNotExist').modal('show');
//// $('#viewUserAccessNotExist').css('z-index', 1060);
//// tableElement = $('#NotAccessDataTable');
//// tableDestroy(tableElement);
//// var submitButton = $('#btnNotAccess');
//// var totalSelectedLabel = $('#totalSelNotAccess');
//// let IsNotExist = true;
//// notAccessDataTable = tableElement.DataTable({
//// ajax: $.extend({
//// url: '/Account/GetUserRights',
//// type: 'POST',
//// data: { UserId, IsNotExist },
//// }, beforeComplete(loader)),
//// language: {
//// emptyTable: "No record available"
//// },
//// initComplete: function () {
//// var api = this.api();
//// var data = api.ajax.json();
//// if (!data || !data.data || data.data === "No Data") {
//// $('.dataTables_empty').html("No record available");
//// }
//// updateSubmitBtnVisib();
//// updateSelectedCount();
//// },
//// columns: colAccountDetailNot,
//// responsive: true,
//// error: errorHandler
//// });
//// function updateSubmitBtnVisib() {
//// var isEmpty = notAccessDataTable.data().length === 0;
//// submitButton.toggle(!isEmpty);
//// }
//// $('#NotAccessDataTable').on('change', '.select-NotAccess-checkbox', function () {
//// var row = $(this).closest('tr');
//// if ($(this).prop('checked')) {
//// row.addClass('selected-row');
//// } else {
//// row.removeClass('selected-row');
//// }
//// updateSelectedCount();
//// });
$('#selectAllCheckboxNotAccess').on('change', function () {
var isChecked = $(this).prop('checked');
$('.select-NotAccess-checkbox').prop('checked', isChecked);
if (isChecked) {
$('#NotAccessDataTable tbody tr').addClass('selected-row');
} else {
$('#NotAccessDataTable tbody tr').removeClass('selected-row');
}
updateSelectedCount();
});
function updateSelectedCount() {
var totalSelected = $('.select-NotAccess-checkbox:checked').length;
totalSelectedLabel.text(totalSelected);
}
}
function viewUserAccess(data) {
loader = $('#overlay, #loader');
$('#viewUserAccess').modal('show');
$('#viewUserAccess').css('z-index', 1050);
tableElement = $('#AccessDataTable');
tableDestroy(tableElement);
var submitButton = $('#btnAccess');
var totalSelectedLabel = $('#totalSelAccess');
UserId = data.id;
//CanvassId = data.canvassId;
$('#ua-EmailAddress').val(data.email);
$('#ua-FullName').val(data.fullName);
$('#uan-EmailAddress').val(data.email);
$('#uan-FullName').val(data.fullName);
accessDataTable = tableElement.DataTable({
ajax: $.extend({
url: '/Account/GetUserRights',
type: 'POST',
data: { UserId },
}, beforeComplete(loader)),
language: {
emptyTable: "No record available"
},
initComplete: function () {
var api = this.api();
var data = api.ajax.json();
if (!data || !data.data || data.data === "No Data") {
$('.dataTables_empty').html("No record available");
}
updateSubmitBtnVisib();
updateSelectedCount();
},
columns: colAccountDetail,
responsive: true,
error: errorHandler
});
function updateSubmitBtnVisib() {
var isEmpty = accessDataTable.data().length === 0;
submitButton.toggle(!isEmpty);
}
$('#AccessDataTable').on('change', '.select-Access-checkbox', function () {
var row = $(this).closest('tr');
if ($(this).prop('checked')) {
row.addClass('selected-row');
} else {
row.removeClass('selected-row');
}
updateSelectedCount();
});
//// $('#selectAllCheckboxNotAccess').on('change', function () {
//// var isChecked = $(this).prop('checked');
//// $('.select-NotAccess-checkbox').prop('checked', isChecked);
//// if (isChecked) {
//// $('#NotAccessDataTable tbody tr').addClass('selected-row');
//// } else {
//// $('#NotAccessDataTable tbody tr').removeClass('selected-row');
//// }
//// updateSelectedCount();
//// });
//// function updateSelectedCount() {
//// var totalSelected = $('.select-NotAccess-checkbox:checked').length;
//// totalSelectedLabel.text(totalSelected);
//// }
////}
////function viewUserAccess(data) {
//// loader = $('#overlay, #loader');
//// $('#viewUserAccess').modal('show');
//// $('#viewUserAccess').css('z-index', 1050);
//// tableElement = $('#AccessDataTable');
//// tableDestroy(tableElement);
//// var submitButton = $('#btnAccess');
//// var totalSelectedLabel = $('#totalSelAccess');
//// UserId = data.id;
//// //CanvassId = data.canvassId;
//// $('#ua-EmailAddress').val(data.email);
//// $('#ua-FullName').val(data.fullName);
//// $('#uan-EmailAddress').val(data.email);
//// $('#uan-FullName').val(data.fullName);
//// accessDataTable = tableElement.DataTable({
//// ajax: $.extend({
//// url: '/Account/GetUserRights',
//// type: 'POST',
//// data: { UserId },
//// }, beforeComplete(loader)),
//// language: {
//// emptyTable: "No record available"
//// },
//// initComplete: function () {
//// var api = this.api();
//// var data = api.ajax.json();
//// if (!data || !data.data || data.data === "No Data") {
//// $('.dataTables_empty').html("No record available");
//// }
//// updateSubmitBtnVisib();
//// updateSelectedCount();
//// },
//// columns: colAccountDetail,
//// responsive: true,
//// error: errorHandler
//// });
//// function updateSubmitBtnVisib() {
//// var isEmpty = accessDataTable.data().length === 0;
//// submitButton.toggle(!isEmpty);
//// }
//// $('#AccessDataTable').on('change', '.select-Access-checkbox', function () {
//// var row = $(this).closest('tr');
//// if ($(this).prop('checked')) {
//// row.addClass('selected-row');
//// } else {
//// row.removeClass('selected-row');
//// }
//// updateSelectedCount();
//// });
$('#selectAllCheckboxAccess').on('change', function () {
var isChecked = $(this).prop('checked');
$('.select-Access-checkbox').prop('checked', isChecked);
if (isChecked) {
$('#AccessDataTable tbody tr').addClass('selected-row');
} else {
$('#AccessDataTable tbody tr').removeClass('selected-row');
}
updateSelectedCount();
});
function updateSelectedCount() {
var totalSelected = $('.select-Access-checkbox:checked').length;
totalSelectedLabel.text(totalSelected);
}
}
function ShowNewAccess() {
viewUserAccessNotExist();
}
//// $('#selectAllCheckboxAccess').on('change', function () {
//// var isChecked = $(this).prop('checked');
//// $('.select-Access-checkbox').prop('checked', isChecked);
//// if (isChecked) {
//// $('#AccessDataTable tbody tr').addClass('selected-row');
//// } else {
//// $('#AccessDataTable tbody tr').removeClass('selected-row');
//// }
//// updateSelectedCount();
//// });
//// function updateSelectedCount() {
//// var totalSelected = $('.select-Access-checkbox:checked').length;
//// totalSelectedLabel.text(totalSelected);
//// }
////}
////function ShowNewAccess() {
//// viewUserAccessNotExist();
////}
function showUpdateUserProfile(jsonData) {
jsonObj = jsonData;
@ -414,20 +414,7 @@ function addNewUser() {
});
}
// Use this function to populate roles
function renderUserBtns(data, row) {
var jsonData = JSON.stringify(row).replace(/"/g, "&quot;");
var buttonsHtml = '';
buttonsHtml += '<button onclick="showUpdateUserProfile(' + jsonData + ')" class="btn btn-default">' +
'<i class="fa fa-pen-to-square fa-xl" style="color: #FFA500;" aria-hidden="true"></i>' +
'</button>';
buttonsHtml += '<button onclick="viewUserAccess(' + jsonData + ')" class="btn btn-default">' +
'<i class="fa-brands fa-elementor fa-xl" style="color: #008080;" aria-hidden="true"></i>' +
'</button > ';
return buttonsHtml;
}
function populateRoles() {
$.ajax({
url: "/Account/GetRoles", // Update this with your actual controller and action
@ -456,25 +443,25 @@ function populateRoles() {
}
});
}
$(document).ready(function () {
loader = $('#overlay, #loader');
UserRights = document.getElementById("roleRights").value;
populateRoles();
userListTable = $('#UserListTable').DataTable({
ajax: $.extend({
url: '/Account/GetAllUsers',
type: 'GET',
}, beforeComplete(loader)),
initComplete: initCompleteCallback,
columns: colOnUserList,
columnDefs: colOnColDef,
language: {
emptyTable: "No record available"
},
rowCallback: rowAccountCallback,
responsive: true,
error: errorHandler
});
})
//$(document).ready(function () {
// loader = $('#overlay, #loader');
// //UserRights = document.getElementById("roleRights").value;
// populateRoles();
// userListTable = $('#UserListTable').DataTable({
// ajax: $.extend({
// url: '/Account/GetAllUsers',
// type: 'GET',
// }, beforeComplete(loader)),
// initComplete: initCompleteCallback,
// columns: colOnUserList,
// columnDefs: colOnColDef,
// language: {
// emptyTable: "No record available"
// },
// rowCallback: rowAccountCallback,
// responsive: true,
// error: errorHandler
// });
//})

View File

@ -1,6 +1,6 @@
// Configuration
const CONFIG = {
timeoutMinutes: 120, // Total session timeout
timeoutMinutes: 240, // Total session timeout
checkIntervalSeconds: 60, // How often to check (every minute)
warningMinutes: 5, // Warn THIS many minutes before timeout
logoutUrl: '/Home/Index',
@ -67,7 +67,7 @@ function showTimeoutWarning(remainingMinutes) {
updateCountdown();
countdownInterval = setInterval(updateCountdown, 1000);
console.log(`Session warning shown: ${remainingMinutes} minutes remaining`);
//console.log(`Session warning shown: ${remainingMinutes} minutes remaining`);
}
/**

View File

@ -11,6 +11,7 @@
deliverTo: '',
itemName: '',
specification: '',
countryOrigin: '',
qty: 0,
uomName: '',
uomId: 0

View File

@ -49,6 +49,7 @@ function poValidateParameters(poTypeId, method, isItem) {
profInvoiceDate: document.getElementById('piDate'),
shippingInstructionId: document.getElementById('shippingInstructionId'),
podId: document.getElementById('podId'),
countryOrigin: document.getElementById('countryOrigin'),
});
} else {
// Fields specific to other poTypeId values
@ -99,6 +100,7 @@ function clearCustomPOParam() {
paymentTermsId: 0,
supplierId: 0,
supplierName: '',
countryOrigin: '',
deliveryDate: new Date().toISOString().split('T')[0],
deliverTo: ''
};
@ -135,6 +137,7 @@ function poDTO(config) {
DeliverTo = config.deliverTo;
DeliveryDate = config.deliveryDate;
ItemName = config.itemName;
CountryOrigin = config.countryOrigin;
Specification = config.specification;
Qty = config.qty;
UOMName = config.uomName;

View File

@ -116,8 +116,8 @@ $(document).ready(function () {
},
{ data: 'itemNo' },
{ data: 'itemName' },
{ data: 'itemDescription' },
{ data: 'itemCategoryName' },
{ data: 'prTypeId' },
{ data: 'qty' },
{
data: null,
@ -139,22 +139,11 @@ $(document).ready(function () {
var cartItemCount = data.cartItemCount;
var itemCount = parseInt(cartItemCount, 10);
var prTypeIdCell = $('td:eq(4)', row);
var PRTypeId = prTypeIdCell.text();
var PRTypeIdNumer = parseInt(PRTypeId, 10);
if (!isNaN(itemCount)) {
$('#cartCount').text(itemCount);
} else {
$('#cartCount').text('0');
}
if (!isNaN(PRTypeIdNumer)) {
if (PRTypeIdNumer === 1) {
prTypeIdCell.text('Goods').addClass('next-facilitator');
} else {
prTypeIdCell.text('Service').addClass('next-facilitator');
}
}
},
order: [[0, 'desc']],

View File

@ -59,9 +59,11 @@ async function fetchAndPopulatePOFormData(poType, poId = null) {
$('#deliverTo').val(d.header.deliverTo || '');
$('#piNo').val(d.header.profInvoiceNo || '');
$('#countryOrigin').val(d.header.countryOrigin || '');
$('#currencyCER').val(d.header.currencyCER || '59.00');
$('#podId').val(d.header.podId || 0);
$('#shippingInstructionId').val(1);
console.log('shipping Instruction', d.header.shippingInstructionId);
$('#shippingInstructionId').val(d.header.shippingInstructionId);
$('#discount').val(d.header.discount || 0);
$('#C-paymentTerms').val(d.header.paymentTerms || '');
@ -98,9 +100,13 @@ async function fetchAndPopulatePOFormData(poType, poId = null) {
'<td style="display: none;">' + charge.otherChargesId + '</td>' +
'<td>' + charge.otherChargesName + '</td>' +
'<td>' + charge.amount + '</td>' +
'<td><button class="btn btn-default" onclick="removeRow(this)" data-otherChargesId="' + charge.otherChargesId + '">' +
'<i class="fa-solid fa-trash fa-xl" style="color: #ff0000;" aria-hidden="true"></i>' +
'</button></td>' +
'<td>' +
'<button class="btn btn-default btn-trash-sm" ' +
'onclick="removeRow(this)" ' +
'data-otherChargesId="' + charge.otherChargesId + '">' +
'<i class="fa-regular fa-trash-can" style="color: #ff0000;" aria-hidden="true"></i>' +
'</button>' +
'</td>' +
'</tr>';
$tbody.append(newRow);
});

View File

@ -24,8 +24,8 @@
function renderDelItem(data, row) {
var jsonData = JSON.stringify(row).replace(/"/g, "&quot;");
var buttonsHtml = '';
buttonsHtml += '<button onclick="removeRowMain(' + jsonData + ')" class="btn btn-default">' +
'<i class="fa-solid fa-trash fa-xl" style="color: #ff0000;" aria-hidden="true"></i>' +
buttonsHtml += '<button onclick="removeRowMain(' + jsonData + ')" class="btn btn-default btn-trash-sm">' +
'<i class="fa-regular fa-trash-can" style="color: #ff0000;" aria-hidden="true"></i>' +
'</button > ';
return buttonsHtml;
}

View File

@ -237,6 +237,7 @@ function postPutCustomPO() {
return false;
}
let Discount = $('#discount').val();
showConfirmation({
title: 'Create Purchase Order',
message: 'Are you sure you want to create this PO? This action cannot be undone.',
@ -249,7 +250,7 @@ function postPutCustomPO() {
url: endpoint.PostPutCustomPO,
type: 'POST',
data: {
DocRequiredList, OtherChargesList, PRItemList,
DocRequiredList, OtherChargesList, PRItemList, CountryOrigin,
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
ShippingInstructionId, PodId, PaymentTermsId,
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo
@ -290,7 +291,8 @@ function updateExistingPO() {
}
let Discount = $('#discount').val();
let IsUpdate = true;
console.log('Discount', Discount);
console.log('countryOrigin', CountryOrigin);
showConfirmation({
title: 'Update Purchase Order',
message: 'Are you sure you want to update this PO? This action cannot be undone.',
@ -303,7 +305,7 @@ function updateExistingPO() {
url: endpoint.PostPutCustomPO,
type: 'POST',
data: {
DocRequiredList, OtherChargesList, PRItemList,
DocRequiredList, OtherChargesList, PRItemList, CountryOrigin,
POTypeId, PONo, IncotermsId, ProfInvoiceNo, ProfInvoiceDate,
ShippingInstructionId, PodId, PaymentTermsId,
PoRemarks, Discount, SupplierId, DeliveryDate, DeliverTo, IsUpdate

View File

@ -136,6 +136,7 @@ function viewPOFormImport(data, isModal) {
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
tableElement = $('#ImportPODataTable');
if (isModal == 1) {
@ -443,7 +444,7 @@ function viewManualImport(data) {
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
tableElement = $('#ImportPODataTable');
if (!tableElement.length) {
console.error("Table element not found");

View File

@ -64,6 +64,7 @@
}
});
}
async function populatePOModificationForm(id) {
if (!id) {
console.warn("No PO Type selected.");

View File

@ -137,8 +137,9 @@ function rowImportPOCallback(row, data) {
document.getElementById('shippingInstruction').innerText = data.shippingInstruction;
document.getElementById('profInvoiceNo').innerText = data.profInvoiceNo;
//document.getElementById('poNo-C-2ndPage').innerText = data.poNo;
//document.getElementById('supplier-C-2ndPage').innerText = data.supplierName;
document.getElementById('poNo-C-2ndPage').innerHTML = data.poNo;
document.getElementById('supplier-C-2ndPage').innerHTML = data.supplierName;
document.getElementById('countryOrigin-C-2ndPage').innerHTML = data.countryOrigin;
document.getElementById('preparedBy').innerText = data.purchaseBy;

View File

@ -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;
}
}

View 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;
}
}

View 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);
}
}

View File

@ -63,8 +63,9 @@ table.dataTable tbody tr {
table.dataTable tbody td {
border-bottom: 1px solid rgba(0, 150, 136, 0.08) !important;
padding: 12px !important;
font-size: 13.5px;
padding: 6px !important;
line-height: 1 !important;
font-size: 12px;
color: #2d2d2d;
vertical-align: middle;
}
@ -84,7 +85,6 @@ table.dataTable thead th {
border-right: 1px solid rgba(255,255,255,0.12) !important;
}
/* Sort icons */
table.dataTable thead th.sorting::before,
table.dataTable thead th.sorting::after,
table.dataTable thead th.sorting_asc::before,
@ -93,7 +93,6 @@ table.dataTable thead th {
opacity: 1 !important;
}
/* Remove default border between header cells */
table.dataTable thead th:not(:last-child) {
border-right: 1px solid rgba(255,255,255,0.15) !important;
}
@ -111,9 +110,9 @@ table.dataTable thead th {
.form-floating .bi-question-circle {
font-size: 1.2rem;
color: #6c757d;
z-index: 9999 !important; /* higher than modal */
font-size: 0.9rem; /* make it cleaner */
opacity: 1 !important; /* ensure visible */
z-index: 9999 !important;
font-size: 0.9rem;
opacity: 1 !important;
}
.form-floating .bi-question-circle:hover {