updated scripts
This commit is contained in:
1 parent
2326f1fbbc
commit
41b55f96c1
118 files changed
+8245
-627
No files matched your search
+263
@@ -0,0 +1,263 @@
|
||||
#!/usr/bin/env bash
|
||||
# Arch LXC Secure Cleanup & Audit Script
|
||||
# Usage: sudo ./arch-cleanup.sh [--dry-run]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Safety check
|
||||
# ---------------------------------------------------------------------------
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "Error: Run this script with sudo: sudo $0 [--dry-run]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Config & User detection
|
||||
# ---------------------------------------------------------------------------
|
||||
DRY_RUN=false
|
||||
if [[ "${1:-}" == "--dry-run" ]]; then
|
||||
DRY_RUN=true
|
||||
echo ">>> DRY-RUN MODE: No changes will be made <<<"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
TARGET_USER="${SUDO_USER:-$(logname 2>/dev/null || echo '')}"
|
||||
TARGET_UID=""
|
||||
|
||||
if [[ "$TARGET_USER" == "root" ]]; then
|
||||
TARGET_USER=""
|
||||
fi
|
||||
if [[ -n "$TARGET_USER" ]]; then
|
||||
TARGET_UID="$(id -u "$TARGET_USER" 2>/dev/null || echo '')"
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helpers
|
||||
# ---------------------------------------------------------------------------
|
||||
RED=$'\e[31m'
|
||||
GREEN=$'\e[32m'
|
||||
YELLOW=$'\e[33m'
|
||||
BLUE=$'\e[34m'
|
||||
CYAN=$'\e[36m'
|
||||
NC=$'\e[0m'
|
||||
|
||||
log() { printf "${GREEN}[INFO]${NC} %s\n" "$*"; }
|
||||
warn() { printf "${YELLOW}[WARN]${NC} %s\n" "$*"; }
|
||||
err() { printf "${RED}[ERROR]${NC} %s\n" "$*"; }
|
||||
section() { printf "\n${BLUE}=== %s ===${NC}\n" "$*"; }
|
||||
|
||||
confirm() {
|
||||
[[ "$DRY_RUN" == true ]] && return 0
|
||||
local r
|
||||
read -r -p "$1 [y/N] " r
|
||||
[[ "$r" =~ ^[Yy]$ ]]
|
||||
}
|
||||
|
||||
run() {
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
printf "${CYAN}[DRY-RUN]${NC} %s\n" "$*"
|
||||
else
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Phase 1 — Audit: Where is the 170 GB?
|
||||
# ---------------------------------------------------------------------------
|
||||
section "Disk Usage Summary"
|
||||
df -hT / | grep -E 'Filesystem|/dev/'
|
||||
|
||||
section "Suspect Directory Sizes"
|
||||
suspects=(
|
||||
/var/cache/pacman/pkg
|
||||
/var/lib/containers
|
||||
/var/log
|
||||
/var/log/journal
|
||||
/var/lib/systemd/coredump
|
||||
/var/tmp
|
||||
/tmp
|
||||
/root
|
||||
)
|
||||
|
||||
for dir in "${suspects[@]}"; do
|
||||
[[ -d "$dir" ]] || continue
|
||||
sz=$(du -sh "$dir" 2>/dev/null | awk '{print $1}')
|
||||
printf " %-40s %s\n" "$dir" "$sz"
|
||||
done
|
||||
|
||||
if [[ -n "$TARGET_USER" && -d "/home/$TARGET_USER" ]]; then
|
||||
section "User '$TARGET_USER' Suspect Directories"
|
||||
user_suspects=(
|
||||
"/home/$TARGET_USER/.cache"
|
||||
"/home/$TARGET_USER/.cache/paru"
|
||||
"/home/$TARGET_USER/.cache/paru/clone"
|
||||
"/home/$TARGET_USER/.cache/paru/pkg"
|
||||
"/home/$TARGET_USER/.cache/yay"
|
||||
"/home/$TARGET_USER/.local/share/containers"
|
||||
)
|
||||
for dir in "${user_suspects[@]}"; do
|
||||
[[ -e "$dir" ]] || continue
|
||||
sz=$(du -sh "$dir" 2>/dev/null | awk '{print $1}')
|
||||
printf " %-50s %s\n" "$dir" "$sz"
|
||||
done
|
||||
fi
|
||||
|
||||
section "Large Individual Files (>1 GB)"
|
||||
for search_root in /var /home /root /opt; do
|
||||
[[ -d "$search_root" ]] || continue
|
||||
find "$search_root" -xdev -maxdepth 5 -type f -size +1G -exec ls -lh {} + 2>/dev/null | head -n 20
|
||||
done
|
||||
|
||||
echo ""
|
||||
if ! confirm "Continue with cleanup?"; then
|
||||
log "Aborted by user."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Phase 2 — Cleanup
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# --- Pacman cache ---
|
||||
section "Pacman Cache Cleanup"
|
||||
if command -v paccache &>/dev/null; then
|
||||
log "Removing cached packages for uninstalled software..."
|
||||
run paccache -ruv
|
||||
|
||||
log "Keeping last 2 versions of installed packages, removing older..."
|
||||
run paccache -rvk2
|
||||
else
|
||||
warn "'paccache' (pacman-contrib) not found."
|
||||
if confirm "Install pacman-contrib now? (Recommended; needs a little free space)"; then
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
log "[DRY-RUN] Would install pacman-contrib and run paccache"
|
||||
else
|
||||
pacman -S --noconfirm --needed pacman-contrib
|
||||
paccache -ruv
|
||||
paccache -rvk2
|
||||
fi
|
||||
else
|
||||
if confirm "Run fallback 'pacman -Sc'? (Removes ALL uninstalled cached packages)"; then
|
||||
run pacman -Sc --noconfirm
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- Orphaned packages ---
|
||||
section "Orphaned Packages"
|
||||
orphans="$(pacman -Qdtq 2>/dev/null || true)"
|
||||
if [[ -z "$orphans" ]]; then
|
||||
log "No orphaned packages found."
|
||||
else
|
||||
warn "Orphaned packages found:"
|
||||
echo "$orphans"
|
||||
if confirm "Remove these orphaned packages?"; then
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
log "[DRY-RUN] Would remove: $orphans"
|
||||
else
|
||||
# shellcheck disable=SC2086
|
||||
pacman -Rns --noconfirm $orphans
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- AUR Helpers (paru / yay) ---
|
||||
section "AUR Helper Cache Cleanup"
|
||||
|
||||
clean_aur() {
|
||||
local helper=$1
|
||||
local binpath clone_dir pkg_dir sz
|
||||
binpath="$(command -v "$helper" 2>/dev/null || true)"
|
||||
|
||||
if [[ -z "$binpath" ]]; then
|
||||
log "$helper not installed."
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ -z "$TARGET_USER" ]]; then
|
||||
warn "Cannot determine non-root user for $helper cleanup."
|
||||
return
|
||||
fi
|
||||
|
||||
log "Running safe cache clean for $helper..."
|
||||
run sudo -u "$TARGET_USER" "$binpath" -Sc --noconfirm || warn "$helper -Sc finished with warnings"
|
||||
|
||||
clone_dir="/home/$TARGET_USER/.cache/$helper/clone"
|
||||
if [[ -d "$clone_dir" ]]; then
|
||||
sz=$(du -sh "$clone_dir" 2>/dev/null | awk '{print $1}')
|
||||
warn "$helper clone directory size: $sz"
|
||||
if confirm "Delete $helper PKGBUILD clones? (They must be re-downloaded later)"; then
|
||||
run rm -rf "${clone_dir:?}"/*
|
||||
log "Cleaned $clone_dir"
|
||||
fi
|
||||
fi
|
||||
|
||||
pkg_dir="/home/$TARGET_USER/.cache/$helper/pkg"
|
||||
if [[ -d "$pkg_dir" ]] && command -v paccache &>/dev/null; then
|
||||
log "Running paccache on $helper package dir..."
|
||||
run paccache -ruv --cachedir "$pkg_dir" || true
|
||||
fi
|
||||
}
|
||||
|
||||
clean_aur "paru"
|
||||
clean_aur "yay"
|
||||
|
||||
# --- Podman (rootful + rootless) ---
|
||||
section "Podman Cleanup"
|
||||
|
||||
if command -v podman &>/dev/null; then
|
||||
log "Rootful Podman disk usage:"
|
||||
run podman system df || true
|
||||
|
||||
if confirm "Prune unused rootful Podman resources (containers, networks, images, build cache)?"; then
|
||||
run podman system prune -a -f
|
||||
fi
|
||||
else
|
||||
log "Podman (rootful) not installed."
|
||||
fi
|
||||
|
||||
if [[ -n "$TARGET_USER" && -n "$TARGET_UID" ]]; then
|
||||
if sudo -u "$TARGET_USER" podman --version &>/dev/null; then
|
||||
log "Rootless Podman disk usage for $TARGET_USER:"
|
||||
run sudo -u "$TARGET_USER" podman system df || true
|
||||
|
||||
if confirm "Prune unused rootless Podman resources for $TARGET_USER?"; then
|
||||
run sudo -u "$TARGET_USER" \
|
||||
XDG_RUNTIME_DIR="/run/user/$TARGET_UID" \
|
||||
podman system prune -a -f ||
|
||||
run sudo -u "$TARGET_USER" podman system prune -a -f
|
||||
fi
|
||||
else
|
||||
log "Rootless Podman not configured for $TARGET_USER."
|
||||
fi
|
||||
else
|
||||
log "Skipping rootless Podman (no target user detected)."
|
||||
fi
|
||||
|
||||
# --- Logs ---
|
||||
section "System Logs"
|
||||
if [[ -d /var/log/journal ]] && command -v journalctl &>/dev/null; then
|
||||
jsz=$(du -sh /var/log/journal 2>/dev/null | awk '{print $1}')
|
||||
log "Persistent journal size: $jsz"
|
||||
if confirm "Vacuum journal to max 500 MB?"; then
|
||||
run journalctl --vacuum-size=500M
|
||||
fi
|
||||
else
|
||||
log "No persistent systemd journal detected."
|
||||
fi
|
||||
|
||||
if find /var/log -maxdepth 2 -type f -size +500M 2>/dev/null | grep -q .; then
|
||||
warn "Large uncompressed log files remain in /var/log. You may want to truncate them manually."
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Final Summary
|
||||
# ---------------------------------------------------------------------------
|
||||
section "Final Disk Usage"
|
||||
df -hT /
|
||||
|
||||
log "Cleanup complete. Review the output above to see how much was recovered."
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
log "This was a DRY RUN. Re-run without --dry-run to actually free space."
|
||||
fi
|
||||
@@ -1,91 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Fast Aria2 Download Script
|
||||
# Usage: ./aria2-download.sh <URL> [output-filename]
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Check if aria2c is installed
|
||||
if ! command -v aria2c &> /dev/null; then
|
||||
echo -e "${RED}aria2c is not installed!${NC}"
|
||||
echo "Installing aria2..."
|
||||
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
if command -v apt-get &> /dev/null; then
|
||||
sudo apt-get update && sudo apt-get install -y aria2
|
||||
elif command -v yum &> /dev/null; then
|
||||
sudo yum install -y aria2
|
||||
elif command -v pacman &> /dev/null; then
|
||||
sudo pacman -S aria2
|
||||
else
|
||||
echo -e "${RED}Please install aria2 manually${NC}"
|
||||
exit 1
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
if command -v brew &> /dev/null; then
|
||||
brew install aria2
|
||||
else
|
||||
echo -e "${RED}Please install Homebrew or aria2 manually${NC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}Unsupported OS. Please install aria2 manually${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check if URL is provided
|
||||
if [ -z "$1" ]; then
|
||||
echo -e "${RED}Error: No URL provided${NC}"
|
||||
echo "Usage: $0 <URL> [output-filename]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
URL="$1"
|
||||
OUTPUT_FILE="$2"
|
||||
|
||||
# Build aria2c command with optimized settings
|
||||
ARIA2_CMD="aria2c \
|
||||
--max-connection-per-server=16 \
|
||||
--split=16 \
|
||||
--min-split-size=1M \
|
||||
--max-concurrent-downloads=16 \
|
||||
--continue=true \
|
||||
--max-tries=5 \
|
||||
--retry-wait=3 \
|
||||
--timeout=60 \
|
||||
--connect-timeout=30 \
|
||||
--file-allocation=none \
|
||||
--summary-interval=0 \
|
||||
--console-log-level=notice"
|
||||
|
||||
# Add output filename if provided
|
||||
if [ -n "$OUTPUT_FILE" ]; then
|
||||
ARIA2_CMD="$ARIA2_CMD --out=\"$OUTPUT_FILE\""
|
||||
fi
|
||||
|
||||
# Add URL
|
||||
ARIA2_CMD="$ARIA2_CMD \"$URL\""
|
||||
|
||||
echo -e "${GREEN}Starting download...${NC}"
|
||||
echo -e "${YELLOW}URL: $URL${NC}"
|
||||
if [ -n "$OUTPUT_FILE" ]; then
|
||||
echo -e "${YELLOW}Output: $OUTPUT_FILE${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Execute download
|
||||
eval $ARIA2_CMD
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "\n${GREEN}✓ Download completed successfully!${NC}"
|
||||
else
|
||||
echo -e "\n${RED}✗ Download failed!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,87 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
SHADER_DIR="$HOME/.config/hypr/shaders"
|
||||
SHADER_FILE="$SHADER_DIR/brightness.frag"
|
||||
|
||||
# Ensure shader directory exists
|
||||
mkdir -p "$SHADER_DIR"
|
||||
|
||||
# Get screen brightness level
|
||||
echo "Enter screen brightness level (0-10, where 10 = 100%):"
|
||||
read -r LEVEL
|
||||
|
||||
# Validate input
|
||||
if ! [[ "$LEVEL" =~ ^[0-9]+$ ]] || [ "$LEVEL" -lt 0 ] || [ "$LEVEL" -gt 10 ]; then
|
||||
echo "Invalid input. Please enter a number between 0 and 10."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Convert to decimal (0-10 -> 0.0-1.0)
|
||||
BRIGHTNESS=$(echo "scale=2; $LEVEL / 10" | bc)
|
||||
|
||||
# Ask about keyboard backlight
|
||||
echo "Adjust keyboard backlight? (y/n):"
|
||||
read -r KBD_ADJUST
|
||||
|
||||
if [[ "$KBD_ADJUST" == "y" || "$KBD_ADJUST" == "Y" ]]; then
|
||||
echo "Enter keyboard backlight level (0-10, where 10 = 100%):"
|
||||
read -r KBD_LEVEL
|
||||
|
||||
# Validate keyboard input
|
||||
if ! [[ "$KBD_LEVEL" =~ ^[0-9]+$ ]] || [ "$KBD_LEVEL" -lt 0 ] || [ "$KBD_LEVEL" -gt 10 ]; then
|
||||
echo "Invalid input. Please enter a number between 0 and 10."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Convert to percentage (0-10 -> 0-100)
|
||||
KBD_PERCENT=$((KBD_LEVEL * 10))
|
||||
|
||||
# Set keyboard backlight
|
||||
kbdlight set $KBD_PERCENT
|
||||
echo "Keyboard backlight set to ${KBD_PERCENT}%"
|
||||
fi
|
||||
|
||||
# Ask about blue light filter
|
||||
echo "Apply blue light filter? (y/n):"
|
||||
read -r BLUELIGHT
|
||||
|
||||
# Create shader based on choice
|
||||
cat > "$SHADER_FILE" << EOF
|
||||
#version 300 es
|
||||
|
||||
precision mediump float;
|
||||
|
||||
in vec2 v_texcoord;
|
||||
out vec4 fragColor;
|
||||
uniform sampler2D tex;
|
||||
|
||||
void main() {
|
||||
vec4 pixColor = texture(tex, v_texcoord);
|
||||
|
||||
EOF
|
||||
|
||||
if [[ "$BLUELIGHT" == "y" || "$BLUELIGHT" == "Y" ]]; then
|
||||
cat >> "$SHADER_FILE" << EOF
|
||||
// Reduce blue light
|
||||
pixColor.r *= 1.0;
|
||||
pixColor.g *= 0.85;
|
||||
pixColor.b *= 0.65;
|
||||
|
||||
EOF
|
||||
fi
|
||||
|
||||
cat >> "$SHADER_FILE" << EOF
|
||||
// Adjust brightness
|
||||
pixColor.rgb *= $BRIGHTNESS;
|
||||
|
||||
fragColor = pixColor;
|
||||
}
|
||||
EOF
|
||||
|
||||
# Apply shader
|
||||
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
||||
export HYPRLAND_INSTANCE_SIGNATURE=$(ls -t /tmp/hypr/ 2>/dev/null | head -n1)
|
||||
fi
|
||||
/usr/bin/hyprctl keyword decoration:screen_shader "$SHADER_FILE"
|
||||
|
||||
echo "Screen brightness set to ${LEVEL}0% $([ "$BLUELIGHT" == "y" ] || [ "$BLUELIGHT" == "Y" ] && echo "with blue light filter")"
|
||||
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 1. Choose the file
|
||||
echo "Select the ebook file:"
|
||||
select file in *.epub *.mobi *.pdf *.azw3; do
|
||||
if [ -n "$file" ]; then
|
||||
break
|
||||
else
|
||||
echo "Invalid selection."
|
||||
fi
|
||||
done
|
||||
|
||||
# 2. Prompt for metadata
|
||||
read -p "Enter Author: " author
|
||||
read -p "Enter Book Title: " title
|
||||
read -p "Enter ISBN-13: " isbn13
|
||||
read -p "Enter ASIN (optional): " asin
|
||||
read -p "Enter Goodreads ID: " grid
|
||||
|
||||
# 3. Apply metadata using ebook-meta
|
||||
# Adding the goodreads identifier is the most reliable fix for Readarr [6]
|
||||
ebook-meta "$file" \
|
||||
--authors "$author" \
|
||||
--title "$title" \
|
||||
--identifier "isbn:$isbn13" \
|
||||
--identifier "asin:$asin" \
|
||||
--identifier "goodreads:$grid"
|
||||
|
||||
echo "Metadata updated with Goodreads ID: $grid"
|
||||
@@ -1,32 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
SOURCE_DIRS=("/home/liph/Documents" "/home/liph/Pictures" "/home/liph/Downloads")
|
||||
REPO_DIR="/home/liph/borg-repo"
|
||||
BORG_PASSPHRASE="1ChagearC"
|
||||
|
||||
export BORG_PASSPHRASE
|
||||
|
||||
for SOURCE_DIR in "${SOURCE_DIRS[@]}"; do
|
||||
ARCHIVE_NAME="{hostname}-{user}-{now}"
|
||||
|
||||
echo "Starting backup of ${SOURCE_DIR}..."
|
||||
borg create --stats --progress \
|
||||
"${REPO_DIR}::${ARCHIVE_NAME}" \
|
||||
"${SOURCE_DIR}"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Backup of ${SOURCE_DIR} completed successfully!"
|
||||
else
|
||||
echo "Backup of ${SOURCE_DIR} failed!"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Pruning old backups..."
|
||||
borg prune --stats --progress \
|
||||
--keep-daily=7 \
|
||||
--keep-weekly=4 \
|
||||
--keep-monthly=6 \
|
||||
"${REPO_DIR}"
|
||||
|
||||
echo "Backup and pruning completed!"
|
||||
|
||||
-95
@@ -1,95 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Setting this, so the repo does not need to be given on the commandline:
|
||||
# export BORG_REPO=ssh://username@example.com:2022/~/backup/main
|
||||
#export BORG_REPO=~/backup/
|
||||
|
||||
# See the section "Passphrase notes" for more infos.
|
||||
#export BORG_PASSPHRASE='1ChagearC'
|
||||
|
||||
export BORG_REPO="ssh://100.121.203.110:2222/./repo/borg-repo"
|
||||
export BORG_PASSPHRASE="1ChagearC" # Encryption key
|
||||
BACKUP_SOURCES=(
|
||||
"/home/liph/Downloads/"
|
||||
"/home/liph/dotfiles/"
|
||||
"/home/liph/scripts"
|
||||
) # What to back up
|
||||
BACKUP_NAME="laptop-$(date +%Y-%m-%d)" # Dynamic backup name
|
||||
|
||||
# some helpers and error handling:
|
||||
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
||||
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
||||
|
||||
info "Starting backup"
|
||||
|
||||
# Initialize Borg repo (if not exists)
|
||||
borg init --encryption=repokey "$BORG_REPO" 2>/dev/null || true
|
||||
|
||||
# Backup the most important directories into an archive named after
|
||||
# the machine this script is currently running on:
|
||||
|
||||
borg create \
|
||||
--verbose \
|
||||
--filter AME \
|
||||
--list \
|
||||
--stats \
|
||||
--show-rc \
|
||||
--progress \
|
||||
--compression lz4 \
|
||||
--exclude-caches \
|
||||
--exclude 'home/*/.cache/*' \
|
||||
--exclude 'var/tmp/*' \
|
||||
"$BORG_REPO::$BACKUP_NAME" \
|
||||
"${BACKUP_SOURCES[@]}" \
|
||||
# ::'{hostname}-{user}-{now}' \
|
||||
# /home/liph/Documents/ \
|
||||
# /home/liph/Pictures/ \
|
||||
# /home/liph/Downloads/
|
||||
# /etc \
|
||||
# /home \
|
||||
# /root \
|
||||
# /var
|
||||
backup_exit=$?
|
||||
|
||||
info "Pruning repository"
|
||||
|
||||
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
||||
# archives of THIS machine. The '{hostname}-*' matching is very important to
|
||||
# limit prune's operation to this machine's archives and not apply to
|
||||
# other machines' archives also:
|
||||
|
||||
borg prune \
|
||||
--list \
|
||||
--glob-archives '{hostname}-*' \
|
||||
--show-rc \
|
||||
--keep-daily 7 \
|
||||
--keep-weekly 4 \
|
||||
--keep-monthly 6
|
||||
"$BORG_REPO"
|
||||
|
||||
prune_exit=$?
|
||||
|
||||
# actually free repo disk space by compacting segments
|
||||
|
||||
info "Compacting repository"
|
||||
|
||||
borg compact
|
||||
|
||||
compact_exit=$?
|
||||
|
||||
# use highest exit code as global exit code
|
||||
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
||||
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
|
||||
|
||||
if [ ${global_exit} -eq 0 ]; then
|
||||
info "Backup, Prune, and Compact finished successfully"
|
||||
elif [ ${global_exit} -eq 1 ]; then
|
||||
info "Backup, Prune, and/or Compact finished with warnings"
|
||||
else
|
||||
info "Backup, Prune, and/or Compact finished with errors"
|
||||
fi
|
||||
|
||||
exit ${global_exit}
|
||||
|
||||
# Check backup integrity
|
||||
borg check "$BORG_REPO"
|
||||
@@ -1,95 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Setting this, so the repo does not need to be given on the commandline:
|
||||
# export BORG_REPO=ssh://username@example.com:2022/~/backup/main
|
||||
#export BORG_REPO=~/backup/
|
||||
|
||||
# See the section "Passphrase notes" for more infos.
|
||||
#export BORG_PASSPHRASE='1ChagearC'
|
||||
|
||||
export BORG_REPO="ssh://100.121.203.110:2222/./repo/borg-repo"
|
||||
export BORG_PASSPHRASE="1ChagearC" # Encryption key
|
||||
BACKUP_SOURCES=(
|
||||
"/home/liph/Documents"
|
||||
"/home/liph/Pictures"
|
||||
"/home/liph/scripts"
|
||||
) # What to back up
|
||||
BACKUP_NAME="server-$(date +%Y-%m-%d)" # Dynamic backup name
|
||||
|
||||
# some helpers and error handling:
|
||||
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
||||
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
||||
|
||||
info "Starting backup"
|
||||
|
||||
# Initialize Borg repo (if not exists)
|
||||
borg init --encryption=repokey "$BORG_REPO" 2>/dev/null || true
|
||||
|
||||
# Backup the most important directories into an archive named after
|
||||
# the machine this script is currently running on:
|
||||
|
||||
borg create \
|
||||
--verbose \
|
||||
--filter AME \
|
||||
--list \
|
||||
--stats \
|
||||
--show-rc \
|
||||
--progress \
|
||||
--compression lz4 \
|
||||
--exclude-caches \
|
||||
--exclude 'home/*/.cache/*' \
|
||||
--exclude 'var/tmp/*' \
|
||||
"$BORG_REPO::$BACKUP_NAME" \
|
||||
"${BACKUP_SOURCES[@]}" \
|
||||
# ::'{hostname}-{user}-{now}' \
|
||||
# /home/liph/Documents/ \
|
||||
# /home/liph/Pictures/ \
|
||||
# /home/liph/Downloads/
|
||||
# /etc \
|
||||
# /home \
|
||||
# /root \
|
||||
# /var
|
||||
backup_exit=$?
|
||||
|
||||
info "Pruning repository"
|
||||
|
||||
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
||||
# archives of THIS machine. The '{hostname}-*' matching is very important to
|
||||
# limit prune's operation to this machine's archives and not apply to
|
||||
# other machines' archives also:
|
||||
|
||||
borg prune \
|
||||
--list \
|
||||
--glob-archives '{hostname}-*' \
|
||||
--show-rc \
|
||||
--keep-daily 7 \
|
||||
--keep-weekly 4 \
|
||||
--keep-monthly 6
|
||||
"$BORG_REPO"
|
||||
|
||||
prune_exit=$?
|
||||
|
||||
# actually free repo disk space by compacting segments
|
||||
|
||||
info "Compacting repository"
|
||||
|
||||
borg compact
|
||||
|
||||
compact_exit=$?
|
||||
|
||||
# use highest exit code as global exit code
|
||||
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
||||
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
|
||||
|
||||
if [ ${global_exit} -eq 0 ]; then
|
||||
info "Backup, Prune, and Compact finished successfully"
|
||||
elif [ ${global_exit} -eq 1 ]; then
|
||||
info "Backup, Prune, and/or Compact finished with warnings"
|
||||
else
|
||||
info "Backup, Prune, and/or Compact finished with errors"
|
||||
fi
|
||||
|
||||
exit ${global_exit}
|
||||
|
||||
# Check backup integrity
|
||||
borg check "$BORG_REPO"
|
||||
@@ -1,95 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Setting this, so the repo does not need to be given on the commandline:
|
||||
# export BORG_REPO=ssh://username@example.com:2022/~/backup/main
|
||||
#export BORG_REPO=~/backup/
|
||||
|
||||
# See the section "Passphrase notes" for more infos.
|
||||
#export BORG_PASSPHRASE='1ChagearC'
|
||||
|
||||
export BORG_REPO="ssh://100.121.203.110:2222/./repo/borg-repo"
|
||||
export BORG_PASSPHRASE="1ChagearC" # Encryption key
|
||||
BACKUP_SOURCES=(
|
||||
"/home/liph/Documents"
|
||||
"/home/liph/Pictures"
|
||||
"/home/liph/scripts"
|
||||
) # What to back up
|
||||
BACKUP_NAME="laptop-$(date +%Y-%m-%d)" # Dynamic backup name
|
||||
|
||||
# some helpers and error handling:
|
||||
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
||||
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
||||
|
||||
info "Starting backup"
|
||||
|
||||
# Initialize Borg repo (if not exists)
|
||||
borg init --encryption=repokey "$BORG_REPO" 2>/dev/null || true
|
||||
|
||||
# Backup the most important directories into an archive named after
|
||||
# the machine this script is currently running on:
|
||||
|
||||
borg create \
|
||||
--verbose \
|
||||
--filter AME \
|
||||
--list \
|
||||
--stats \
|
||||
--show-rc \
|
||||
--progress \
|
||||
--compression lz4 \
|
||||
--exclude-caches \
|
||||
--exclude 'home/*/.cache/*' \
|
||||
--exclude 'var/tmp/*' \
|
||||
"$BORG_REPO::$BACKUP_NAME" \
|
||||
"${BACKUP_SOURCES[@]}" \
|
||||
# ::'{hostname}-{user}-{now}' \
|
||||
# /home/liph/Documents/ \
|
||||
# /home/liph/Pictures/ \
|
||||
# /home/liph/Downloads/
|
||||
# /etc \
|
||||
# /home \
|
||||
# /root \
|
||||
# /var
|
||||
backup_exit=$?
|
||||
|
||||
info "Pruning repository"
|
||||
|
||||
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
||||
# archives of THIS machine. The '{hostname}-*' matching is very important to
|
||||
# limit prune's operation to this machine's archives and not apply to
|
||||
# other machines' archives also:
|
||||
|
||||
borg prune \
|
||||
--list \
|
||||
--glob-archives '{hostname}-*' \
|
||||
--show-rc \
|
||||
--keep-daily 7 \
|
||||
--keep-weekly 4 \
|
||||
--keep-monthly 6
|
||||
"$BORG_REPO"
|
||||
|
||||
prune_exit=$?
|
||||
|
||||
# actually free repo disk space by compacting segments
|
||||
|
||||
info "Compacting repository"
|
||||
|
||||
borg compact
|
||||
|
||||
compact_exit=$?
|
||||
|
||||
# use highest exit code as global exit code
|
||||
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
||||
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
|
||||
|
||||
if [ ${global_exit} -eq 0 ]; then
|
||||
info "Backup, Prune, and Compact finished successfully"
|
||||
elif [ ${global_exit} -eq 1 ]; then
|
||||
info "Backup, Prune, and/or Compact finished with warnings"
|
||||
else
|
||||
info "Backup, Prune, and/or Compact finished with errors"
|
||||
fi
|
||||
|
||||
exit ${global_exit}
|
||||
|
||||
# Check backup integrity
|
||||
borg check "$BORG_REPO"
|
||||
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
@@ -1,5 +0,0 @@
|
||||
# Convert your aerc/maildir to vCards
|
||||
em2vcf /mnt/flash1/mail-server/mail/maildir/ \
|
||||
--output-folder ~/.contacts_mail/ \
|
||||
--no-duplicates \
|
||||
--overwrite
|
||||
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
@@ -1,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Save as ~/.config/niri/scripts/fix-bitwarden.sh
|
||||
# Make executable: chmod +x ~/.config/niri/scripts/fix-bitwarden.sh
|
||||
|
||||
niri msg -j event-stream | jq --unbuffered -r '
|
||||
select(.WindowOpenedOrChanged) |
|
||||
.WindowOpenedOrChanged.window |
|
||||
select(
|
||||
(.title? | match("Extension:.*LibreWolf")) and
|
||||
.is_floating == false
|
||||
) |
|
||||
.id
|
||||
' | while read id; do
|
||||
niri msg action toggle-window-floating --id="$id"
|
||||
niri msg action set-window-height 50%
|
||||
niri msg action set-window-width 20%
|
||||
done
|
||||
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
@@ -0,0 +1,120 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.5
|
||||
Date: 2024-04-21
|
||||
File: 1099-INT.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.5 Fix 'latexpdf' errors with missing data
|
||||
1.4 Correct values passed into 'taxformpart' block
|
||||
1.3 Document available variables; replace deprecated ones
|
||||
1.2 Fix syntax error
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
|
||||
This template has the following variables available:
|
||||
|
||||
SETTINGS:
|
||||
company_name
|
||||
company_address
|
||||
company_phone
|
||||
company_fax
|
||||
company_email
|
||||
businessnumber
|
||||
results:
|
||||
- id
|
||||
legal_name
|
||||
entity_id
|
||||
entity_class
|
||||
control_code
|
||||
meta_number
|
||||
tax_id
|
||||
sales_tax_id
|
||||
acc_sum
|
||||
invoice_sum
|
||||
total_sum
|
||||
invnumber (1)
|
||||
duedate (1)
|
||||
invoice_id (1)
|
||||
line_one
|
||||
line_two
|
||||
line_three
|
||||
city
|
||||
state
|
||||
mail_code
|
||||
|
||||
(1): These fields are only available when the report being printed
|
||||
is a detailed report (as opposed to a summary report).
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } ?>
|
||||
|
||||
\documentclass[usletter]{article}
|
||||
\usepackage{textpos}
|
||||
\usepackage[top=0.0in, bottom=0in, left=0in, right=0in]{geometry}
|
||||
\setlength{\parindent}{0pt}
|
||||
\setlength{\TPHorizModule}{1in}
|
||||
\setlength{\TPVertModule}{1in}
|
||||
|
||||
<?lsmb BLOCK taxformpart ?>
|
||||
\begin{textblock}{4}[0,1](1, 1.5)
|
||||
<?lsmb SETTINGS.company_name || 'No Company Name set in System Defaults' ?>\\
|
||||
<?lsmb SETTINGS.company_address || 'No Company Address set in System Defaults' ?>\\
|
||||
Tel: <?lsmb SETTINGS.company_phone ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{2}[0,1](1, 3.5)
|
||||
<?lsmb SETTINGS.businessnumber ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{2}[0,1](3, 3.5)
|
||||
<?lsmb taxnumber ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{4}[0,1](1, 4)
|
||||
<?lsmb legal_name ?>\\
|
||||
<?lsmb IF line_one ?>
|
||||
<?lsmb line_one ?>\\
|
||||
<?lsmb IF line_two ?><?lsmb line_two ?>\\ <?lsmb END ?>
|
||||
<?lsmb IF line_three ?><?lsmb line_three ?>\\ <?lsmb END ?>
|
||||
<?lsmb ELSE -?>
|
||||
No billing or physical address set \\
|
||||
<?lsmb END # line_one ?>
|
||||
<?lsmb city ?>, <?lsmb state ?> <?lsmb mail_code ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{2}[0,1](4.5, 1.5)
|
||||
<?lsmb total_sum ?>
|
||||
\end{textblock}
|
||||
<?lsmb END # Block taxformpart ?>
|
||||
<?lsmb BLOCK taxform ?>
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb END #BLOCK taxform ?>
|
||||
|
||||
\begin{document}
|
||||
<?lsmb FOR tf in results ?>
|
||||
<?lsmb INCLUDE taxform
|
||||
legal_name = tf.legal_name
|
||||
line_one = tf.line_one
|
||||
line_two = tf.line_two
|
||||
line_three = tf.line_three
|
||||
city = tf.city
|
||||
state = tf.state
|
||||
mail_code = tf.mail_code
|
||||
taxnumber = tf.taxnumber
|
||||
total_sum = tf.total_sum ;
|
||||
END # FOR tf ?>
|
||||
\end{document}
|
||||
|
||||
<?lsmb END # FILTER latex -?>
|
||||
@@ -0,0 +1,128 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.4
|
||||
Date: 2024-04-21
|
||||
File: 1099-MISC.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.4 Fix 'latexpdf' errors with missing data
|
||||
1.3 Correct values passed into 'taxformpart' block
|
||||
1.2 Document available variables; replace deprecated ones
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
|
||||
This template has the following variables available:
|
||||
|
||||
SETTINGS:
|
||||
company_name
|
||||
company_address
|
||||
company_phone
|
||||
company_fax
|
||||
company_email
|
||||
businessnumber
|
||||
results:
|
||||
- id
|
||||
legal_name
|
||||
entity_id
|
||||
entity_class
|
||||
control_code
|
||||
meta_number
|
||||
tax_id
|
||||
sales_tax_id
|
||||
acc_sum
|
||||
invoice_sum
|
||||
total_sum
|
||||
invnumber (1)
|
||||
duedate (1)
|
||||
invoice_id (1)
|
||||
line_one
|
||||
line_two
|
||||
line_three
|
||||
city
|
||||
state
|
||||
mail_code
|
||||
|
||||
(1): These fields are only available when the report being printed
|
||||
is a detailed report (as opposed to a summary report).
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } ?>
|
||||
|
||||
\documentclass[usletter]{article}
|
||||
\usepackage{textpos}
|
||||
\usepackage[top=0.0in, bottom=0in, left=0in, right=0in]{geometry}
|
||||
\setlength{\parindent}{0pt}
|
||||
\setlength{\TPHorizModule}{1in}
|
||||
\setlength{\TPVertModule}{1in}
|
||||
|
||||
<?lsmb BLOCK taxformpart
|
||||
# Defines a repeatable block of TeX commands
|
||||
?>
|
||||
\begin{textblock}{4}[0,1](1, 1.5)
|
||||
<?lsmb SETTINGS.company_name || 'No Company Name set in System Defaults' ?>\\
|
||||
<?lsmb SETTINGS.company_address || 'No Company Address set in System Defaults' ?>\\
|
||||
Tel: <?lsmb SETTINGS.company_phone ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{2}[0,1](1, 3.5)
|
||||
<?lsmb SETTINGS.businessnumber ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{2}[0,1](3, 3.5)
|
||||
<?lsmb taxnumber ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{4}[0,1](1, 4)
|
||||
<?lsmb legal_name ?>\\
|
||||
<?lsmb IF street1 ?>
|
||||
<?lsmb street1 ?>\\
|
||||
<?lsmb IF street2 ?><?lsmb street2 ?>\\ <?lsmb END ?>
|
||||
<?lsmb IF street3 ?><?lsmb street3 ?>\\ <?lsmb END ?>
|
||||
<?lsmb ELSE -?>
|
||||
No billing or physical address set \\
|
||||
<?lsmb END # street1 ?>
|
||||
<?lsmb city ?>, <?lsmb state ?> <?lsmb mail_code ?>
|
||||
\end{textblock}
|
||||
|
||||
\begin{textblock}{2}[0,1](4.5, 4.5)
|
||||
<?lsmb total_sum ?>
|
||||
\end{textblock}
|
||||
<?lsmb END # Block taxformpart ?>
|
||||
|
||||
<?lsmb BLOCK taxform
|
||||
# Defines a repeatable block of TeX commands
|
||||
?>
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb PROCESS taxformpart ?>
|
||||
\clearpage
|
||||
<?lsmb END #BLOCK taxform ?>
|
||||
|
||||
|
||||
|
||||
\begin{document}
|
||||
<?lsmb
|
||||
# Executes the actual form
|
||||
|
||||
FOREACH tf IN results;
|
||||
INCLUDE taxform
|
||||
legal_name = tf.legal_name
|
||||
street1 = tf.line_one
|
||||
street2 = tf.line_two
|
||||
street3 = tf.line_three
|
||||
city = tf.city
|
||||
state = tf.state
|
||||
mail_code = tf.mail_code
|
||||
taxnumber = tf.taxnumber
|
||||
total_sum = tf.total_sum;
|
||||
END # FOR tf ?>
|
||||
\end{document}
|
||||
<?lsmb END # FILTER latex -?>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.2
|
||||
Date: 2024-10-08
|
||||
File: PNL.csv
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.2 Restore 'heading_account' column (turning out not-spurious)
|
||||
1.1 Remove spurious 'heading_account' column
|
||||
|
||||
-?>
|
||||
account,description,is_heading,heading_account<?lsmb
|
||||
FOREACH col IN report.sorted_col_ids -?>
|
||||
,"<?lsmb report.cheads.ids.$col.props.description ?>"<?lsmb END; ?>
|
||||
<?lsmb FOREACH row IN report.sorted_row_ids ; -?>
|
||||
<?lsmb report.rheads.ids.$row.props.account_number -?>,"<?lsmb report.rheads.ids.$row.props.account_description ?>",<?lsmb IF report.rheads.ids.$row.props.account_type == 'H' -?>Y<?lsmb ELSE ?>N<?lsmb END ?>,<?lsmb
|
||||
PARENT = report.rheads.ids.$row.parent_id ;
|
||||
report.rheads.ids.$PARENT.props.account_number ?><?lsmb
|
||||
FOREACH col IN report.sorted_col_ids ; -?>
|
||||
,<?lsmb report.cells.$row.$col -?><?lsmb
|
||||
END; ?>
|
||||
<?lsmb END; -?>
|
||||
|
Can't render this file because it contains an unexpected character in line 18 and column 53.
|
@@ -0,0 +1,376 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 2.2
|
||||
Date: 2026-02-19
|
||||
File: PNL.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
2.0 Created clickable section heads to collapse parts of hierarchical reports
|
||||
2.1 Simplify indentation calculations; many values are provided as variables as-of 1.13
|
||||
2.2 Fix address not showing below the company name
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb title ?></title>
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<style type="text/css">
|
||||
table.c1 {border-collapse: collapse}
|
||||
|
||||
.flat-hierarchy .balancesheet .report-head th {
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.flat-hierarchy .balancesheet .section1.QL,
|
||||
.flat-hierarchy .income_statement .section1 {
|
||||
border: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.flat-hierarchy .balancesheet .section1,
|
||||
.flat-hierarchy .balancesheet .section2,
|
||||
.flat-hierarchy .income_statement .section2 {
|
||||
border-bottom: 3px double black;
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy .heading1,
|
||||
.financial-statement.flat-hierarchy .balancesheet .heading2 {
|
||||
border-top: 1px solid black;
|
||||
font-weight: bold;
|
||||
height: 2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy .income_statement .heading2 {
|
||||
border-top: 1px solid black;
|
||||
font-size: bigger;
|
||||
font-style: italic;
|
||||
height: 2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy table {
|
||||
margin-top: 3em;
|
||||
min-width: 60ex;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy table td,
|
||||
.financial-statement.flat-hierarchy table th {
|
||||
padding-bottom: 3px; /* add space for the dashed line underlining hovered amounts */
|
||||
}
|
||||
|
||||
.financial-statement .company-name {
|
||||
font-family: monospace;
|
||||
margin-top: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.financial-statement .company-address {
|
||||
font-family: monospace;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#PNL a {
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL a:link {
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL a:visited {
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL a:hover {
|
||||
background-color: inherit;
|
||||
border-bottom: thin dashed;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL td.amount {
|
||||
padding-left: 0.5em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#PNL tr.separator {
|
||||
min-height: 1em;
|
||||
}
|
||||
|
||||
#PNL tr.sectionhead th {
|
||||
font-weight: bold;
|
||||
margin-top: 4em;
|
||||
padding-top: 2em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#PNL td.total {
|
||||
border: 0;
|
||||
border-color: black;
|
||||
border-style: solid;
|
||||
border-top: 1px;
|
||||
}
|
||||
|
||||
#PNL th {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
#PNL table {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
#PNL h1,
|
||||
h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#PNL th[colspan="1"].indent {
|
||||
width: 1em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="2"].indent {
|
||||
width: 2em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="3"].indent {
|
||||
width: 3em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="4"].indent {
|
||||
width: 4em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="5"].indent {
|
||||
width: 5em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="6"].indent {
|
||||
width: 6em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="7"].indent {
|
||||
width: 7em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="8"].indent {
|
||||
width: 8em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="9"].indent {
|
||||
width: 9em;
|
||||
}
|
||||
|
||||
#PNL td.heading1,
|
||||
#PNL th.heading1 {
|
||||
border-bottom: 1px solid black;
|
||||
border-top: 1px solid black;
|
||||
font-weight: bold;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
#PNL td.heading2,
|
||||
#PNL th.heading2 {
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#PNL table.balancesheet {
|
||||
border-top: 1px solid black;
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
#PNL .amount {
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
.financial-statement h1,
|
||||
.financial-statement h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.financial-statement table {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.financial-statement td.amount {
|
||||
padding-left: 4em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.financial-statement tr.total td,
|
||||
.financial-statement tr.total th {
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
|
||||
.financial-statement tr.total td.amount {
|
||||
border-top: thick double black;
|
||||
}
|
||||
|
||||
.financial-statement th {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.financial-statement tr.section-head th,
|
||||
.financial-statement tr.total th {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.financial-statement a,
|
||||
.financial-statement a:visited {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.heading3.H {
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
.heading2.H {
|
||||
padding-bottom: 1.5em;
|
||||
}
|
||||
.heading4.H {
|
||||
padding-bottom: 0.75em;
|
||||
}
|
||||
.section1 {
|
||||
font-size: 140%;
|
||||
}
|
||||
.section2 {
|
||||
font-size: 120%;
|
||||
}
|
||||
.section3 {
|
||||
font-size: 110%;
|
||||
}
|
||||
.H {
|
||||
font-style: italic;
|
||||
}
|
||||
.section4 {
|
||||
font-size: 105%;
|
||||
}
|
||||
th {
|
||||
font-weight: normal;
|
||||
}
|
||||
@media print {
|
||||
.non-printed {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
let lvl = {};
|
||||
function toggle(tgt,cls) {
|
||||
let elms = document.querySelectorAll(tgt+' .'+cls);
|
||||
let newState = lvl[cls] ? '' : 'none';
|
||||
lvl[cls] = !lvl[cls];
|
||||
for ( var e = elms.length - 1; e >= 0; e-- ) {
|
||||
elms[e].style.display = newState;
|
||||
}
|
||||
}
|
||||
</script></head><?lsmb
|
||||
account_data = report.account_data;
|
||||
|
||||
max_path_depth = report.rheads.max_path_depth;
|
||||
IF report.legacy_hierarchy ;
|
||||
hierarchy = 'flat-hierarchy';
|
||||
ELSE ;
|
||||
hierarchy = 'full-hierarchy';
|
||||
END ;
|
||||
?>
|
||||
<body class="financial-statement <?lsmb dojo_theme ?> <?lsmb hierarchy ?>">
|
||||
<div id="PNL" class="financial-statement <?lsmb hierarchy ?>">
|
||||
<!-- Also used in balance sheet! -->
|
||||
<h1><?lsmb name ?></h1>
|
||||
<div class="company-name">
|
||||
<?lsmb SETTINGS.company_name ?>
|
||||
</div>
|
||||
<div class="company-address">
|
||||
<?lsmb SETTINGS.company_address ?>
|
||||
</div>
|
||||
<table class="income_statement c1">
|
||||
<colgroup class="headings">
|
||||
<?lsmb i = 1;
|
||||
WHILE i <= max_path_depth;
|
||||
' <col class="level' _ i _ '" />';
|
||||
i = i + 1;
|
||||
END;
|
||||
?>
|
||||
</colgroup>
|
||||
<colgroup class="values">
|
||||
<?lsmb i = 1;
|
||||
WHILE i <= report.cheads.ids.size;
|
||||
' <col class="values' _ i _ '" />';
|
||||
i = i + 1;
|
||||
END;
|
||||
?>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="report-head">
|
||||
<th colspan="<?lsmb max_path_depth ?>">
|
||||
</th><?lsmb FOREACH col IN report.sorted_col_ids -?>
|
||||
<th><?lsmb report.cheads.ids.$col.props.description ?></th><?lsmb END -?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?lsmb FOREACH row IN report.sorted_row_ids ;
|
||||
row_data = report.rheads.ids.$row;
|
||||
path_depth = row_data.path_depth;
|
||||
path_prefix_len = row_data.path_prefix_len;
|
||||
path_suffix_len = row_data.path_suffix_len;
|
||||
IF row_data.props.account_type == 'H' ;
|
||||
class = 'class="heading' _ path_depth _ ' ' _ row_data.props.account_type _ '"';
|
||||
clazz = "heading" _ path_depth _ ' ' _ row_data.props.account_type;
|
||||
row_type = 'H';
|
||||
ELSIF row_data.props.section_for ;
|
||||
class = 'class="section' _ path_depth _ ' ' _ row_data.heading_props.account_category _ '"';
|
||||
clazz = "section" _ path_depth _ ' ' _ row_data.heading_props.account_category;
|
||||
row_type = 'H';
|
||||
ELSE;
|
||||
class = 'class="account"';
|
||||
clazz = 'account';
|
||||
row_type = 'A';
|
||||
END;
|
||||
?>
|
||||
<tr class="<?lsmb FOREACH sec IN row_data.path ; IF NOT loop.last(); " sub-" _ sec ; END; END; ?>" <?lsmb IF row_type == 'H' ; ?> onclick="toggle('', 'sub-<?lsmb row_data.path.last ?>')" <?lsmb END ?> >
|
||||
<?lsmb IF report.legacy_hierarchy ?>
|
||||
<?lsmb IF path_prefix_len > 0 ?>
|
||||
<th colspan="<?lsmb path_prefix_len ?>" class="indent"> </th>
|
||||
<?lsmb END ?>
|
||||
<?lsmb ELSE ?>
|
||||
<?lsmb- FILTER repeat(path_prefix_len) -?>
|
||||
<th class="indent"> </th>
|
||||
<?lsmb- END -?>
|
||||
<?lsmb- END -?>
|
||||
<th colspan="<?lsmb path_suffix_len ?>" <?lsmb class ?>>
|
||||
<?lsmb IF row_data.props.section_for ;
|
||||
row_data.props.row_description ?></th>
|
||||
<th colspan="<?lsmb report.cheads.ids.size ?>" <?lsmb class ?>>
|
||||
<?lsmb ELSE -?>
|
||||
<?lsmb row_data.props.row_description ?></th><?lsmb FOREACH col IN report.sorted_col_ids -?>
|
||||
<td class="amount <?lsmb clazz ?>">
|
||||
<?lsmb report.cells.$row.$col ?>
|
||||
</td><?lsmb END ?><?lsmb END ?>
|
||||
</tr><?lsmb END ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="non-printed">Click on the headings to collapse sections.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,112 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.3
|
||||
Date: 2025-08-30
|
||||
File: PNL.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
1.2 Fixed company address not showing
|
||||
1.3 Simplify indentation calculations; as of 1.13, many pre-calculated
|
||||
values are provided as variables
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } ?>
|
||||
|
||||
<?lsmb
|
||||
max_path_depth = report.rheads.max_path_depth;
|
||||
last_col_no = max_path_depth + 1 + report.sorted_col_ids.size;
|
||||
IF report.legacy_hierarchy ;
|
||||
hierarchy = 'flat-hierarchy';
|
||||
ELSE ;
|
||||
hierarchy = 'full-hierarchy';
|
||||
END ;
|
||||
|
||||
-?>
|
||||
|
||||
\documentclass[10pt]{article}
|
||||
\usepackage{longtable}
|
||||
\usepackage[<?lsmb SETTINGS.papersize ?>paper,top=2cm,bottom=1.5cm,left=1.1cm,right=1.5cm]{geometry}
|
||||
\begin{document}
|
||||
\renewcommand\baselinestretch{1.2}\selectfont
|
||||
\begin{center}
|
||||
\Huge{<?lsmb text('Income Statement') ?>}
|
||||
|
||||
\small{
|
||||
\texttt{<?lsmb SETTINGS.company_name ?>}
|
||||
|
||||
|
||||
\texttt{<?lsmb SETTINGS.company_address ?>}
|
||||
}
|
||||
\end{center}
|
||||
|
||||
|
||||
\begin{longtable}{@{\extracolsep{'0pt}}<?lsmb l = 'l'; l.repeat(max_path_depth);
|
||||
-?>p{2cm}<?lsmb l = 'r'; l.repeat(report.sorted_col_ids.size); ?>}
|
||||
\\
|
||||
\multicolumn{<?lsmb max_path_depth ?>}{l}{} &%
|
||||
<?lsmb
|
||||
FOREACH col IN report.sorted_col_ids;
|
||||
' & \shortstack{';
|
||||
report.cheads.ids.$col.props.description ;
|
||||
'} ';
|
||||
END;
|
||||
?> \\
|
||||
\\
|
||||
<?lsmb FOREACH row IN report.sorted_row_ids ;
|
||||
row_data = report.rheads.ids.$row;
|
||||
path_depth = row_data.path_depth;
|
||||
path_prefix_len = row_data.path_prefix_len;
|
||||
path_suffix_len = row_data.path_suffix_len;
|
||||
IF row_data.props.section_for;
|
||||
IF row_data.heading_props.account_category == 'Q';
|
||||
NEXT;
|
||||
END;
|
||||
END;
|
||||
|
||||
|
||||
desc = row_data.props.row_description;
|
||||
IF row_data.props.account_type != 'A';
|
||||
IF row_data.props.section_for ;
|
||||
desc = '\Large{' _ row_data.props.row_description _ '}';
|
||||
ELSE;
|
||||
'\cline{' _ path_depth _ '-' _ last_col_no _ '} ';
|
||||
END;
|
||||
desc = '\textbf{\emph{' _ desc _ '}}';
|
||||
END ;
|
||||
-?>%
|
||||
%
|
||||
<?lsmb amp = '& '; amp.repeat(path_prefix_len); -?>
|
||||
<?lsmb IF path_suffix_len > 1 -?>
|
||||
\multicolumn{<?lsmb path_suffix_len ?>}{l}{<?lsmb desc ?>}%
|
||||
<?lsmb ELSE -?>
|
||||
<?lsmb desc ?>
|
||||
<?lsmb END -?>
|
||||
%
|
||||
& %
|
||||
<?lsmb FOREACH col IN report.sorted_col_ids;
|
||||
' & '; report.cells.$row.$col;
|
||||
END; -?>
|
||||
%
|
||||
\\
|
||||
%
|
||||
<?lsmb IF row_data.props.account_type != 'A'; -?>
|
||||
<?lsmb IF row_data.props.section_for; -?>
|
||||
\cline{<?lsmb path_depth ?>-<?lsmb last_col_no ?>}
|
||||
\noalign{\vskip 2pt}
|
||||
\cline{<?lsmb path_depth ?>-<?lsmb last_col_no ?>}
|
||||
<?lsmb ELSE -?>
|
||||
\\
|
||||
<?lsmb END -?>
|
||||
|
||||
<?lsmb END -?>
|
||||
<?lsmb END -?>
|
||||
|
||||
\end{longtable}
|
||||
\end{document}
|
||||
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-03-28
|
||||
File: ap_transaction.csv
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
account,amount,description,project
|
||||
<?lsmb FOREACH amount ?><?lsmb lc = loop.index ?><?lsmb accno.${lc} ?>,<?lsmb account.${lc} ?>,<?lsmb amount.${lc} ?>,<?lsmb linedescription.${lc} ?>,<?lsmb projectnumber.${lc} ?>
|
||||
<?lsmb END ?><?lsmb FOREACH t IN taxaccounts.split(' ') ?><?lsmb loop_count = loop.index -?>
|
||||
<?lsmb t.remove('"') ?>,<?lsmb tax.${loop_count} ?>,<?lsmb taxdescription.${loop_count} ?>,
|
||||
<?lsmb END ?>
|
||||
|
Can't render this file because it contains an unexpected character in line 15 and column 18.
|
@@ -0,0 +1,182 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-03-28
|
||||
File: ap_transaction.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('AP Transaction') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
span.c2 {font-size: 64%}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('AP Transaction') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb contact ?><br>
|
||||
<?lsmb END ?> <?lsmb IF vendorphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?> <?lsmb END ?> <?lsmb IF vendorfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?> <?lsmb END ?> <?lsmb IF email ?><br>
|
||||
<?lsmb email ?> <?lsmb END ?> <?lsmb IF vendortaxnumber ?>
|
||||
<p><?lsmb text('Taxnumber: [_1]', vendortaxnumber) ?> <?lsmb END ?></p>
|
||||
</td>
|
||||
<td align="right">
|
||||
<table>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Invoice #') ?></th>
|
||||
<td><?lsmb invnumber ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Date') ?></th>
|
||||
<td><?lsmb invdate ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Due') ?></th>
|
||||
<td><?lsmb duedate ?></td>
|
||||
</tr><?lsmb IF ponumber ?>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('PO #') ?></th>
|
||||
<td><?lsmb ponumber ?> </td>
|
||||
</tr><?lsmb END ?><?lsmb IF ordnumber ?>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Order #') ?></th>
|
||||
<td><?lsmb ordnumber ?> </td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Employee') ?></th>
|
||||
<td><?lsmb employee ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table>
|
||||
<?lsmb FOREACH account ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td><?lsmb accno.${loop_count} ?></td>
|
||||
<td><?lsmb account.${loop_count} ?></td>
|
||||
<td width="10"></td>
|
||||
<td align="right"><?lsmb amount.${loop_count} ?></td>
|
||||
<td width="10"></td>
|
||||
<td><?lsmb linedescription.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td width="10"></td>
|
||||
<td><?lsmb projectnumber.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<?lsmb IF taxincluded ?>
|
||||
<th colspan="2" align="right"><?lsmb text('Total') ?></th>
|
||||
<td width="10"></td>
|
||||
<td align="right"><?lsmb invtotal ?></td><?lsmb ELSE ?>
|
||||
<th colspan="2" align="right"><?lsmb text('Subtotal') ?></th>
|
||||
<td width="10"></td>
|
||||
<td align="right"><?lsmb subtotal ?></td><?lsmb END ?>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="2" align="right">
|
||||
<?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>@
|
||||
<?lsmb taxrate.${loop_count} ?> %</th>
|
||||
<td width="10"></td>
|
||||
<td align="right"><?lsmb tax.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?><?lsmb IF NOT taxincluded ?>
|
||||
<tr>
|
||||
<th colspan="2" align="right"><?lsmb text('Total') ?></th>
|
||||
<td width="10"></td>
|
||||
<td align="right"><?lsmb invtotal ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb text_amount ?>***** <?lsmb decimal ?>/100 <?lsmb currency ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td>
|
||||
</tr><?lsmb IF paid_1 ?>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>
|
||||
<table>
|
||||
<tr>
|
||||
<th><?lsmb text('Payments') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table>
|
||||
<tr>
|
||||
<th><?lsmb text('Date') ?></th>
|
||||
<th> </th>
|
||||
<th><?lsmb text('Source') ?></th>
|
||||
<th><?lsmb text('Memo') ?></th>
|
||||
<th><?lsmb text('Amount') ?></th>
|
||||
</tr><?lsmb END ?><?lsmb FOREACH payment ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<td><?lsmb paymentdate.${loop_count} ?></td>
|
||||
<td><?lsmb paymentaccount.${loop_count} ?></td>
|
||||
<td><?lsmb paymentsource.${loop_count} ?></td>
|
||||
<td><?lsmb paymentmemo.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb payment.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?><?lsmb IF paid_1 ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr><?lsmb IF taxincluded ?>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3" align="left"><span class=
|
||||
"c2"><?lsmb text('Taxes shown are included in price.') ?></span></th>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,138 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.2
|
||||
Date: 2022-07-22
|
||||
File: ap_transaction.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Fix line descriptions not shown in AR/AP transaction prints
|
||||
1.2 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
\centerline{\MakeUppercase{\textbf{<?lsmb text('AP Transaction') ?>}}}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?> <?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb contact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorphone ?>
|
||||
Tel: <?lsmb vendorphone ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorfax ?>
|
||||
Fax: <?lsmb vendorfax ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
|
||||
<?lsmb IF vendortaxnumber ?>
|
||||
Tax Number: <?lsmb vendortaxnumber ?>
|
||||
<?lsmb END ?>
|
||||
}
|
||||
\hfill
|
||||
\begin{tabular}[t]{ll}
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & <?lsmb invnumber ?> \\
|
||||
\textbf{<?lsmb text('Date') ?>} & <?lsmb invdate ?> \\
|
||||
\textbf{<?lsmb text('Due') ?>} & <?lsmb duedate ?> \\
|
||||
<?lsmb IF ponumber ?>
|
||||
\textbf{<?lsmb text('PO #') ?>} & <?lsmb ponumber ?> \\
|
||||
<?lsmb END ?>
|
||||
<?lsmb IF ordnumber ?>
|
||||
\textbf{<?lsmb text('Order #') ?>} & <?lsmb ordnumber ?> \\
|
||||
<?lsmb END ?>
|
||||
\textbf{<?lsmb text('Employee') ?>} & <?lsmb employee ?> \\
|
||||
\end{tabular}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}[t]{@{}llrX@{\hspace{1cm}}l@{}}
|
||||
<?lsmb FOREACH amount ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb accno.${lc} ?> &
|
||||
<?lsmb account.${lc} ?> &
|
||||
<?lsmb amount.${lc} ?> &
|
||||
<?lsmb linedescription.${lc} ?> &
|
||||
<?lsmb projectnumber.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
|
||||
\multicolumn{2}{r}{\textbf{Subtotal}} & <?lsmb subtotal ?> & \\
|
||||
<?lsmb FOREACH tax ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
\multicolumn{2}{r}{\textbf{<?lsmb taxdescription.${lc} ?> @ <?lsmb taxrate.${lc} ?> \%}} & <?lsmb tax.${lc} ?> & \\
|
||||
<?lsmb END ?>
|
||||
|
||||
\multicolumn{2}{r}{\textbf{Total}} & <?lsmb invtotal ?> & \\
|
||||
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb text_amount ?> ***** <?lsmb decimal ?>/100 <?lsmb currency ?>
|
||||
|
||||
<?lsmb IF notes ?>
|
||||
\vspace{0.3cm}
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF paid_1 ?>
|
||||
\begin{tabular}{@{}llllr@{}}
|
||||
\multicolumn{5}{c}{\textbf{<?lsmb text('Payments') ?>}} \\
|
||||
\hline
|
||||
\textbf{<?lsmb text('Date') ?>} & & \textbf{<?lsmb text('Source') ?>} & \textbf{<?lsmb text('Memo') ?>} & \textbf{<?lsmb text('Amount') ?>} \\
|
||||
<?lsmb END ?>
|
||||
<?lsmb FOREACH payment ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb paymentdate.${lc} ?> & <?lsmb paymentaccount.${lc} ?> & <?lsmb paymentsource.${lc} ?> & <?lsmb paymentmemo.${lc} ?> & <?lsmb payment.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
<?lsmb IF paid_1 ?>
|
||||
\end{tabular}
|
||||
<?lsmb END ?>
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-03-28
|
||||
File: ar_transaction.csv
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
account,description,amount,memo,project
|
||||
<?lsmb FOREACH amount ?><?lsmb lc = loop.index ?><?lsmb accno.${lc} ?>,<?lsmb account.${lc} ?>,<?lsmb amount.${lc} ?>,<?lsmb linedescription.${lc} ?>,<?lsmb projectnumber.${lc} ?>
|
||||
<?lsmb END ?><?lsmb FOREACH t IN taxaccounts.split(' ') ?><?lsmb loop_count = loop.index -?>
|
||||
<?lsmb t.remove('"') ?>,<?lsmb taxdescription.${loop_count} ?>,<?lsmb tax.${loop_count} ?>,,,
|
||||
<?lsmb END ?>
|
||||
|
Can't render this file because it contains an unexpected character in line 15 and column 18.
|
@@ -0,0 +1,182 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-03-28
|
||||
File: ar_transaction.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('AR Transaction') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
span.c2 {font-size: 64%}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('AR Transaction') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb contact ?><br>
|
||||
<?lsmb END ?> <?lsmb IF customerphone ?><br>
|
||||
<?lsmb text('Tel:') _ ' ' _ customerphone ?> <?lsmb END ?> <?lsmb IF customerfax ?><br>
|
||||
<?lsmb text('Fax:') _ ' ' _ customerfax ?> <?lsmb END ?> <?lsmb IF email ?><br>
|
||||
<?lsmb email ?> <?lsmb END ?> <?lsmb IF customertaxnumber ?><br>
|
||||
<?lsmb text('Taxnumber:') _ ' ' _ customertaxnumber ?> <?lsmb END ?></td>
|
||||
<td align="right">
|
||||
<table>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Invoice #') ?></th>
|
||||
<td><?lsmb invnumber ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Date') ?></th>
|
||||
<td><?lsmb invdate ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Due') ?></th>
|
||||
<td><?lsmb duedate ?></td>
|
||||
</tr><?lsmb IF ponumber ?>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('PO #') ?></th>
|
||||
<td><?lsmb ponumber ?> </td>
|
||||
</tr><?lsmb END ?><?lsmb IF ordnumber ?>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Order #') ?></th>
|
||||
<td><?lsmb ordnumber ?> </td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Salesperson') ?></th>
|
||||
<td><?lsmb employee ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table>
|
||||
<?lsmb FOREACH account ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td><?lsmb accno.${loop_count} ?></td>
|
||||
<td><?lsmb account.${loop_count} ?></td>
|
||||
<td width="10"> </td>
|
||||
<td align="right"><?lsmb amount.${loop_count} ?></td>
|
||||
<td width="10"> </td>
|
||||
<td><?lsmb linedescription.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td width="10"> </td>
|
||||
<td><?lsmb projectnumber.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<?lsmb IF taxincluded ?>
|
||||
<th colspan="2" align="right"><?lsmb text('Total') ?></th>
|
||||
<td width="10"> </td>
|
||||
<td align="right"><?lsmb invtotal ?></td><?lsmb ELSE ?>
|
||||
<th colspan="2" align="right"><?lsmb text('Subtotal') ?></th>
|
||||
<td width="10"> </td>
|
||||
<td align="right"><?lsmb subtotal ?></td><?lsmb END ?>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="2" align="right">
|
||||
<?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>@
|
||||
<?lsmb taxrate.${loop_count} ?> %</th>
|
||||
<td width="10"> </td>
|
||||
<td align="right"><?lsmb tax.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?><?lsmb IF NOT taxincluded ?>
|
||||
<tr>
|
||||
<th colspan="2" align="right"><?lsmb text('Total') ?></th>
|
||||
<td width="10"> </td>
|
||||
<td align="right"><?lsmb invtotal ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb text_amount ?>***** <?lsmb decimal ?>/100 <?lsmb currency ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td>
|
||||
</tr><?lsmb IF paid_1 ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table>
|
||||
<tr>
|
||||
<th><?lsmb text('Payments') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table>
|
||||
<tr>
|
||||
<th><?lsmb text('Date') ?></th>
|
||||
<th> </th>
|
||||
<th><?lsmb text('Source') ?></th>
|
||||
<th><?lsmb text('Amount') ?></th>
|
||||
</tr><?lsmb END ?><?lsmb FOREACH payment ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<td><?lsmb paymentdate.${loop_count} ?></td>
|
||||
<td><?lsmb paymentaccount.${loop_count} ?></td>
|
||||
<td><?lsmb paymentsource.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb payment.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?><?lsmb IF paid_1 ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="9" align="left"><span class=
|
||||
"c2"><?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>
|
||||
<?lsmb text('Registration') _ ' ' _ taxnumber.${loop_count} ?></span></th>
|
||||
</tr><?lsmb END ?><?lsmb IF taxincluded ?>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3" align="left"><span class=
|
||||
"c2"><?lsmb text('Taxes shown are included in price.') ?></span></th>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,163 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.2
|
||||
Date: 2022-07-22
|
||||
File: ar_transaction.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Fix line descriptions not shown in AR/AP transaction prints
|
||||
1.2 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
\parbox{\textwidth}{%
|
||||
\parbox[b]{.42\textwidth}{%
|
||||
<?lsmb company ?>
|
||||
|
||||
<?lsmb address ?>
|
||||
}
|
||||
%\parbox[b]{.2\textwidth}{
|
||||
%\includegraphics[scale=0.3]{ledger-smb}
|
||||
%}
|
||||
\hfill
|
||||
\begin{tabular}[b]{rr@{}}
|
||||
<?lsmb text('Tel:') ?> & <?lsmb tel ?>\\
|
||||
<?lsmb text('Fax:') ?> & <?lsmb fax ?>
|
||||
\end{tabular}
|
||||
|
||||
\rule[1.5em]{\textwidth}{0.5pt}
|
||||
}
|
||||
|
||||
\centerline{\MakeUppercase{<?lsmb text('AR Transaction') ?>}}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb contact ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
<?lsmb IF customerphone ?>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerfax ?>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
|
||||
<?lsmb IF customertaxnumber ?>
|
||||
<?lsmb text('Tax Number: [_1]', customertaxnumber) ?>
|
||||
<?lsmb END ?>
|
||||
}
|
||||
\hfill
|
||||
\begin{tabular}[t]{ll}
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & <?lsmb invnumber ?> \\
|
||||
\textbf{<?lsmb text('Date') ?>} & <?lsmb invdate ?> \\
|
||||
\textbf{<?lsmb text('Due') ?>} & <?lsmb duedate ?> \\
|
||||
<?lsmb IF ponumber ?>
|
||||
\textbf{PO \#} & <?lsmb ponumber ?> \\
|
||||
<?lsmb END ?>
|
||||
<?lsmb IF ordnumber ?>
|
||||
\textbf{<?lsmb text('Order #') ?>} & <?lsmb ordnumber ?> \\
|
||||
<?lsmb END ?>
|
||||
\textbf{<?lsmb text('Employee') ?>} & <?lsmb employee ?> \\
|
||||
\end{tabular}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}[t]{@{}llrX@{\hspace{1cm}}l@{}}
|
||||
<?lsmb FOREACH amount ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb accno.${lc} ?> &
|
||||
<?lsmb account.${lc} ?> &
|
||||
<?lsmb amount.${lc} ?> &
|
||||
<?lsmb linedescription.${lc} ?> &
|
||||
<?lsmb projectnumber.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
|
||||
\multicolumn{2}{r}{\textbf{Subtotal}} & <?lsmb subtotal ?> & \\
|
||||
<?lsmb FOREACH tax ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
\multicolumn{2}{r}{\textbf{<?lsmb taxdescription.${lc} ?> @ <?lsmb taxrate.${lc} ?> \%}} & <?lsmb tax.${lc} ?> & \\
|
||||
<?lsmb END ?>
|
||||
|
||||
\multicolumn{2}{r}{\textbf{Total}} & <?lsmb invtotal ?> & \\
|
||||
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb text_amount ?> ***** <?lsmb decimal ?>/100 <?lsmb currency ?>
|
||||
|
||||
<?lsmb IF notes ?>
|
||||
\vspace{0.3cm}
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF paid_1 ?>
|
||||
\begin{tabular}{@{}lllr@{}}
|
||||
\multicolumn{5}{c}{\textbf{<?lsmb text('Payments') ?>}} \\
|
||||
\hline
|
||||
\textbf{<?lsmb text('Date') ?>} & & \textbf{<?lsmb text('Source') ?>} &
|
||||
\textbf{<?lsmb text('Amount') ?>} \\
|
||||
<?lsmb END ?>
|
||||
<?lsmb FOREACH payment ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb paymentdate.${lc} ?> & <?lsmb paymentaccount.${lc} ?> & <?lsmb paymentsource.${lc} ?> & <?lsmb payment.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
<?lsmb IF paid_1 ?>
|
||||
\end{tabular}
|
||||
<?lsmb END ?>
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
<?lsmb FOREACH tax ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
\textbf{\scriptsize <?lsmb taxdescription.${lc} _ ' ' _ text('Registration') _ ' ' _ taxnumber.${lc} ?>} \\
|
||||
<?lsmb END ?>
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.2
|
||||
Date: 2024-10-08
|
||||
File: balance_sheet.csv
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.2 Restore 'heading_account' column (turning out not-spurious)
|
||||
1.1 Fix comparison columns and remove spurious 'heading_account' column
|
||||
|
||||
-?>
|
||||
account,description,is_heading,heading_account<?lsmb
|
||||
FOREACH col IN report.sorted_col_ids -?>
|
||||
,"<?lsmb report.cheads.ids.$col.props.description ?>"<?lsmb END; ?>
|
||||
<?lsmb FOREACH row IN report.sorted_row_ids ; -?>
|
||||
<?lsmb report.rheads.ids.$row.props.account_number -?>,"<?lsmb report.rheads.ids.$row.props.account_description ?>",<?lsmb IF report.rheads.ids.$row.props.account_type == 'H' -?>Y<?lsmb ELSE ?>N<?lsmb END ?>,<?lsmb
|
||||
PARENT = report.rheads.ids.$row.parent_id ;
|
||||
report.rheads.ids.$PARENT.props.account_number ?><?lsmb
|
||||
FOREACH col IN report.sorted_col_ids ; -?>
|
||||
,<?lsmb report.cells.$row.$col -?><?lsmb
|
||||
END; ?>
|
||||
<?lsmb END; -?>
|
||||
|
Can't render this file because it contains an unexpected character in line 18 and column 53.
|
@@ -0,0 +1,411 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 2.3
|
||||
Date: 2026-02-19
|
||||
File: balance_sheet.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
2.0 Created clickable section heads to collapse parts of hierarchical reports
|
||||
2.1 Simplify indentation calculations; many values are provided as variables as-of 1.13
|
||||
2.2 Support sections in the column dimension (used for foreign currency reports)
|
||||
2.3 Fix company address not showing below company name
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb title ?></title>
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<style type="text/css">
|
||||
table.c1 {border-collapse: collapse}
|
||||
|
||||
.flat-hierarchy .balancesheet .report-head th {
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.flat-hierarchy .balancesheet .section1.QL,
|
||||
.flat-hierarchy .income_statement .section1 {
|
||||
border: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.flat-hierarchy .balancesheet .section1,
|
||||
.flat-hierarchy .balancesheet .section2,
|
||||
.flat-hierarchy .income_statement .section2 {
|
||||
border-bottom: 3px double black;
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy .heading1,
|
||||
.financial-statement.flat-hierarchy .balancesheet .heading2 {
|
||||
border-top: 1px solid black;
|
||||
font-weight: bold;
|
||||
height: 2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy .income_statement .heading2 {
|
||||
border-top: 1px solid black;
|
||||
font-size: bigger;
|
||||
font-style: italic;
|
||||
height: 2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy table {
|
||||
margin-top: 3em;
|
||||
min-width: 60ex;
|
||||
}
|
||||
|
||||
.financial-statement.flat-hierarchy table td,
|
||||
.financial-statement.flat-hierarchy table th {
|
||||
padding-bottom: 3px; /* add space for the dashed line underlining hovered amounts */
|
||||
}
|
||||
|
||||
.financial-statement .company-name {
|
||||
font-family: monospace;
|
||||
margin-top: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.financial-statement .company-address {
|
||||
font-family: monospace;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#PNL a {
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL a:link {
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL a:visited {
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL a:hover {
|
||||
background-color: inherit;
|
||||
border-bottom: thin dashed;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#PNL td.amount {
|
||||
padding-left: 0.5em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#PNL tr.separator {
|
||||
min-height: 1em;
|
||||
}
|
||||
|
||||
#PNL tr.sectionhead th {
|
||||
font-weight: bold;
|
||||
margin-top: 4em;
|
||||
padding-top: 2em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#PNL td.total {
|
||||
border: 0;
|
||||
border-color: black;
|
||||
border-style: solid;
|
||||
border-top: 1px;
|
||||
}
|
||||
|
||||
#PNL th {
|
||||
padding-left: 5px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#PNL table {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
#PNL h1,
|
||||
h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#PNL th[colspan="1"].indent {
|
||||
width: 1em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="2"].indent {
|
||||
width: 2em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="3"].indent {
|
||||
width: 3em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="4"].indent {
|
||||
width: 4em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="5"].indent {
|
||||
width: 5em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="6"].indent {
|
||||
width: 6em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="7"].indent {
|
||||
width: 7em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="8"].indent {
|
||||
width: 8em;
|
||||
}
|
||||
|
||||
#PNL th[colspan="9"].indent {
|
||||
width: 9em;
|
||||
}
|
||||
|
||||
#PNL td.heading1,
|
||||
#PNL th.heading1 {
|
||||
border-bottom: 1px solid black;
|
||||
border-top: 1px solid black;
|
||||
font-weight: bold;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
#PNL td.heading2,
|
||||
#PNL th.heading2 {
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#PNL table.balancesheet {
|
||||
border-top: 1px solid black;
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
#PNL .amount {
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
.financial-statement h1,
|
||||
.financial-statement h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.financial-statement table {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.financial-statement td.amount {
|
||||
padding-left: 4em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.financial-statement tr.total td,
|
||||
.financial-statement tr.total th {
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
|
||||
.financial-statement tr.total td.amount {
|
||||
border-top: thick double black;
|
||||
}
|
||||
|
||||
.financial-statement th {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.financial-statement tr.section-head th,
|
||||
.financial-statement tr.total th {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.financial-statement a,
|
||||
.financial-statement a:visited {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.heading3.H {
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
.heading2.H {
|
||||
padding-bottom: 1.5em;
|
||||
}
|
||||
.heading4.H {
|
||||
padding-bottom: 0.75em;
|
||||
}
|
||||
.section1 {
|
||||
font-size: 140%;
|
||||
}
|
||||
.section2 {
|
||||
font-size: 120%;
|
||||
}
|
||||
.section3 {
|
||||
font-size: 110%;
|
||||
}
|
||||
.H {
|
||||
font-style: italic;
|
||||
}
|
||||
.section4 {
|
||||
font-size: 105%;
|
||||
}
|
||||
th {
|
||||
font-weight: normal;
|
||||
}
|
||||
@media print {
|
||||
.non-printed {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
let lvl = {};
|
||||
function toggle(tgt,cls) {
|
||||
let elms = document.querySelectorAll(tgt+' .'+cls);
|
||||
let newState = lvl[cls] ? '' : 'none';
|
||||
lvl[cls] = !lvl[cls];
|
||||
for ( var e = elms.length - 1; e >= 0; e-- ) {
|
||||
elms[e].style.display = newState;
|
||||
}
|
||||
}
|
||||
</script></head><?lsmb
|
||||
|
||||
max_col_path_depth = report.cheads.max_path_depth;
|
||||
max_row_path_depth = report.rheads.max_path_depth;
|
||||
IF report.legacy_hierarchy ;
|
||||
hierarchy = 'flat-hierarchy';
|
||||
ELSE ;
|
||||
hierarchy = 'full-hierarchy';
|
||||
END ;
|
||||
?>
|
||||
<body class="financial-statement <?lsmb dojo_theme ?> <?lsmb hierarchy ?>">
|
||||
<div id="PNL" class="financial-statement <?lsmb hierarchy ?> balance-sheet">
|
||||
<!-- TODO: Find better name!! -->
|
||||
<h1><?lsmb text('Balance Sheet') ?></h1>
|
||||
<h2><?lsmb HLINES.1 ?></h2>
|
||||
<div class="company-name">
|
||||
<?lsmb SETTINGS.company_name ?>
|
||||
</div>
|
||||
<div class="company-address">
|
||||
<?lsmb SETTINGS.company_address ?>
|
||||
</div>
|
||||
<table class="balancesheet c1">
|
||||
<colgroup class="headings">
|
||||
<?lsmb i = 1;
|
||||
WHILE i <= max_row_path_depth;
|
||||
' <col class="level' _ i _ '" />';
|
||||
i = i + 1;
|
||||
END;
|
||||
?>
|
||||
</colgroup>
|
||||
<colgroup class="values">
|
||||
<?lsmb i = 1;
|
||||
FOREACH col IN report.sorted_col_ids ;
|
||||
IF report.cheads.ids.$col.is_leaf;
|
||||
NEXT;
|
||||
END;
|
||||
' <col class="values' _ i _ '" />';
|
||||
i = i + 1;
|
||||
END;
|
||||
?>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<?lsmb head_level = 1;
|
||||
WHILE head_level <= max_col_path_depth ; ?>
|
||||
<tr class="report-head">
|
||||
<th colspan="<?lsmb max_row_path_depth ?>"></th>
|
||||
<?lsmb FOREACH col IN report.sorted_col_ids;
|
||||
IF report.cheads.ids.$col.props.section_for;
|
||||
NEXT;
|
||||
END;
|
||||
IF head_level == report.cheads.ids.$col.path.size -?>
|
||||
<th data-id="<?lsmb col ?>"
|
||||
colspan="<?lsmb report.cheads.ids.$col.leaves ?>"
|
||||
rowspan="<?lsmb report.cheads.ids.$col.is_leaf ? (max_col_path_depth - report.cheads.ids.$col.path.size + 1) : 1 ?>"><?lsmb report.cheads.ids.$col.props.description ?></th>
|
||||
<?lsmb END -?><?lsmb END ?>
|
||||
</tr>
|
||||
<?lsmb head_level = head_level + 1;
|
||||
END ?>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?lsmb FOREACH row IN report.sorted_row_ids ;
|
||||
row_data = report.rheads.ids.$row;
|
||||
path_depth = row_data.path_depth;
|
||||
path_prefix_len = row_data.path_prefix_len;
|
||||
path_suffix_len = row_data.path_suffix_len;
|
||||
IF row_data.props.account_type == 'H' ;
|
||||
class = 'class="heading' _ path_depth _ ' ' _ row_data.props.account_type _ '"';
|
||||
clazz = "heading" _ path_depth _ ' ' _ row_data.props.account_type;
|
||||
row_type = 'H';
|
||||
ELSIF row_data.props.section_for ;
|
||||
class = 'class="section' _ path_depth _ ' ' _ row_data.heading_props.account_category _ '"';
|
||||
clazz = "section" _ path_depth _ ' ' _ row_data.heading_props.account_category;
|
||||
row_type = 'H';
|
||||
ELSE;
|
||||
class = 'class="account"';
|
||||
clazz = 'account';
|
||||
row_type = 'A';
|
||||
END;
|
||||
?>
|
||||
<tr class="<?lsmb FOREACH sec IN row_data.path ; IF NOT loop.last(); " sub-" _ sec ; END; END; ?>" <?lsmb IF row_type == 'H' ; ?> onclick="toggle('', 'sub-<?lsmb row_data.path.last ?>')" <?lsmb END ?> >
|
||||
<?lsmb IF report.legacy_hierarchy ?>
|
||||
<?lsmb IF path_prefix_len > 0 ?>
|
||||
<th colspan="<?lsmb path_prefix_len ?>" class="indent"> </th>
|
||||
<?lsmb END ?>
|
||||
<?lsmb ELSE ?>
|
||||
<?lsmb FILTER repeat(path_prefix_len) -?>
|
||||
<th class="indent"> </th>
|
||||
<?lsmb- END -?>
|
||||
<?lsmb END ?>
|
||||
<th colspan="<?lsmb path_suffix_len ?>" <?lsmb class ?>>
|
||||
<?lsmb IF row_data.props.section_for ;
|
||||
row_data.props.row_description ?></th>
|
||||
<th colspan="<?lsmb report.cheads.ids.size ?>" <?lsmb class ?>>
|
||||
<?lsmb ELSE -?>
|
||||
<?lsmb row_data.props.row_description ?></th><?lsmb FOREACH col IN report.sorted_col_ids;
|
||||
IF not report.cheads.ids.$col.is_leaf;
|
||||
NEXT;
|
||||
END;
|
||||
-?>
|
||||
<td class="amount <?lsmb clazz ?>">
|
||||
<?lsmb report.cells.$row.$col ?>
|
||||
</td><?lsmb END ?><?lsmb END ?>
|
||||
</tr><?lsmb END ?><!--
|
||||
<h2><?lsmb text('Key Ratios'); ?></h2>
|
||||
<h2><?lsmb text('First column only') ?></h2>
|
||||
<table>
|
||||
<tr><th><?lsmb text('Assets to Liabilities') ?></th>
|
||||
<td><?lsmb report.balance_sheet.ratios.AL ?></td>
|
||||
</tr>
|
||||
<tr><th><?lsmb text('Assets to Equity') ?></th>
|
||||
<td><?lsmb report.balance_sheet.ratios.AQ ?></td>
|
||||
</tr>
|
||||
<tr><th><?lsmb text('Equity to Liabilities') ?></th>
|
||||
<td><?lsmb report.balance_sheet.ratios.QL ?></td>
|
||||
</tr>
|
||||
-->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="non-printed">Click on the headings to collapse sections.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,136 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.4
|
||||
Date: 2025-08-31
|
||||
File: balance_sheet.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
1.2 Fixed company address not showing
|
||||
1.3 Simplify indentation calculations; as of 1.13, many pre-calculated
|
||||
values are provided as variables
|
||||
1.4 Support for sections in the column dimension (used for
|
||||
foreign currency reports)
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } -?>
|
||||
|
||||
<?lsmb
|
||||
max_col_path_depth = report.cheads.max_path_depth;
|
||||
max_row_path_depth = report.rheads.max_path_depth;
|
||||
leaf_columns = 0;
|
||||
FOREACH col IN report.sorted_col_ids ;
|
||||
IF report.cheads.ids.$col.is_leaf ;
|
||||
leaf_columns = leaf_columns + 1;
|
||||
END;
|
||||
END;
|
||||
last_col_no = max_row_path_depth + 1 + leaf_columns;
|
||||
IF report.legacy_hierarchy ;
|
||||
hierarchy = 'flat-hierarchy';
|
||||
ELSE ;
|
||||
hierarchy = 'full-hierarchy';
|
||||
END ;
|
||||
|
||||
-?>
|
||||
|
||||
\documentclass[10pt]{article}
|
||||
\usepackage{longtable}
|
||||
\usepackage{multirow}
|
||||
\usepackage[<?lsmb SETTINGS.papersize ?>paper,top=2cm,bottom=1.5cm,left=1.1cm,right=1.5cm]{geometry}
|
||||
\begin{document}
|
||||
\renewcommand\baselinestretch{1.2}\selectfont
|
||||
\begin{center}
|
||||
\Huge{<?lsmb text('Balance Sheet') ?>}
|
||||
|
||||
<?lsmb HLINES.1 ?>
|
||||
|
||||
\small{
|
||||
\texttt{<?lsmb SETTINGS.company_name ?>}
|
||||
|
||||
|
||||
\texttt{<?lsmb SETTINGS.company_address ?>}
|
||||
}
|
||||
\end{center}
|
||||
|
||||
|
||||
\begin{longtable}{@{\extracolsep{10pt}}<?lsmb l = 'l'; l.repeat(max_row_path_depth) -?>p{2cm}<?lsmb
|
||||
l = 'r'; l.repeat(report.sorted_col_ids.size); -?>}
|
||||
\\
|
||||
<?lsmb head_level = 1;
|
||||
WHILE head_level <= max_col_path_depth; ?>
|
||||
\multicolumn{<?lsmb max_row_path_depth ?>}{l}{} &%
|
||||
<?lsmb
|
||||
FOREACH col IN report.sorted_col_ids;
|
||||
IF report.cheads.ids.$col.props.section_for;
|
||||
NEXT;
|
||||
END;
|
||||
IF head_level == report.cheads.ids.$col.path.size ;
|
||||
' & \multicolumn{'; report.cheads.ids.$col.leaves ; '}{l}{\multirow{'; report.cheads.ids.$col.is_leaf ? (max_col_path_depth - report.cheads.ids.$col.path.size + 1) : 1 ; '}{*}{\shortstack{';
|
||||
report.cheads.ids.$col.props.description ;
|
||||
'}}} ';
|
||||
ELSIF head_level > report.cheads.ids.$col.path.size ;
|
||||
' & ';
|
||||
END;
|
||||
END;
|
||||
?> \\
|
||||
<?lsmb head_level = head_level + 1;
|
||||
END ?>
|
||||
\\
|
||||
<?lsmb FOREACH row IN report.sorted_row_ids;
|
||||
row_data = report.rheads.ids.$row;
|
||||
path_depth = row_data.path_depth;
|
||||
path_prefix_len = row_data.path_prefix_len;
|
||||
path_suffix_len = row_data.path_suffix_len;
|
||||
IF row_data.props.section_for ;
|
||||
IF row_data.heading_props.account_category == 'QL';
|
||||
NEXT;
|
||||
END;
|
||||
END;
|
||||
|
||||
desc = row_data.props.row_description;
|
||||
IF report.rheads.ids.$row.props.account_type != 'A';
|
||||
IF NOT report.rheads.ids.$row.props.section_for ;
|
||||
'\cline{' _ path_depth _ '-' _ last_col_no _ '} ';
|
||||
ELSE;
|
||||
desc = '\Large{' _ row_data.props.row_description _ '}';
|
||||
END;
|
||||
desc = '\textbf{\emph{' _ desc _ '}}';
|
||||
END;
|
||||
-?>%
|
||||
<?lsmb amp = '& '; amp.repeat(path_prefix_len); -?>
|
||||
<?lsmb IF path_suffix_len > 1 -?>
|
||||
\multicolumn{<?lsmb path_suffix_len ?>}{l}{<?lsmb desc ?>}%
|
||||
<?lsmb ELSE; ?>
|
||||
<?lsmb desc ?>
|
||||
<?lsmb END -?>
|
||||
%
|
||||
& %
|
||||
<?lsmb FOREACH col IN report.sorted_col_ids;
|
||||
IF report.cheads.ids.$col.props.section_for;
|
||||
NEXT;
|
||||
END;
|
||||
' & '; report.cells.$row.$col;
|
||||
END; -?>
|
||||
%
|
||||
\\
|
||||
%
|
||||
<?lsmb IF row_data.props.account_type != 'A'; -?>
|
||||
<?lsmb IF row_data.props.section_for; -?>
|
||||
\cline{<?lsmb path_depth ?>-<?lsmb last_col_no ?>}
|
||||
\noalign{\vskip 2pt}
|
||||
\cline{<?lsmb path_depth ?>-<?lsmb last_col_no ?>}
|
||||
<?lsmb ELSE -?>
|
||||
\\
|
||||
<?lsmb END -?>
|
||||
|
||||
<?lsmb END ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
\end{longtable}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,129 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: bin_list.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Bin List') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Bin List') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('From') ?></span></th>
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('Ship To') ?></span></th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?> <?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb text('Attn: [_1]', contact) ?> <?lsmb END ?> <?lsmb IF vendorphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?> <?lsmb END ?> <?lsmb IF vendorfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?> <?lsmb END ?> <?lsmb IF email ?><br>
|
||||
<?lsmb email ?> <?lsmb END ?></td>
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?> <?lsmb shiptocountry ?>
|
||||
<?lsmb END ?><br>
|
||||
<?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Order #') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Date') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Contact') ?></th><?lsmb IF warehouse ?>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Warehouse') ?></th><?lsmb END ?>
|
||||
<th width="17%" align="left"><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left"><?lsmb text('Ship via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb ordnumber ?> </td><?lsmb IF shippingdate ?>
|
||||
<td><?lsmb shippingdate ?></td><?lsmb ELSE ?>
|
||||
<td><?lsmb orddate ?></td><?lsmb END ?>
|
||||
<td><?lsmb employee ?> </td><?lsmb IF warehouse ?>
|
||||
<td><?lsmb warehouse ?></td><?lsmb END ?>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="left"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Serialnumber') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Recd') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Bin') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td><?lsmb runningnumber.${loop_count} ?></td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td><?lsmb serialnumber.${loop_count} ?></td>
|
||||
<td><?lsmb deliverydate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb ship.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td><?lsmb bin.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,144 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: bin_list.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
% Breaking old pagebreak directives
|
||||
%<?xlsmb pagebreak 65 27 37 ?>
|
||||
%\end{tabularx}
|
||||
%
|
||||
%\newpage
|
||||
%
|
||||
%\markboth{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}
|
||||
%
|
||||
%\begin{tabularx}{\textwidth}{@{}rlXllrrll@{}}
|
||||
% \textbf{Item} & \textbf{Number} & \textbf{Description} & \textbf{Serial Number} & & \textbf{Qty} & \textbf{Recd} & & \textbf{Bin} \\
|
||||
%<?xlsmb end pagebreak ?>
|
||||
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{<?lsmb text('From') ?>}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{<?lsmb text('Ship To') ?>}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Bin List') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{6}{|X}|} \hline
|
||||
\textbf{Order \#} & \textbf{Date} & \textbf{Contact}
|
||||
<?lsmb IF warehouse ?>
|
||||
& \textbf{<?lsmb text('Warehouse') ?>}
|
||||
<?lsmb END ?>
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>} & \textbf{<?lsmb text('Ship via') ?>} \\ [0.5em]
|
||||
\hline
|
||||
|
||||
<?lsmb ordnumber ?>
|
||||
<?lsmb IF shippingdate ?>
|
||||
& <?lsmb shippingdate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb IF NOT shippingdate ?>
|
||||
& <?lsmb orddate ?>
|
||||
<?lsmb END ?>
|
||||
& <?lsmb employee ?>
|
||||
<?lsmb IF warehouse ?>
|
||||
& <?lsmb warehouse ?>
|
||||
<?lsmb END ?>
|
||||
& <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}rllllrrll@{}}
|
||||
\textbf{<?lsmb text('Item') ?>} & \textbf{<?lsmb text('Number') ?>}
|
||||
& \textbf{<?lsmb text('Description') ?>} &
|
||||
\textbf{<?lsmb text('Serial Number') ?>} &
|
||||
& \textbf{<?lsmb text('Qty') ?>} & \textbf{<?lsmb text('Recd') ?>} &
|
||||
& \textbf{<?lsmb text('Bin') ?>} \\
|
||||
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb runningnumber.${lc} ?> &
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb serialnumber.${lc} ?> &
|
||||
<?lsmb deliverydate.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb ship.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> &
|
||||
<?lsmb bin.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,44 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: check.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } ?>
|
||||
\documentclass{scrartcl}
|
||||
\usepackage{iftex}
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\else
|
||||
\usepackage{fontspec}
|
||||
\fi
|
||||
\usepackage{tabularx}
|
||||
\usepackage[<?lsmb SETTINGS.papersize ?>paper,top=2cm,bottom=1.5cm,left=1.1cm,right=1.5cm]{geometry}
|
||||
\usepackage{graphicx}
|
||||
|
||||
<?lsmb REQUIRE check_base ?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{9pt}{9pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb PROCESS check_single ?>
|
||||
|
||||
\end{document}
|
||||
<?lsmb END # FILTER latex { format="$FORMAT($PROCESSOR)" } -?>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: check_base.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb BLOCK check_single ?>
|
||||
\parbox[t]{12cm}{
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address ?>}
|
||||
\hfill
|
||||
\parbox[t]{6cm}{\hfill <?lsmb source ?>}
|
||||
|
||||
\vspace*{0.6cm}
|
||||
|
||||
<?lsmb text_amount ?> \dotfill <?lsmb decimal ?>/100 \makebox[0.5cm]{\hfill}
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
\hfill <?lsmb datepaid ?> \makebox[2cm]{\hfill} <?lsmb
|
||||
format_amount({amount = amount, format = '1,000.00', money = 1}) ?>
|
||||
|
||||
% different date format for datepaid
|
||||
% <?lsmb DD ?><?lsmb MM ?><?lsmb YYYY ?>
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb street1 ?>
|
||||
|
||||
<?lsmb street2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END # state ?>
|
||||
|
||||
<?lsmb mail_code ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{1.8cm}
|
||||
|
||||
<?lsmb memo ?>
|
||||
|
||||
\vspace{0.8cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
<?lsmb name ?> \hfill <?lsmb datepaid ?> \hfill <?lsmb source ?>
|
||||
|
||||
\vspace{0.5cm}
|
||||
\begin{tabularx}{\textwidth}{lXrr@{}}
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & \textbf{<?lsmb text('Invoice Date') ?>}
|
||||
& \textbf{<?lsmb text('Amount Due') ?>} & \textbf{<?lsmb text('Applied') ?>} \\
|
||||
<?lsmb FOR inv = invoices ?>
|
||||
<?lsmb inv.invnumber ?> & <?lsmb inv.invoice_date ?> \dotfill
|
||||
& <?lsmb inv.due ?> & <?lsmb inv.paid ?> \\
|
||||
<?lsmb END # FOREACH inv ?>
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
<?lsmb memo ?>
|
||||
|
||||
\vfill
|
||||
<?lsmb message ?>
|
||||
<?lsmb END # BLOCK ?>
|
||||
@@ -0,0 +1,62 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: check_multiple.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } ?>
|
||||
\documentclass{scrartcl}
|
||||
\usepackage{iftex}
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\else
|
||||
\usepackage{fontspec}
|
||||
\fi
|
||||
\usepackage{tabularx}
|
||||
\usepackage{graphicx}
|
||||
\usepackage[<?lsmb SETTINGS.papersize ?>paper,top=2cm,bottom=1.5cm,left=1.1cm,right=1.5cm]{geometry}
|
||||
|
||||
<?lsmb PROCESS check_base ?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{9pt}{9pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb FOR check = checks ?>
|
||||
<?lsmb name = check.name ?>
|
||||
<?lsmb INCLUDE check_single
|
||||
source = check.source
|
||||
control_code = check.control_code
|
||||
text_amount = check.text_amount
|
||||
decimal = check.decimal
|
||||
amount = check.amount
|
||||
legal_name = check.legal_name
|
||||
street1 = check.street1
|
||||
street2 = check.street2
|
||||
city = check.city
|
||||
state = check.state
|
||||
mail_code = check.mail_code
|
||||
country = check.country
|
||||
memo = check.memo
|
||||
invoices = check.invoices
|
||||
?>
|
||||
\clearpage
|
||||
<?lsmb END # FOR check ?>
|
||||
\end{document}
|
||||
<?lsmb END # FILTER latex { format="$FORMAT($PROCESSOR)" } -?>
|
||||
@@ -0,0 +1,62 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.2
|
||||
Date: 2025-05-02
|
||||
File: display_report.csv
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged 'dynatable.csv' into this template
|
||||
1.2 Fix missing newlines after each row
|
||||
|
||||
|
||||
-?>
|
||||
<?lsmb-
|
||||
|
||||
BLOCK do_quote ;
|
||||
IF VALUE.to_output.defined();
|
||||
value = VALUE.to_output();
|
||||
ELSE;
|
||||
value = VALUE;
|
||||
END;
|
||||
|
||||
IF value.match('[^0-9.+-]'); # any non-digit means run escaping
|
||||
'"'; value.replace('"', '""'); '"'; # " balance the double quotes
|
||||
ELSE;
|
||||
value;
|
||||
END;
|
||||
END;
|
||||
|
||||
BLOCK dynatable;
|
||||
SKIP_TYPES = ['hidden', 'radio', 'checkbox'];
|
||||
|
||||
FOREACH COL IN columns;
|
||||
IF SKIP_TYPES.grep(COL.type).empty();
|
||||
UNLESS loop.first();
|
||||
',';
|
||||
END;
|
||||
INCLUDE do_quote VALUE = COL.name;
|
||||
END;
|
||||
END;
|
||||
"\n";
|
||||
|
||||
FOREACH ROW IN tbody.rows;
|
||||
FOREACH COL IN columns;
|
||||
COL_ID = COL.col_id;
|
||||
IF SKIP_TYPES.grep(COL.type).empty();
|
||||
UNLESS loop.first();
|
||||
',';
|
||||
END;
|
||||
INCLUDE do_quote VALUE = ROW.$COL_ID;
|
||||
END;
|
||||
END;
|
||||
"\n";
|
||||
END;
|
||||
END;
|
||||
|
||||
|
||||
PROCESS dynatable tbody = {rows = rows };
|
||||
?>
|
||||
|
Can't render this file because it contains an unexpected character in line 27 and column 7.
|
@@ -0,0 +1,167 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2024-08-21
|
||||
File: display_report.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged 'dynatable.html' into this template
|
||||
|
||||
|
||||
-?>
|
||||
<?lsmb-
|
||||
|
||||
# Simplified block from UI/lib/dynatable.html; see that file for docs
|
||||
BLOCK dynatable -?>
|
||||
<table id="<?lsmb attributes.id ?>"
|
||||
class="dynatable <?lsmb attributes.class ?>"
|
||||
width="<?lsmb attributes.width ?>">
|
||||
<?lsmb- IF !hide_header -?>
|
||||
<thead>
|
||||
<tr>
|
||||
<?lsmb- FOREACH COL IN columns;
|
||||
IF COL.type != 'hidden'; -?>
|
||||
<th class="<?lsmb COL.col_id _ ' ' _ COL.class _ ' ' _ COL.type | html ?>"><?lsmb COL.name | html ?>
|
||||
</th>
|
||||
<?lsmb- END; END; -?>
|
||||
</tr>
|
||||
</thead>
|
||||
<?lsmb- END -?>
|
||||
<tbody>
|
||||
<?lsmb-
|
||||
PFX = attributes.input_prefix;
|
||||
FOREACH ROW IN tbody.rows; -?>
|
||||
<tr class="<?lsmb ROW.html_class _ ' ' _ ROW.row_id ?>">
|
||||
<?lsmb- FOREACH COL IN columns;
|
||||
ROWSPANNED = COL.col_id _ "_ROWSPANNED";
|
||||
IF ROW.$ROWSPANNED;
|
||||
NEXT;
|
||||
END;
|
||||
ROWSPAN = COL.col_id _ "_ROWSPAN";
|
||||
IF ROW.$ROWSPAN;
|
||||
ROWSPAN=" rowspan=\"" _ ROW.$ROWSPAN _ "\"";
|
||||
ELSE;
|
||||
ROWSPAN="";
|
||||
END;
|
||||
|
||||
TYPE = COL.type;
|
||||
NOHREF = COL.col_id _ "_NOHREF";
|
||||
IF (ROW.NOINPUT AND TYPE != 'href' AND TYPE != 'hidden')
|
||||
OR (ROW.$NOHREF AND TYPE == 'href');
|
||||
TYPE = 'text';
|
||||
END;
|
||||
|
||||
NEXT IF TYPE == 'hidden'; -?>
|
||||
<td class="<?lsmb COL.col_id _ ' ' _ COL.class _ ' ' _ COL.type | html ?>"<?lsmb ROWSPAN ?>>
|
||||
<?lsmb- IF TYPE == 'boolean_checkmark' OR TYPE == 'checkbox' OR TYPE == 'radio';
|
||||
IF ROW.${COL.col_id};
|
||||
'✓';
|
||||
END;
|
||||
|
||||
ELSIF TYPE == 'select';
|
||||
# ROW is passed as an argument if COL.options is a callback
|
||||
# function, which allows dropdown options to be dynamically
|
||||
# customised to each row. The ROW argument is harmlessly
|
||||
# ignored by Template Toolkit if COL.options is a static
|
||||
# arrayref common to every row.
|
||||
OPTION_LIST = COL.options(ROW);
|
||||
|
||||
FOREACH option IN OPTION_LIST;
|
||||
IF (option.value | html) == ROW.${COL.col_id};
|
||||
option.text | html;
|
||||
END;
|
||||
END;
|
||||
ELSE -?>
|
||||
<?lsmb ROW.${COL.col_id} ?>
|
||||
<?lsmb- END -?>
|
||||
</td>
|
||||
<?lsmb- END; END -?>
|
||||
</tr>
|
||||
<?lsmb- END ?>
|
||||
</tbody>
|
||||
<?lsmb- IF tfoot -?>
|
||||
<tfoot>
|
||||
<?lsmb- FOREACH ROW IN tfoot.rows;
|
||||
SPACECOUNT = 0 -?>
|
||||
<tr>
|
||||
<?lsmb- FOREACH COL IN columns;
|
||||
COL_ID = COL.col_id;
|
||||
IF tfoot.coltypes.$COL_ID;
|
||||
TYPE = tfoot.coltypes.$COL_ID;
|
||||
ELSE;
|
||||
TYPE = COL.type;
|
||||
END;
|
||||
|
||||
DOJO = tfoot.dojo_type.$COL_ID;
|
||||
DOJO_PROPS = tfoot.dojo_props.$COL_ID;
|
||||
IF tfoot.coltypes.${COL.col_id} == 'spacer';
|
||||
SPACECOUNT = SPACECOUNT + 1;
|
||||
ELSE;
|
||||
IF SPACECOUNT > 0 ?>
|
||||
<td colspan="<?lsmb SPACECOUNT ?>"> </td>
|
||||
<?lsmb END;
|
||||
NEXT IF TYPE == 'hidden';
|
||||
-?>
|
||||
<td class="<?lsmb COL.col_id | html ?>">
|
||||
<?lsmb- IF TYPE == 'boolean_checkmark' OR TYPE == 'checkbox' OR TYPE == 'radio';
|
||||
IF ROW.${COL.col_id};
|
||||
'✓';
|
||||
END;
|
||||
ELSE -?>
|
||||
<?lsmb ROW.${COL.col_id} ?>
|
||||
<?lsmb- END -?>
|
||||
</td>
|
||||
<?lsmb- END -?>
|
||||
</tr>
|
||||
<?lsmb- END -?>
|
||||
</tfoot>
|
||||
<?lsmb- END -?>
|
||||
</table>
|
||||
<?lsmb- END; -?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<style>
|
||||
table tbody tr:nth-child(2n) {
|
||||
background-color: #e6e6fa;
|
||||
}
|
||||
table tbody tr:nth-child(2n+1) {
|
||||
background-color: #ffeeec;
|
||||
}
|
||||
table td, table th {
|
||||
padding: 0.2em 1ex;
|
||||
}
|
||||
table thead {
|
||||
background-color: #bcd8f4;
|
||||
}
|
||||
label {
|
||||
font-weight: bold;
|
||||
}
|
||||
div.heading-section {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="heading-section">
|
||||
<div class="report-header">
|
||||
<label><?lsmb text('Report Name') ?>:</label>
|
||||
<span class="report-header"><?lsmb name ?></span>
|
||||
</div>
|
||||
<div class="report-header">
|
||||
<label><?lsmb text('Company') ?>:</label>
|
||||
<span class="report-header"><?lsmb SETTINGS.company_name ?></span>
|
||||
</div><?lsmb FOREACH LINE IN hlines ?>
|
||||
<div class="report-header">
|
||||
<label><?lsmb LINE.text ?>:</label>
|
||||
<span class="report-header"><?lsmb LINE.value ?></span>
|
||||
</div><?lsmb END ?>
|
||||
</div><?lsmb PROCESS dynatable tbody = {rows = rows }
|
||||
attributes = {class = 'report', order_url = order_url } ?>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,91 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2024-08-21
|
||||
File: display_report.odst
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged 'dynatable.odst' into this template
|
||||
|
||||
-?>
|
||||
<?lsmb-
|
||||
|
||||
BLOCK dynatable;
|
||||
ROWCOUNT = 1;
|
||||
IF tbody.rows.size;
|
||||
ROWCOUNT = ROWCOUNT + tbody.rows.size;
|
||||
END;
|
||||
IF tfoot.rows.size;
|
||||
ROWCOUNT = ROWCOUNT + tbody.rows.size;
|
||||
END;
|
||||
|
||||
-?>
|
||||
<worksheet name="<?lsmb attributes.id | html ?>" rows="<?lsmb ROWCOUNT ?>" columns="<?lsmb columns.size + 1 ?>">
|
||||
<format bottom="5" bg_color="lime" bottom_color="magenta">
|
||||
<?lsmb IF !hide_header -?>
|
||||
<row>
|
||||
<?lsmb FOREACH COL IN columns;
|
||||
IF COL.type != 'hidden'; -?>
|
||||
<cell text="<?lsmb COL.name | html ?>" />
|
||||
<?lsmb END; END; ?>
|
||||
</row>
|
||||
<?lsmb END -?>
|
||||
</format>
|
||||
<format align="right">
|
||||
<?lsmb FOREACH ROW IN tbody.rows -?>
|
||||
<row>
|
||||
<?lsmb FOREACH COL IN columns -?>
|
||||
<?lsmb IF COL.type != 'hidden'; -?>
|
||||
<cell text="<?lsmb ROW.${COL.col_id} | html ?>" />
|
||||
<?lsmb END;
|
||||
END -?>
|
||||
</row>
|
||||
<?lsmb END -?>
|
||||
<?lsmb- IF tfoot -?>
|
||||
<?lsmb- FOREACH ROW IN tfoot.rows; ?>
|
||||
<row>
|
||||
<?lsmb FOREACH COL IN columns ?>
|
||||
<?lsmb IF COL.type != 'hidden'; -?>
|
||||
<cell text="<?lsmb ROW.${COL.col_id} | html ?>" />
|
||||
<?lsmb END; END ?>
|
||||
</row>
|
||||
<?lsmb END;
|
||||
END ?>
|
||||
</format>
|
||||
</worksheet>
|
||||
<?lsmb
|
||||
|
||||
END; # BLOCK dynatable
|
||||
|
||||
|
||||
# MAIN template
|
||||
HEADS = 2;
|
||||
|
||||
IF hlines.size;
|
||||
HEADS = HEADS + hlines.size;
|
||||
END;
|
||||
|
||||
-?>
|
||||
<workbook>
|
||||
<worksheet name="<?lsmb text('Title Page') | html ?>" rows="<?lsmb HEADS ?>"
|
||||
columns="2">
|
||||
<row><cell text="<?lsmb text('Report Name') | html ?>:" />
|
||||
<cell text="<?lsmb name | html ?>" />
|
||||
</row>
|
||||
<row><cell text="<?lsmb text('Company') | html ?>:" />
|
||||
<cell text="<?lsmb SETTINGS.company_name | html ?>" />
|
||||
</row>
|
||||
<?lsmb FOREACH HLINE IN hlines -?>
|
||||
<row><cell text="<?lsmb HLINE.text | html ?>:" />
|
||||
<cell text="<?lsmb HLINE.value | html ?>" />
|
||||
</row>
|
||||
<?lsmb END -?>
|
||||
</worksheet>
|
||||
<?lsmb PROCESS dynatable
|
||||
attributes = {id = name }
|
||||
tbody = {rows = rows } ?>
|
||||
</workbook>
|
||||
@@ -0,0 +1,135 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.3
|
||||
Date: 2024-08-21
|
||||
File: display_report.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.3 Merged 'dynatable.html' into this template
|
||||
1.2 Simplified report header generation factored out of dynatable
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
|
||||
-?>
|
||||
<?lsmb-
|
||||
|
||||
BLOCK dynatable;
|
||||
|
||||
TOTAL_WIDTH=14; # cm. using A4 as a basis because it is slightly narrower than
|
||||
# US Letter. This way the dynatable works for both paper sizes.
|
||||
# This assumes a 1cm margin on either side. --CT
|
||||
DECLARED_WIDTH=0;
|
||||
|
||||
SKIP_TYPES = ['hidden', 'radio', 'checkbox'];
|
||||
|
||||
|
||||
FOREACH COL IN columns;
|
||||
DECLARED_WIDTH = DECLARED_WIDTH + COL.pwidth; # pwidth is arbitrary scale
|
||||
END;
|
||||
|
||||
IF DECLARED_WIDTH > 0;
|
||||
WIDTH_PER_P = TOTAL_WIDTH / DECLARED_WIDTH;
|
||||
ELSE;
|
||||
WIDTH_PER_P = 1;
|
||||
END;
|
||||
?>
|
||||
\begin{longtable}{<?lsmb-
|
||||
FOREACH COL IN columns;
|
||||
IF COL.psep_before;
|
||||
'|';
|
||||
END;
|
||||
IF 1 == SKIP_TYPES.grep(COL.type).size() or COL.html_only;
|
||||
'';
|
||||
ELSIF COL.pwidth;
|
||||
"p{" _ (COL.pwidth * WIDTH_PER_P) _ "cm}";
|
||||
ELSIF COL.palign;
|
||||
COL.palign;
|
||||
ELSE;
|
||||
'l';
|
||||
END;
|
||||
IF COL.psep_after;
|
||||
'|';
|
||||
END;
|
||||
END;
|
||||
-?>}
|
||||
<?lsmb
|
||||
FOREACH COL IN columns;
|
||||
IF 0 == SKIP_TYPES.grep(COL.type).size() AND ! COL.html_only;
|
||||
UNLESS loop.first();
|
||||
' & ';
|
||||
END;
|
||||
escape(COL.name);
|
||||
END;
|
||||
END;
|
||||
-?>\tabularnewline
|
||||
\hline\hline
|
||||
\endfirsthead
|
||||
<?lsmb
|
||||
FOREACH COL IN columns;
|
||||
IF 0 == SKIP_TYPES.grep(COL.type).size() AND ! COL.html_only;
|
||||
UNLESS loop.first() ;
|
||||
' & ';
|
||||
END;
|
||||
escape(COL.name);
|
||||
END;
|
||||
END;
|
||||
-?>\tabularnewline
|
||||
\hline\hline
|
||||
\endhead
|
||||
<?lsmb
|
||||
FOREACH ROW IN tbody.rows;
|
||||
FOREACH COL IN columns;
|
||||
IF 0 == SKIP_TYPES.grep(COL.type).size() AND ! COL.html_only;
|
||||
UNLESS loop.first();
|
||||
' & ';
|
||||
END;
|
||||
?>\begin{tabular}[t]{@{}l@{}}<?lsmb
|
||||
ROW.${COL.col_id};
|
||||
?>\end{tabular}<?lsmb
|
||||
END;
|
||||
END;
|
||||
?>\tabularnewline
|
||||
<?lsmb
|
||||
END; # FOREACH ?>
|
||||
\end{longtable}
|
||||
<?lsmb END; # block dynatable
|
||||
|
||||
|
||||
# MAIN template
|
||||
|
||||
SKIP_TYPES = ['hidden', 'radio', 'checkbox'];
|
||||
COLNUMBER = 0;
|
||||
|
||||
FOREACH COL IN columns;
|
||||
IF 0 == SKIP_TYPES.grep(COL.type).size() and ! COL.html_only.defined();
|
||||
COLNUMBER = COLNUMBER + 1;
|
||||
END;
|
||||
END;
|
||||
FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
|
||||
-?>
|
||||
\documentclass[<?lsmb SETTINGS.papersize ?>paper]{article}
|
||||
\usepackage{longtable}
|
||||
\usepackage[margin=1cm]{geometry}
|
||||
\begin{document}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{rl}
|
||||
\textbf{<?lsmb text('Report Name') ?>}: & <?lsmb name ?> \\
|
||||
\textbf{<?lsmb text('Company') ?>}: & <?lsmb SETTINGS.company_name ?> \\
|
||||
<?lsmb- newlines = new_heads(hlines);
|
||||
FOREACH LINE IN newlines -?>
|
||||
\textbf{<?lsmb LINE.text ?>}: & <?lsmb LINE.value ?> \\
|
||||
<?lsmb- END -?>
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
<?lsmb PROCESS dynatable
|
||||
tbody = { rows = rows };
|
||||
?>
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,91 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2024-08-21
|
||||
File: display_report.xlst
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged 'dynatable.xlst' into this template
|
||||
|
||||
|
||||
-?>
|
||||
<?lsmb-
|
||||
|
||||
BLOCK dynatable;
|
||||
ROWCOUNT = 1;
|
||||
IF tbody.rows.size;
|
||||
ROWCOUNT = ROWCOUNT + tbody.rows.size;
|
||||
END; #IF
|
||||
IF tfoot.rows.size;
|
||||
ROWCOUNT = ROWCOUNT + tbody.rows.size;
|
||||
END; # IF
|
||||
-?>
|
||||
<worksheet name="<?lsmb attributes.id | html ?>" rows="<?lsmb ROWCOUNT ?>" columns="<?lsmb columns.size + 1 ?>">
|
||||
<format bottom="5" bg_color="lime" bottom_color="magenta">
|
||||
<?lsmb IF !hide_header -?>
|
||||
<row>
|
||||
<?lsmb FOREACH COL IN columns;
|
||||
IF COL.type != 'hidden'; -?>
|
||||
<cell text="<?lsmb COL.name | html ?>" />
|
||||
<?lsmb END; # IF
|
||||
END; # FOREACH ?>
|
||||
</row>
|
||||
<?lsmb END; # IF -?>
|
||||
</format>
|
||||
<format align="right">
|
||||
<?lsmb FOREACH ROW IN tbody.rows -?>
|
||||
<row>
|
||||
<?lsmb FOREACH COL IN columns -?>
|
||||
<?lsmb IF COL.type != 'hidden'; -?>
|
||||
<cell text="<?lsmb ROW.${COL.col_id} | html ?>" />
|
||||
<?lsmb END; # IF
|
||||
END; #FOREACH -?>
|
||||
</row>
|
||||
<?lsmb END; #FOREACH -?>
|
||||
<?lsmb- IF tfoot -?>
|
||||
<?lsmb- FOREACH ROW IN tfoot.rows; ?>
|
||||
<row>
|
||||
<?lsmb FOREACH COL IN columns ?>
|
||||
<?lsmb IF COL.type != 'hidden'; -?>
|
||||
<cell text="<?lsmb ROW.${COL.col_id} | html ?>" />
|
||||
<?lsmb END; # IF
|
||||
END; # FOREACH ?>
|
||||
</row>
|
||||
<?lsmb END; # FOREACH
|
||||
END; #IF ?>
|
||||
</format>
|
||||
</worksheet>
|
||||
<?lsmb
|
||||
|
||||
END; # BLOCK dynatable
|
||||
|
||||
# MAIN template
|
||||
HEADS = 2;
|
||||
IF hlines.size;
|
||||
HEADS = HEADS + hlines.size;
|
||||
END;
|
||||
|
||||
?>
|
||||
<workbook>
|
||||
<worksheet name="<?lsmb text('Title Page') | html ?>" rows="<?lsmb HEADS ?>"
|
||||
columns="2">
|
||||
<row><cell text="<?lsmb text('Report Name') | html ?>:" />
|
||||
<cell text="<?lsmb name | html ?>" />
|
||||
</row>
|
||||
<row><cell text="<?lsmb text('Company') | html ?>:" />
|
||||
<cell text="<?lsmb SETTINGS.company_name | html ?>" />
|
||||
</row>
|
||||
<?lsmb FOREACH HLINE IN hlines -?>
|
||||
<row><cell text="<?lsmb HLINE.text | html ?>:" />
|
||||
<cell text="<?lsmb HLINE.value | html ?>" />
|
||||
</row>
|
||||
<?lsmb END -?>
|
||||
</worksheet>
|
||||
<?lsmb PROCESS dynatable
|
||||
attributes = {id = name }
|
||||
tbody = {rows = rows } ?>
|
||||
</workbook>
|
||||
@@ -0,0 +1,37 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: envelope.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } ?>
|
||||
\documentclass{scrartcl}
|
||||
\usepackage{iftex}
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\else
|
||||
\usepackage{fontspec}
|
||||
\fi
|
||||
\usepackage{tabularx}
|
||||
\usepackage[paperheight=11cm, paperwidth=23cm,top=3.5cm,bottom=3cm,left=12cm,right=1cm]{geometry}
|
||||
\begin{document}
|
||||
\thispagestyle{empty}
|
||||
\noindent <?lsmb name ?>\\
|
||||
<?lsmb address1 ?> \\
|
||||
<?lsmb- IF address2 ?>
|
||||
<?lsmb address2 ?> \\
|
||||
<?lsmb- END ?>
|
||||
<?lsmb city ?>
|
||||
<?lsmb- IF state -?>, <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>\\
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: invoice.894.edi
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
ISA*00* *00* *12*XXXXXXXXXX *01*XXXXXXXXXX *<?lsmb EDI_CURRENT_DATE ?>*<?lsmb EDI_CURRENT_TIME ?>*^*00501*<?lsmb FILTER format('%09d'); id ; END ?>*0*P*>~
|
||||
GS*DX*7196333434*031958655*<?lsmb EDI_CURRENT_DATE ?>*<?lsmb EDI_CURRENT_TIME ?>*0001*X*005010~
|
||||
ST*894*<?lsmb id ?>~
|
||||
G82*<?lsmb IF reverse; 'C'; ELSE; 'X'; END ?>*<?lsmb invnumber ?>*0001*0000*<?lsmb edidate(transdate) ?>~
|
||||
<?lsmb t_qty = 0; FOREACH n IN number; lc = loop.index; t_qty = t_qty + qty.${lc} -?>
|
||||
LS*<?lsmb loop.count ?>~
|
||||
G83*<?lsmb loop.count?>*<?lsmb qty.${lc} ?>*UC*<?lsmb number.${lc} ?>*<?lsmb FILTER format('%.4f'); sellprice.${lc}; END ?>**~
|
||||
LE*<?lsmb loop.count ?>~
|
||||
<?lsmb END # FOREACH n in number -?>
|
||||
G84*<?lsmb t_qty?>*<?lsmb invtotal ?>~
|
||||
SE*<?lsmb (3 * lc) + 7 ?>*<?lsmb id ?>~
|
||||
GE*1*0001~
|
||||
IEA*1*<?lsmb FILTER format('%09d'); id ; END ?>~
|
||||
@@ -0,0 +1,240 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.2
|
||||
Date: 2025-10-29
|
||||
File: invoice.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Extended with 'shiptoattn' (at the attention of)
|
||||
1.2 Add missing space before 'on' in tax specification row
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Invoice') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
span.c5 {font-size: 64%}
|
||||
span.c4 {font-size: 51%}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1">
|
||||
<?lsmb IF reverse; text('Credit Invoice'); ELSE; text('Invoice'); END; ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('To') ?></span></th>
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('Ship To') ?></span></th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb contact ?><br>
|
||||
<?lsmb END ?> <?lsmb IF customerphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?> <?lsmb END ?> <?lsmb IF customerfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?> <?lsmb END ?> <?lsmb IF email ?><br>
|
||||
<?lsmb email ?> <?lsmb END ?></td>
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb IF shiptoattn ?><?lsmb shiptoattn ?><br><?lsmb END ?>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?><br>
|
||||
<?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb shiptocontact ?><br>
|
||||
<?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?> <?lsmb IF shiptoemail ?><br>
|
||||
<?lsmb shiptoemail ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="14%" align="left" nowrap><?lsmb text('Invoice #') ?></th>
|
||||
<th width="14%" align="left" nowrap><?lsmb text('Date') ?></th>
|
||||
<th width="14%" align="left" nowrap><?lsmb text('Due') ?></th>
|
||||
<th width="14%" align="left"><?lsmb text('Order #') ?></th>
|
||||
<th width="14%" align="left" nowrap><?lsmb text('Salesperson') ?></th>
|
||||
<th width="14%" align="left" nowrap><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="14%" align="left" nowrap><?lsmb text('Ship via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb invnumber ?></td>
|
||||
<td><?lsmb invdate ?></td>
|
||||
<td><?lsmb duedate ?></td>
|
||||
<td><?lsmb ordnumber ?> </td>
|
||||
<td><?lsmb employee ?> </td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="right"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th> </th>
|
||||
<th align="right"><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th> </th>
|
||||
<th align="right"><span class="c2"><?lsmb text('Unit Price') ?></span></th>
|
||||
<th align="right"><span class="c2"><?lsmb text('Disc %') ?></span></th>
|
||||
<th align="right"><span class="c2"><?lsmb text('Extended') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td align="right"><?lsmb runningnumber.${loop_count} ?>.</td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td><?lsmb deliverydate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb sellprice.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb discountrate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb linetotal.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="9">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr><?lsmb IF tax -?>
|
||||
<tr>
|
||||
<th colspan="7" align="right"><?lsmb text('Subtotal') ?></th>
|
||||
<td colspan="2" align="right"><?lsmb subtotal ?></td>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="7" align="right">
|
||||
<?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?> on
|
||||
<?lsmb taxbase.${loop_count} ?> @ <?lsmb taxrate.${loop_count} ?> %</th>
|
||||
<td colspan="2" align="right"><?lsmb tax.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?><?lsmb END -?>
|
||||
<tr>
|
||||
<th colspan="7" align="right"><?lsmb text('Total') ?></th>
|
||||
<td colspan="2" align="right"><?lsmb invtotal ?></td>
|
||||
</tr><?lsmb IF paymentdate.0 ?>
|
||||
<tr>
|
||||
<th colspan="7" align="right"><?lsmb text('Paid') ?></th>
|
||||
<td colspan="2" align="right">- <?lsmb paid ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="5"> </td>
|
||||
<td colspan="4">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="5"> </td>
|
||||
<th colspan="2" align="right" nowrap><?lsmb text('Balance') ?></th>
|
||||
<th colspan="2" align="right"><?lsmb total ?></th>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<?lsmb IF notes ?>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td><?lsmb END ?>
|
||||
<td><?lsmb text_amount ?>***** <?lsmb decimal ?>/100</td>
|
||||
<td align="right" nowrap><?lsmb text('All prices in [_1]', currency) ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb IF paymentdate.0 ?>
|
||||
<tr>
|
||||
<td colspan="9">
|
||||
<table width="60%">
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Payments') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Date') ?></th>
|
||||
<th align="left"><?lsmb text('Account') ?></th>
|
||||
<th align="left"><?lsmb text('Source') ?></th>
|
||||
<th align="left"><?lsmb text('Amount') ?></th>
|
||||
</tr><?lsmb FOREACH payment ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<td><?lsmb paymentdate.${loop_count} ?></td>
|
||||
<td><?lsmb paymentaccount.${loop_count} ?></td>
|
||||
<td><?lsmb paymentsource.${loop_count} ?></td>
|
||||
<td><?lsmb payment.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?lsmb text('Thank you for your valued business!') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="60%"><span class="c4"><?lsmb text('Payment due by [_1].', duedate) ?>
|
||||
<?lsmb text('Items returned are subject to a 10% restocking charge. A return authorization must be obtained from [_1] before goods are returned. Returns must be shipped prepaid and properly insured. [_1] will not be responsible for damages during transit.', company) ?></span></td>
|
||||
<td width="40%">
|
||||
X
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="9" align="left"><span class=
|
||||
"c5"><?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>
|
||||
<?lsmb text('Registration [_1]', taxnumber.${loop_count}) ?></span></th>
|
||||
</tr><?lsmb END ?><?lsmb IF taxincluded ?>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="8" align="left"><span class=
|
||||
"c5"><?lsmb text('Taxes shown are included in price.') ?></span></th>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,257 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.3
|
||||
Date: 2024-08-14
|
||||
File: invoice.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Fix spelling mistake (acrue -> accrue)
|
||||
1.2 Merged xelatex targetting templates with those targetting pdflatex
|
||||
1.3 Extended with 'shiptoattn' (at the attention of)
|
||||
|
||||
|
||||
The "$FORMAT($PROCESSOR)" below evaluates to e.g. "pdf(pdflatex)".
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\setlength\LTleft{0pt}
|
||||
\setlength\LTright{0pt}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb BLOCK multiline -?>
|
||||
\begin{minipage}{2in}
|
||||
\medskip
|
||||
\raggedright
|
||||
<?lsmb string ?>
|
||||
\end{minipage}
|
||||
<?lsmb- END -?>
|
||||
|
||||
\newsavebox{\ftr}
|
||||
\sbox{\ftr}{
|
||||
\parbox{\textwidth}{
|
||||
\tiny
|
||||
\rule[1.5em]{\textwidth}{0.5pt}
|
||||
<?lsmb text('Payment due NET [_1] Days from date of Invoice.', terms) ?>
|
||||
<?lsmb text('Interest on overdue amounts will accrue at the rate of 12% per annum starting from [_1] until paid in full. Items returned are subject to a 10% restocking charge.', duedate) ?>
|
||||
<?lsmb text('A return authorization must be obtained from [_1] before goods are returned. Returns must be shipped prepaid and properly insured. [_1] will not be responsible for damages during transit.', company) ?>
|
||||
}
|
||||
}
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
\markboth{<?lsmb company ?>\hfill <?lsmb invnumber ?>}{<?lsmb company ?>\hfill <?lsmb invnumber ?>}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state -?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb contact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerphone ?>
|
||||
Tel: <?lsmb customerphone ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerfax ?>
|
||||
Fax: <?lsmb customerfax ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{<?lsmb text('Ship To') ?>}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb IF shiptoattn -?>
|
||||
<?lsmb shiptoattn ?>
|
||||
|
||||
<?lsmb END -?>
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate -?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?><?lsmb END ?> <?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF shiptocontact ?>
|
||||
<?lsmb shiptocontact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
Tel: <?lsmb shiptophone ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
Fax: <?lsmb shiptofax ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb
|
||||
IF reverse;
|
||||
text('Credit Invoice');
|
||||
ELSE;
|
||||
text('Invoice');
|
||||
END; ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{7}{|X}|} \hline
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & \textbf{<?lsmb text('Date') ?>}
|
||||
& \textbf{<?lsmb text('Due') ?>} & \textbf{<?lsmb text('Order #') ?>}
|
||||
& \textbf{<?lsmb text('Salesperson') ?>}
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship via') ?>} \\ [0.5em]
|
||||
\hline
|
||||
<?lsmb invnumber ?> & <?lsmb invdate ?> & <?lsmb duedate ?> & <?lsmb ordnumber ?> & <?lsmb employee ?>
|
||||
& <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}r|llcrlrr|r}
|
||||
|
||||
\textbf{<?lsmb text('Item') ?>}
|
||||
& \textbf{<?lsmb text('Number') ?>}
|
||||
& \textbf{<?lsmb text('Description') ?>}
|
||||
& \textbf{<?lsmb text('Delivery') ?>}
|
||||
& \textbf{<?lsmb text('Qty') ?>}
|
||||
& \textbf{<?lsmb text('Unit') ?>}
|
||||
& \textbf{<?lsmb text('Price') ?>}
|
||||
& \textbf{<?lsmb text('Disc %') ?>}
|
||||
& \textbf{<?lsmb text('Amount') ?>} \\
|
||||
\hline
|
||||
\endhead
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb runningnumber.${lc} ?> &
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb INCLUDE multiline string = item_description.${lc} ?> &
|
||||
<?lsmb deliverydate.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> &
|
||||
<?lsmb sellprice.${lc} ?> &
|
||||
<?lsmb discountrate.${lc} ?> &
|
||||
<?lsmb linetotal.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
<?lsmb IF tax ?>
|
||||
\hline \hline
|
||||
\multicolumn{8}{r|}{<?lsmb text('Subtotal') ?>} & <?lsmb subtotal ?> \\*
|
||||
<?lsmb FOREACH tax ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
\multicolumn{8}{r|}{<?lsmb taxdescription.${lc}
|
||||
?> on <?lsmb taxbase.${lc} ?> }
|
||||
& <?lsmb tax.${lc} ?> \\*
|
||||
<?lsmb END ?>
|
||||
<?lsmb END ?>
|
||||
\hline \hline
|
||||
\multicolumn{8}{r|}{<?lsmb text('Total') ?>} & <?lsmb invtotal ?> \\*
|
||||
|
||||
<?lsmb IF paymentdate.0 ?>
|
||||
\multicolumn{8}{r|}{ <?lsmb text('Paid') ?> } & - <?lsmb paid ?> \\*
|
||||
\hline
|
||||
\hline
|
||||
\multicolumn{8}{r|}{<?lsmb text('Balance') ?>} & <?lsmb total ?>\\
|
||||
<?lsmb END ?>
|
||||
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
\hfill
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb text_amount ?> ***** <?lsmb decimal ?>/100
|
||||
\hfill
|
||||
<?lsmb text('All prices in [_1].', currency) ?>
|
||||
|
||||
\vspace{12pt}
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
}
|
||||
|
||||
\vfill
|
||||
|
||||
<?lsmb IF paymentdate.0 ?>
|
||||
\begin{tabularx}{10cm}{@{}lXlr@{}}
|
||||
\textbf{<?lsmb text('Payments') ?>} & & & \\
|
||||
\hline
|
||||
\textbf{<?lsmb text('Date') ?>} & & \textbf{<?lsmb text('Source') ?>}
|
||||
& \textbf{<?lsmb text('Amount') ?>} \\
|
||||
<?lsmb FOREACH payment ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb paymentdate.${lc} ?> & <?lsmb paymentaccount.${lc} ?> & <?lsmb paymentsource.${lc} ?> & <?lsmb payment.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{tabularx}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb FOR FILE IN file_list ?>
|
||||
\includegraphics[scale=0.3]{<?lsmb file_path _ '/' _ FILE.file_name ?>}
|
||||
<?lsmb END ?>
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\centerline{\textbf{<?lsmb text('Thank You for your valued business!') ?>}}
|
||||
|
||||
\rule{\textwidth}{0.5pt}
|
||||
|
||||
\usebox{\ftr}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: letterhead.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<h4><?lsmb company ?><br>
|
||||
<?lsmb address ?></h4>
|
||||
</td><?lsmb# using "comment block" template tag to suppress output
|
||||
|
||||
There are two options of including a picture in the output:
|
||||
|
||||
1. An external image available from your webserver
|
||||
This option has the downside that the webserver and image
|
||||
need to remain available for extended periods.
|
||||
|
||||
<img src="https://example.com/logo.png" border="0" height="58">
|
||||
|
||||
2. An image embedded in the invoice itself
|
||||
This option has the downside that the invoice file will
|
||||
be larger and the HTML source will be less readable, however,
|
||||
it eliminates external dependencies, retaining the integrity
|
||||
of the invoice, independent of what happens to publicly hosted
|
||||
images
|
||||
|
||||
<img src="data:image/png;base64,<-?lsmb dbfile_base64('logo.png') ?->"
|
||||
border="0" height="58">
|
||||
|
||||
Please note that this is dependent on having a file uploaded by
|
||||
the name 'logo.png' under "System - Files". Also, when using this
|
||||
option, please remove the hyphens from '<-?lsmb' and '?->'; they
|
||||
are used to hide the text from the template processor.
|
||||
|
||||
?>
|
||||
<th><!--Replace this comment with one of the two image tags above --></th>
|
||||
<td align="right">
|
||||
<h4><?lsmb text('Tel: [_1]', tel) ?><br>
|
||||
<?lsmb text('Fax: [_1]', fax) ?></h4>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: letterhead.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
\parbox{\textwidth}{%
|
||||
\parbox[b]{.42\textwidth}{%
|
||||
<?lsmb company ?>
|
||||
|
||||
<?lsmb address ?>
|
||||
}
|
||||
\parbox[b]{.2\textwidth}{
|
||||
<?lsmb# using "comment block" template tag to suppress output
|
||||
|
||||
To include a logo in your LaTeX document, it needs to be retrieved from
|
||||
the database and temporarily stored in a location accessible to the PDF
|
||||
generator. The function 'dbfile_path' handles that.
|
||||
|
||||
To use this functionality, (a) remove the percent sign before the
|
||||
\includegraphics command and (b) make sure all templates which INCLUDE
|
||||
'letterhead', contain '\usepackage{graphics}'
|
||||
|
||||
If the generated output is to be PDF output, make sure that the image is
|
||||
a PNG image as shown below. In case Postscript (PS) or EPS output, make
|
||||
sure the image is (E)PS.
|
||||
|
||||
For information on the avaliable options for the 'includegraphics'
|
||||
command, see https://en.wikibooks.org/wiki/LaTeX/Importing_Graphics
|
||||
|
||||
Example (remove the 3 %-signs):
|
||||
|
||||
?>
|
||||
|
||||
% \includegraphics[scale=0.3]{<%?lsmb dbfile_path('logo.png') ?%>}
|
||||
|
||||
|
||||
}\hfill
|
||||
\begin{tabular}[b]{rr@{}}
|
||||
<?lsmb text('Tel:') ?> & <?lsmb tel ?>\\
|
||||
<?lsmb text('Fax:') ?> & <?lsmb fax ?>
|
||||
\end{tabular}
|
||||
|
||||
\rule[1.5em]{\textwidth}{0.5pt}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: packing_list.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Packing List') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
span.c4 {font-size: 51%}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Packing List') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th width="50%" align="left"><span class="c2"><?lsmb text('Ship To:') ?></span></th>
|
||||
<th width="50%"> </th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?></td>
|
||||
<td><?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?> <?lsmb shiptoemail ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left"><?lsmb text('Invoice #') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Order #') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Date') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Contact') ?></th><?lsmb IF warehouse ?>
|
||||
<th width="17%" align="left"><?lsmb text('Warehouse') ?></th><?lsmb END ?>
|
||||
<th width="17%" align="left"><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left"><?lsmb text('Ship via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb invnumber ?> </td>
|
||||
<td><?lsmb ordnumber ?> </td><?lsmb IF shippingdate ?>
|
||||
<td><?lsmb shippingdate ?></td><?lsmb ELSE ?>
|
||||
<td><?lsmb transdate ?></td><?lsmb END ?>
|
||||
<td><?lsmb employee ?> </td><?lsmb IF warehouse ?>
|
||||
<td><?lsmb warehouse ?> </td><?lsmb END ?>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="left"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Serial #') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Ship') ?></span></th>
|
||||
<th> </th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td><?lsmb runningnumber.${loop_count} ?></td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td><?lsmb serialnumber.${loop_count} ?></td>
|
||||
<td><?lsmb deliverydate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb ship.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr><?lsmb IF notes ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td>Notes</td>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="70%"><span class=
|
||||
"c4"><?lsmb text('Items returned are subject to a 10% restocking charge. A return authorization must be obtained from [_1] before goods are returned. Returns must be shipped prepaid and properly insured. [_1] will not be responsible for damages during transit.', company) ?></span></td>
|
||||
<td width="30%">
|
||||
X
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,166 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: packing_list.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
\newsavebox{\ftr}
|
||||
\sbox{\ftr}{
|
||||
\parbox{\textwidth}{
|
||||
\tiny
|
||||
\rule[1.5em]{\textwidth}{0.5pt}
|
||||
<?lsmb text('Items returned are subject to a 10% restocking charge.') ?>
|
||||
<?lsmb text('A return authorization must be obtained from [_1] before goods are returned. Returns must be shipped prepaid and properly insured. [_1] will not be responsible for damages during transit.', company) ?>
|
||||
}
|
||||
}
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
% Breaking old pagebreak directive
|
||||
%<?xlsmb pagebreak 65 27 37 ?>
|
||||
%\end{tabularx}
|
||||
%
|
||||
%\newpage
|
||||
%
|
||||
%\markboth{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}
|
||||
%
|
||||
%\begin{tabularx}{\textwidth}{@{}rlXllrrl@{}}
|
||||
% \textbf{Item} & \textbf{Number} & \textbf{Description} & \textbf{Serial Number} & & \textbf{Qty} & \textbf{Ship} & \\
|
||||
%<?xlsmb end pagebreak ?>
|
||||
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{Ship To}} \hfill
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
<?lsmb shiptocontact ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
Tel: <?lsmb shiptophone ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
Fax: <?lsmb shiptofax ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Packing List') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{7}{|X}|} \hline
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & \textbf{<?lsmb text('Order #') ?>}
|
||||
& \textbf{<?lsmb text('Date') ?>} & \textbf{<?lsmb text('Contact') ?>}
|
||||
<?lsmb IF warehouse ?>
|
||||
& \textbf{<?lsmb text('Warehouse') ?>}
|
||||
<?lsmb END ?>
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship via') ?>} \\ [0.5em]
|
||||
\hline
|
||||
|
||||
<?lsmb invnumber ?> & <?lsmb ordnumber ?>
|
||||
<?lsmb IF shippingdate ?>
|
||||
& <?lsmb shippingdate ?>
|
||||
<?lsmb ELSE ?>
|
||||
& <?lsmb transdate ?>
|
||||
<?lsmb END ?>
|
||||
& <?lsmb employee ?>
|
||||
<?lsmb IF warehouse ?>
|
||||
& <?lsmb warehouse ?>
|
||||
<?lsmb END ?>
|
||||
& <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}rllllrrl@{}}
|
||||
\textbf{<?lsmb text('Item') ?>} & \textbf{<?lsmb text('Number') ?>}
|
||||
& \textbf{<?lsmb text('Description') ?>}
|
||||
& \textbf{<?lsmb text('Serial Number') ?>} &
|
||||
& \textbf{<?lsmb text('Qty') ?>} & \textbf{<?lsmb text('Ship') ?>} & \\
|
||||
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb runningnumber.${lc} ?> &
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb serialnumber.${lc} ?> &
|
||||
<?lsmb deliverydate.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb ship.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\vspace{12pt}
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
|
||||
}
|
||||
|
||||
\vfill
|
||||
|
||||
\rule{\textwidth}{0.5pt}
|
||||
|
||||
\usebox{\ftr}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,117 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: pick_list.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Pick List') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Pick List') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th width="50%" align="left"><span class="c2"><?lsmb text('Ship To:')
|
||||
?></span></th>
|
||||
<th width="50%"> </th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?></td>
|
||||
<td><?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?> <?lsmb shiptoemail ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="15%" align="left"><?lsmb text('Invoice #') ?></th>
|
||||
<th width="15%" align="left"><?lsmb text('Order #') ?></th>
|
||||
<th width="10%" align="left"><?lsmb text('Date') ?></th>
|
||||
<th width="15%" align="left" nowrap><?lsmb text('Contact') ?></th>
|
||||
<th width="15%" align="left"><?lsmb text('Warehouse') ?></th>
|
||||
<th width="10%" align="left"><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="10%" align="left"><?lsmb text('Ship via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb invnumber ?> </td>
|
||||
<td><?lsmb ordnumber ?> </td><?lsmb IF shippingdate ?>
|
||||
<td><?lsmb shippingdate ?></td><?lsmb ELSE ?>
|
||||
<td><?lsmb transdate ?></td><?lsmb END ?>
|
||||
<td><?lsmb employee ?> </td>
|
||||
<td><?lsmb warehouse ?> </td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="left"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Ship') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Bin') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td><?lsmb runningnumber.${loop_count} ?></td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td align="right">[ ]</td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb bin.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,134 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: pick_list.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
% Breaking old pagebreak directive
|
||||
%<?xlsmb pagebreak 65 27 37 ?>
|
||||
%\end{tabularx}
|
||||
%
|
||||
%\newpage
|
||||
%
|
||||
%\markboth{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}
|
||||
%
|
||||
%\begin{tabularx}{\textwidth}{@{}rlXrcll@{}}
|
||||
% \textbf{Item} & \textbf{Number} & \textbf{Description} &
|
||||
% \textbf{Qty} & \textbf{Ship} & & \textbf{Bin} \\
|
||||
%
|
||||
%<?xlsmb end pagebreak ?>
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{Ship To}
|
||||
} \hfill
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
<?lsmb shiptocontact ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
Tel: <?lsmb shiptophone ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
Fax: <?lsmb shiptofax ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Pick List') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{7}{|X}|} \hline
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & \textbf{<?lsmb text('Order #') ?>}
|
||||
& \textbf{<?lsmb text('Date') ?>} & \textbf{<?lsmb text('Contact') ?>}
|
||||
& \textbf{<?lsmb text('Warehouse') ?>}
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship via') ?>} \\ [0.5em]
|
||||
\hline
|
||||
<?lsmb invnumber ?> & <?lsmb ordnumber ?>
|
||||
<?lsmb IF shippingdate ?>
|
||||
& <?lsmb shippingdate ?>
|
||||
<?lsmb ELSE ?>
|
||||
& <?lsmb transdate ?>
|
||||
<?lsmb END ?>
|
||||
& <?lsmb employee ?> & <?lsmb warehouse ?> & <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}rllrcll@{}}
|
||||
\textbf{<?lsmb text('Item') ?>} & \textbf{<?lsmb text('Number') ?>}
|
||||
& \textbf{<?lsmb text('Description') ?>} &
|
||||
\textbf{<?lsmb text('Qty') ?>} & \textbf{<?lsmb text('Ship') ?>} &
|
||||
& \textbf{<?lsmb text('Bin') ?>} \\
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb runningnumber.${lc} ?> &
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> & [\hspace{1cm}] &
|
||||
<?lsmb unit.${lc} ?> & <?lsmb bin.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,104 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: printPayment.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title></title>
|
||||
<style type="text/css">
|
||||
td.c7 {text-align:left}
|
||||
span.c6 {text-transform:uppercase}
|
||||
th.c5 {text-align:right}
|
||||
td.c4 {text-align:center}
|
||||
span.c3 {color: black}
|
||||
h1.c2 {text-transform:uppercase}
|
||||
th.c1 {text-align:left}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?lsmb column_count = 0 -?>
|
||||
<table width="100%" id="header_table">
|
||||
<tr id="header_bar">
|
||||
<th id="top_bar_header" colspan="2" width="30%" class="c1">
|
||||
<h5>LOGO AREA<br>
|
||||
<?lsmb text('Address: [_1]', company.address) ?><br>
|
||||
<?lsmb text('Tel: [_1]', company.telephone) ?></h5>
|
||||
</th>
|
||||
<th class="c1">
|
||||
<h1 class="c2"><?lsmb text('Payment Order Number [_1]', header.payment_reference) ?></h1>
|
||||
</th>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="datarow" width="100%" cellspacing="0" cellpadding="0" border="1">
|
||||
<tr>
|
||||
<th class="titledatarow" align="center" width="7%"><span class=
|
||||
"c3"><?lsmb text('Invoice') ?> <?lsmb text('Number')?></span></th>
|
||||
<th class="titledatarow" align="center" width="11%"><span class=
|
||||
"c3"><?lsmb text('Account') ?></span></th>
|
||||
<th class="titledatarow" align="center" width="68%"><span class=
|
||||
"c3"><?lsmb text('Description') ?></span></th>
|
||||
<th class="titledatarow" align="center" width="14%"><span class=
|
||||
"c3"><?lsmb text('Source') ?></span></th>
|
||||
<th class="titledatarow" align="center" width="14%"><span class=
|
||||
"c3"><?lsmb text('Amount') ?></span></th>
|
||||
</tr><?lsmb FOREACH row IN rows -?>
|
||||
<tr valign="top">
|
||||
<td class="c4"><?lsmb row.invoice_number ?></td>
|
||||
<td class="c4"><?lsmb row.chart_description?>--<?lsmb row.chart_accno?></td>
|
||||
<td class="c4"><?lsmb row.memo -?></td>
|
||||
<td class="c4"><?lsmb row.source ?></td>
|
||||
<td class="c4"><?lsmb row.amount ?></td>
|
||||
</tr><?lsmb END -?>
|
||||
<tr valign="top">
|
||||
<th class="c5" colspan="4"> <?lsmb text('TOTAL') ?></th>
|
||||
<td class="c4"><?lsmb header.amount ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th class="titledatarow c1"><span class="c3"><?lsmb text('Currency') ?>:
|
||||
<?lsmb header.currency ?></span></th>
|
||||
<th class="titledatarow c1"><span class="c3"><?lsmb text('Date') ?>:
|
||||
<?lsmb header.payment_date ?></span></th>
|
||||
<th rowspan="5" width="30%" class="c1"><span class="c6"><?lsmb text('Signature') ?><br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
___________________________________________<br>
|
||||
<?lsmb text('Identification') ?></span></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="70%" class="c7" colspan="3"><span><b><?lsmb text('Pay in behalf of') ?>:</b>
|
||||
<?lsmb header.legal_name ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="c7" colspan="3"><span><b><?lsmb text('The amount of') ?>:</b>
|
||||
<?lsmb header.amount2text -?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="c7" colspan="3"><span><b><?lsmb text('This document has been approved by')
|
||||
-?>:</b><?lsmb header.employee_first_name -?> <?lsmb header.employee_last_name -?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="c7"><span><b><?lsmb text('Approved signature')?>:</b>
|
||||
____________________________</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="c7" colspan="3"><span><b><?lsmb text('Notes') ?>:</b>
|
||||
<?lsmb header.notes ?></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,196 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2023-04-03
|
||||
File: print_cash_transfer.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta
|
||||
name="generator"
|
||||
content="HTML Tidy for HTML5 for Linux version 5.6.0"
|
||||
/>
|
||||
<title><?lsmb form.print_title ?></title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
margin: 10px 20px;
|
||||
}
|
||||
span {
|
||||
display: block;
|
||||
}
|
||||
label {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
margin-right: 15px;
|
||||
}
|
||||
label::after {
|
||||
content: ':';
|
||||
float: right;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
table, td, th {
|
||||
border: 0.5px solid darkgray;
|
||||
}
|
||||
th {
|
||||
background-color: lightgray;
|
||||
}
|
||||
h4 {
|
||||
margin: 10px 0;
|
||||
}
|
||||
.header-area {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr auto;
|
||||
}
|
||||
.logo {
|
||||
align-self: end;
|
||||
}
|
||||
.logo > img {
|
||||
width: 160px;
|
||||
height: 120px;
|
||||
}
|
||||
.company-info {
|
||||
align-self: end;
|
||||
padding-left: 20px;
|
||||
border-bottom: 2px solid black;
|
||||
}
|
||||
.company-name {
|
||||
margin: 10px 0 0 0;
|
||||
}
|
||||
.title {
|
||||
border-bottom: 2px solid black;
|
||||
align-self: end;
|
||||
}
|
||||
.title > h3 {
|
||||
margin: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.voucher-header {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.flex-label {
|
||||
display: flex;
|
||||
}
|
||||
.flex-label > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.flex-label > div:first-child {
|
||||
width: fit-content;
|
||||
}
|
||||
.flex-label > div > * {
|
||||
padding: 3px 0;
|
||||
}
|
||||
.voucher-info {
|
||||
justify-self: end;
|
||||
margin-right: 40px;
|
||||
}
|
||||
.left-border {
|
||||
border: 0;
|
||||
border-left: 0.5px solid darkgray;
|
||||
width: 5em;
|
||||
padding: 10px 0;
|
||||
}
|
||||
.right-border {
|
||||
border: 0;
|
||||
border-right: 0.5px solid darkgray;
|
||||
padding-right: 10px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
.signature-area {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.signature-area th,
|
||||
.signature-area td {
|
||||
padding-left: 20px;
|
||||
}
|
||||
footer {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?lsmb column_count = 0 -?>
|
||||
<div class="header-area">
|
||||
<div class="logo">
|
||||
<!-- If you want to use a logo uncomment following line, remove # from dbfile_base64 and set images file name -->
|
||||
<!-- <img class="logo" src="data:image/png;base64,<?lsmb #dbfile_base64('logo.jpg') ?>"/> -->
|
||||
</div>
|
||||
<div class="company-info">
|
||||
<h2 class="company-name"><?lsmb form.company ?></h2>
|
||||
<span class="company-address"><?lsmb form.address ?></span>
|
||||
<span class="company-phone">Ph: <?lsmb form.tel ?></span>
|
||||
</div>
|
||||
<div class="title">
|
||||
<h3><?lsmb form.print_title ?></h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="voucher-header">
|
||||
<div class="eca-info flex-label">
|
||||
<div>
|
||||
<label>Customer/Supplier Name</label>
|
||||
<label>Customer/Supplier Code</label>
|
||||
<label>Description</label>
|
||||
<label>Exchange Rate</label>
|
||||
<label>Amount</label>
|
||||
<label>In Words</label>
|
||||
<label>Additional Remarks</label>
|
||||
</div>
|
||||
<div>
|
||||
<span>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ </span>
|
||||
<span>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ </span>
|
||||
<span><?lsmb form.description ?></span>
|
||||
<span><?lsmb form.exchange_rate ?></span>
|
||||
<span><?lsmb form.amount ?> <?lsmb form.curr ?></span>
|
||||
<span style="text-transform: uppercase;"><?lsmb form.text_amount ?> <?lsmb form.curr ?> ONLY</span>
|
||||
<span><?lsmb form.notes ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="voucher-info flex-label">
|
||||
<div>
|
||||
<label>Voucher No</label>
|
||||
<label>Date</label>
|
||||
</div>
|
||||
<div>
|
||||
<span><?lsmb form.reference ?></span>
|
||||
<span><?lsmb form.transdate ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signature-area">
|
||||
<table cellspacing="0">
|
||||
<tr>
|
||||
<th colspan="2" align="left">Approved By</th>
|
||||
<th colspan="2" align="left">Received By</th>
|
||||
<th colspan="2" align="left">Paid By</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left-border">Signature</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Signature</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Signature</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left-border">Name</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Name</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Name</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,226 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2023-04-03
|
||||
File: print_journal_entry.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta
|
||||
name="generator"
|
||||
content="HTML Tidy for HTML5 for Linux version 5.6.0"
|
||||
/>
|
||||
<title><?lsmb form.print_title ?></title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
margin: 10px 20px;
|
||||
}
|
||||
span {
|
||||
display: block;
|
||||
}
|
||||
label {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
margin-right: 15px;
|
||||
}
|
||||
label::after {
|
||||
content: ':';
|
||||
float: right;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
table, td, th {
|
||||
border: 0.5px solid darkgray;
|
||||
}
|
||||
th {
|
||||
background-color: lightgray;
|
||||
}
|
||||
h4 {
|
||||
margin: 10px 0;
|
||||
}
|
||||
.header-area {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr auto;
|
||||
}
|
||||
.logo {
|
||||
align-self: end;
|
||||
}
|
||||
.logo > img {
|
||||
width: 160px;
|
||||
height: 120px;
|
||||
}
|
||||
.company-info {
|
||||
align-self: end;
|
||||
padding-left: 20px;
|
||||
border-bottom: 2px solid black;
|
||||
}
|
||||
.company-name {
|
||||
margin: 10px 0 0 0;
|
||||
}
|
||||
.title {
|
||||
border-bottom: 2px solid black;
|
||||
align-self: end;
|
||||
}
|
||||
.title > h3 {
|
||||
margin: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.voucher-header {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.flex-label {
|
||||
display: flex;
|
||||
}
|
||||
.flex-label > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.flex-label > div:first-child {
|
||||
width: fit-content;
|
||||
}
|
||||
.flex-label > div > * {
|
||||
padding: 3px 0;
|
||||
}
|
||||
.voucher-info {
|
||||
justify-self: end;
|
||||
margin-right: 40px;
|
||||
}
|
||||
.left-border {
|
||||
border: 0;
|
||||
border-left: 0.5px solid darkgray;
|
||||
width: 5em;
|
||||
padding: 10px 0;
|
||||
}
|
||||
.right-border {
|
||||
border: 0;
|
||||
border-right: 0.5px solid darkgray;
|
||||
padding-right: 10px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
.signature-area {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.signature-area th,
|
||||
.signature-area td {
|
||||
padding-left: 20px;
|
||||
}
|
||||
footer {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?lsmb column_count = 0 -?>
|
||||
<div class="header-area">
|
||||
<div class="logo">
|
||||
<!-- If you want to use a logo uncomment following line, remove # from dbfile_base64 and set images file name -->
|
||||
<!-- <img class="logo" src="data:image/png;base64,<?lsmb #dbfile_base64('logo.jpg') ?>"/> -->
|
||||
</div>
|
||||
<div class="company-info">
|
||||
<h2 class="company-name"><?lsmb form.company ?></h2>
|
||||
<span class="company-address"><?lsmb form.address ?></span>
|
||||
<span class="company-phone">Ph: <?lsmb form.tel ?></span>
|
||||
</div>
|
||||
<div class="title">
|
||||
<h3><?lsmb form.print_title ?></h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="voucher-header">
|
||||
<div class="eca-info flex-label">
|
||||
<div>
|
||||
<label>Reference</label>
|
||||
<label>Description</label>
|
||||
<label>Notes</label>
|
||||
</div>
|
||||
<div>
|
||||
<span><?lsmb form.reference ?></span>
|
||||
<span><?lsmb form.description ?></span>
|
||||
<span><?lsmb form.notes ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="voucher-info flex-label">
|
||||
<div>
|
||||
<label>Date</label>
|
||||
</div>
|
||||
<div>
|
||||
<span><?lsmb form.transdate ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="invoice-data">
|
||||
<table cellspacing="0">
|
||||
<tr align="center">
|
||||
<th>Account</th>
|
||||
<th>Curr</th>
|
||||
<th>Debit</th>
|
||||
<th>Credit</th>
|
||||
<th>Source</th>
|
||||
<th>Memo</th>
|
||||
<?lsmb FOREACH cls IN form.bu_class ?>
|
||||
<th class="listheading"><?lsmb cls.label ?></th>
|
||||
<?lsmb END ?>
|
||||
</tr>
|
||||
<?lsmb FOREACH displayrow IN displayrows;
|
||||
IF displayrow.accno; ?>
|
||||
<tr>
|
||||
<td><?lsmb displayrow.accno ?></td>
|
||||
<td><?lsmb displayrow.curr ?></td>
|
||||
<td align="right"><?lsmb displayrow.debit ?></td>
|
||||
<td align="right"><?lsmb displayrow.credit ?></td>
|
||||
<td><?lsmb displayrow.source ?></td>
|
||||
<td><?lsmb displayrow.memo ?></td>
|
||||
<?lsmb FOREACH cls IN form.bu_class ?>
|
||||
<td>
|
||||
<?lsmb clsid = cls.id;
|
||||
bucid = "b_unit_$clsid";
|
||||
displayrow.${bucid}; ?>
|
||||
</td>
|
||||
<?lsmb END ?>
|
||||
</tr>
|
||||
<?lsmb END;
|
||||
END -?>
|
||||
<tr>
|
||||
<td colspan="2"> </td>
|
||||
<td align="right"><?lsmb form.totaldebit ?></td>
|
||||
<td align="right"><?lsmb form.totalcredit ?></td>
|
||||
<td colspan="15"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="signature-area">
|
||||
<table cellspacing="0">
|
||||
<tr>
|
||||
<th colspan="2" align="left">Approved By</th>
|
||||
<th colspan="2" align="left">Received By</th>
|
||||
<th colspan="2" align="left">Paid By</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left-border">Signature</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Signature</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Signature</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left-border">Name</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Name</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
<td class="left-border">Name</td>
|
||||
<td class="right-border"><hr/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,186 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: product_receipt.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Product Receipt') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Product Receipt') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('To:') ?></span></th>
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('Ship To:') ?></span></th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb text('Attn: [_1]', contact) ?> <?lsmb END ?> <?lsmb IF vendorphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?> <?lsmb END ?> <?lsmb IF vendorfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?> <?lsmb END ?></td>
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?><br>
|
||||
<?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left"><?lsmb text('Invoice #') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Receipt Date') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Contact') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left"><?lsmb text('Ship Via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb invnumber ?></td>
|
||||
<td><?lsmb transdate ?></td>
|
||||
<td><?lsmb employee ?></td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="right"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Price') ?></span></th>
|
||||
<th><span class="c2">%</span></th>
|
||||
<th><span class="c2"><?lsmb text('Amount') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td align="right"><?lsmb runningnumber.${loop_count} ?>.</td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb sellprice.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb discountrate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb linetotal.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<?lsmb IF taxincluded ?>
|
||||
<th colspan="7" align="right"><?lsmb text('Total') ?></th>
|
||||
<th colspan="1" align="right"><?lsmb ordtotal ?></th><?lsmb ELSE ?>
|
||||
<th colspan="7" align="right"><?lsmb text('Subtotal') ?></th>
|
||||
<td colspan="1" align="right"><?lsmb subtotal ?></td><?lsmb END ?>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="7" align="right">
|
||||
<?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>on
|
||||
<?lsmb taxbase.${loop_count} ?> @ <?lsmb taxrate.${loop_count} ?> %</th>
|
||||
<td colspan="1" align="right"><?lsmb tax.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="4"> </td>
|
||||
<td colspan="4">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr><?lsmb IF NOT taxincluded ?>
|
||||
<tr>
|
||||
<th colspan="7" align="right"><?lsmb text('Total') ?></th>
|
||||
<td colspan="1" align="right"><?lsmb ordtotal ?></td><?lsmb END ?><?lsmb IF terms ?>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4"><?lsmb text('Terms Net [_1] days', terms) ?></td>
|
||||
<th colspan="3" align="right"><?lsmb text('Total') ?></th>
|
||||
<th colspan="1" align="right"><?lsmb ordtotal ?></th>
|
||||
</tr><?lsmb END ?><?lsmb IF taxincluded ?>
|
||||
<tr>
|
||||
<td colspan="2"><?lsmb text('Tax included') ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr><?lsmb IF ordtotal ?>
|
||||
<tr>
|
||||
<td colspan="8" align="right"><?lsmb text('All prices in [_1] funds', currency) ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb IF notes ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td><?lsmb text('Notes') ?></td>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="70%"> </td>
|
||||
<td width="30%">
|
||||
X
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,180 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: product_receipt.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\setlength\LTleft{0pt}
|
||||
\setlength\LTright{0pt}
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
\markboth{<?lsmb company ?>\hfill <?lsmb invnumber ?>}{<?lsmb company ?>\hfill <?lsmb invnumber ?>}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb text('Attn: [_1]', contact) ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorphone ?>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorfax ?>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{Ship To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF shiptocontact ?>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?>
|
||||
<?lsmb END ?>/
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Product Receipt') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
\begin{tabularx}{\textwidth}{*{6}{|X}|} \hline
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & \textbf{<?lsmb text('Date') ?>}
|
||||
& \textbf{<?lsmb text('Required by') ?>} & \textbf{<?lsmb text('Contact') ?>}
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship via') ?>} \\ [0.5ex]
|
||||
\hline
|
||||
<?lsmb invnumber ?> & <?lsmb transdate ?> & <?lsmb reqdate ?> & <?lsmb employee ?> & <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}llrlrr@{\extracolsep{0pt}}}
|
||||
\textbf{<?lsmb text('Number') ?>} & \textbf{<?lsmb text('Description') ?>}
|
||||
& \textbf{<?lsmb text('Qty') ?>} &
|
||||
\textbf{<?lsmb text('Unit') ?>} & \textbf{<?lsmb text('Price') ?>}
|
||||
& \textbf{<?lsmb text('Amount') ?>} \\
|
||||
\endhead
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> &
|
||||
<?lsmb sellprice.${lc} ?> &
|
||||
<?lsmb linetotal.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
\hfill
|
||||
\begin{tabularx}{7cm}{Xr@{\hspace{1cm}}r@{}}
|
||||
& Total & <?lsmb invtotal ?>\\
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
\hfill
|
||||
<?lsmb text('All prices in [_1].', currency) ?>
|
||||
|
||||
\vspace{12pt}
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
|
||||
}
|
||||
|
||||
|
||||
%\renewcommand{\thefootnote}{\fnsymbol{footnote}}
|
||||
|
||||
%\footnotetext[1]{\tiny }
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,188 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: purchase_order.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Purchase Order') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Purchase Order') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('To:') ?></span></th>
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('Ship To:') ?></span></th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb text('Attn: [_1]', contact) ?> <?lsmb END ?> <?lsmb IF vendorphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?> <?lsmb END ?> <?lsmb IF vendorfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?> <?lsmb END ?></td>
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?><br>
|
||||
<?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left"><?lsmb text('Order #') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Order Date') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Required by') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Contact') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left"><?lsmb text('Ship Via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb ordnumber ?></td>
|
||||
<td><?lsmb orddate ?></td>
|
||||
<td><?lsmb reqdate ?></td>
|
||||
<td><?lsmb employee ?></td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="right"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Price') ?></span></th>
|
||||
<th><span class="c2">%</span></th>
|
||||
<th><span class="c2"><?lsmb text('Amount') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td align="right"><?lsmb runningnumber.${loop_count} ?>.</td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb sellprice.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb discountrate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb linetotal.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<?lsmb IF taxincluded ?>
|
||||
<th colspan="7" align="right"><?lsmb text('Total') ?></th>
|
||||
<th colspan="1" align="right"><?lsmb ordtotal ?></th><?lsmb ELSE ?>
|
||||
<th colspan="7" align="right"><?lsmb text('Subtotal') ?></th>
|
||||
<td colspan="1" align="right"><?lsmb subtotal ?></td><?lsmb END ?>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="7" align="right">
|
||||
<?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>on
|
||||
<?lsmb taxbase.${loop_count} ?> @ <?lsmb taxrate.${loop_count} ?> %</th>
|
||||
<td colspan="1" align="right"><?lsmb tax.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="4"> </td>
|
||||
<td colspan="4">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr><?lsmb IF NOT taxincluded ?>
|
||||
<tr>
|
||||
<th colspan="7" align="right"><?lsmb text('Total') ?></th>
|
||||
<td colspan="1" align="right"><?lsmb ordtotal ?></td><?lsmb END ?><?lsmb IF terms ?>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4"><?lsmb text('Terms Net [_1] days', terms) ?></td>
|
||||
<th colspan="3" align="right"><?lsmb text('Total') ?></th>
|
||||
<th colspan="1" align="right"><?lsmb ordtotal ?></th>
|
||||
</tr><?lsmb END ?><?lsmb IF taxincluded ?>
|
||||
<tr>
|
||||
<td colspan="2"><?lsmb text('Tax included') ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr><?lsmb IF ordtotal ?>
|
||||
<tr>
|
||||
<td colspan="8" align="right"><?lsmb text('All prices in [_1] funds', currency) ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb IF notes ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td><?lsmb text('Notes') ?></td>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="70%"> </td>
|
||||
<td width="30%">
|
||||
X
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,186 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: purchase_order.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\setlength\LTleft{0pt}
|
||||
\setlength\LTright{0pt}
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
\markboth{<?lsmb company ?>\hfill <?lsmb ordnumber ?>}{<?lsmb company ?>\hfill <?lsmb ordnumber ?>}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb text('Attn: [_1]', contact) ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorphone ?>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorfax ?>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{Ship To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF shiptocontact ?>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?>
|
||||
<?lsmb END ?>/
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Purchase Order') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
\begin{tabularx}{\textwidth}{*{6}{|X}|} \hline
|
||||
\textbf{<?lsmb text('Order #') ?>} & \textbf{<?lsmb text('Date') ?>}
|
||||
& \textbf{<?lsmb text('Required by') ?>} & \textbf{<?lsmb text('Contact') ?>}
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship via') ?>} \\ [0.5ex]
|
||||
\hline
|
||||
<?lsmb ordnumber ?> & <?lsmb orddate ?> & <?lsmb reqdate ?> & <?lsmb employee ?> & <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}llrlrr@{\extracolsep{0pt}}}
|
||||
\textbf{<?lsmb text('Number') ?>} & \textbf{<?lsmb text('Description') ?>}
|
||||
& \textbf{<?lsmb text('Qty') ?>} &
|
||||
\textbf{<?lsmb text('Unit') ?>} & \textbf{<?lsmb text('Price') ?>}
|
||||
& \textbf{<?lsmb text('Amount') ?>} \\
|
||||
\endhead
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> &
|
||||
<?lsmb sellprice.${lc} ?> &
|
||||
<?lsmb linetotal.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
\hfill
|
||||
\begin{tabularx}{7cm}{Xr@{\hspace{1cm}}r@{}}
|
||||
& Subtotal & <?lsmb subtotal ?> \\
|
||||
<?lsmb FOREACH tax ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
& <?lsmb taxdescription.${lc} ?> on <?lsmb taxbase.${lc} ?> & <?lsmb tax.${lc} ?>\\
|
||||
<?lsmb END ?>
|
||||
\hline
|
||||
& Total & <?lsmb ordtotal ?>\\
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
\hfill
|
||||
<?lsmb text('All prices in [_1].', currency) ?>
|
||||
|
||||
\vspace{12pt}
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
|
||||
}
|
||||
|
||||
|
||||
%\renewcommand{\thefootnote}{\fnsymbol{footnote}}
|
||||
|
||||
%\footnotetext[1]{\tiny }
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,95 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: receipt.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{9pt}{9pt}\selectfont
|
||||
\fi
|
||||
|
||||
\parbox[t]{12cm}{
|
||||
<?lsmb company ?>
|
||||
|
||||
<?lsmb address ?>}
|
||||
\hfill
|
||||
\parbox[t]{6cm}{\hfill <?lsmb source ?>}
|
||||
|
||||
\vspace*{0.6cm}
|
||||
|
||||
<?lsmb text_amount ?> \dotfill <?lsmb decimal ?>/100 \makebox[0.5cm]{\hfill}
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
\hfill <?lsmb datepaid ?> \makebox[2cm]{\hfill} <?lsmb amount ?>
|
||||
|
||||
% different date format for datepaid
|
||||
% <?lsmb DD ?><?lsmb MM ?><?lsmb YYYY ?>
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{1.8cm}
|
||||
|
||||
<?lsmb memo ?>
|
||||
|
||||
\vspace{0.8cm}
|
||||
|
||||
<?lsmb company ?>
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
<?lsmb name ?> \hfill <?lsmb datepaid ?> \hfill <?lsmb source ?>
|
||||
|
||||
\vspace{0.5cm}
|
||||
\begin{tabularx}{\textwidth}{lXrr@{}}
|
||||
\textbf{<?lsmb text('Invoice No.') ?>} & \textbf{<?lsmb text('Invoice Date') ?>}
|
||||
& \textbf{<?lsmb text('Due') ?>} & \textbf{<?lsmb text('Applied') ?>} \\
|
||||
<?lsmb FOREACH invnumber ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb invnumber.${lc} ?> & <?lsmb invdate.${lc} ?> \dotfill
|
||||
& <?lsmb due.${lc} ?> & <?lsmb paid.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
<?lsmb memo ?>
|
||||
|
||||
\vfill
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,144 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: request_quotation.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Request for Quotation') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Request for Quotation') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('To:') ?></span></th>
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('Ship To:') ?></span></th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb text('Attn: [_1]', contact) ?> <?lsmb END ?> <?lsmb IF vendorphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?> <?lsmb END ?> <?lsmb IF vendorfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?> <?lsmb END ?></td>
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddr2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?><br>
|
||||
<?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb text('Attn: [_1]', shiptocontact) ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left"><?lsmb text('RFQ #') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Date') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Required by') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Contact') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left"><?lsmb text('Ship via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb quonumber ?></td>
|
||||
<td><?lsmb quodate ?></td>
|
||||
<td><?lsmb reqdate ?> </td>
|
||||
<td><?lsmb employee ?></td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb text('Please provide price and delivery time for the following items:') ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th align="right"><?lsmb text('Item') ?></th>
|
||||
<th align="left"><?lsmb text('Number') ?></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><?lsmb text('Qty') ?></th>
|
||||
<th> </th>
|
||||
<th><?lsmb text('Delivery') ?></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td align="right"><?lsmb runningnumber.${loop_count} ?>.</td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb IF notes ?>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td></td>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,165 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: request_quotation.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\setlength\LTleft{0pt}
|
||||
\setlength\LTright{0pt}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
\markboth{<?lsmb company ?>\hfill <?lsmb ordnumber ?>}{<?lsmb company ?>\hfill <?lsmb ordnumber ?>}
|
||||
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{<?lsmb text('To') ?>}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb contact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorphone ?>
|
||||
<?lsmb text('Tel: [_1]', vendorphone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF vendorfax ?>
|
||||
<?lsmb text('Fax: [_1]', vendorfax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{Ship To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF shiptocontact ?>
|
||||
<?lsmb shiptocontact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Request for Quotation') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{6}{|X}|} \hline
|
||||
\textbf{<?lsmb text('RFQ #') ?>} & \textbf{<?lsmb text('Date') ?>}
|
||||
& \textbf{<?lsmb text('Required by') ?>} & \textbf{<?lsmb text('Contact') ?>}
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship via') ?>} \\ [0.5ex]
|
||||
\hline
|
||||
<?lsmb quonumber ?> & <?lsmb quodate ?> & <?lsmb reqdate ?> & <?lsmb employee ?> & <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
<?lsmb text('Please provide price and delivery time for the following items:') ?>
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}lcrllrr@{\extracolsep{\fill}}}
|
||||
\textbf{<?lsmb text('Number') ?>} & \textbf{<?lsmb text('Description') ?>}
|
||||
& \textbf{<?lsmb text('Qty') ?>} & & \textbf{<?lsmb text('Delivery') ?>}
|
||||
& \textbf{<?lsmb text('Unit Price') ?>} & \textbf{<?lsmb text('Extended') ?>}
|
||||
\endhead
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\hfill
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
|
||||
}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,185 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: sales_order.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Sales Order') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
span.c4 {font-size: 51%}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Sales Order') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('To') ?></span></th>
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('Ship To') ?></span></th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb text('Attn: [_1]', contact) ?> <?lsmb END ?> <?lsmb IF customerphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?> <?lsmb END ?> <?lsmb IF customerfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?> <?lsmb END ?> <?lsmb IF email ?><br>
|
||||
<?lsmb email ?> <?lsmb END ?></td>
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?><br>
|
||||
<?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb shiptocontact ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?> <?lsmb IF shiptoemail ?><br>
|
||||
<?lsmb shiptoemail ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Order #') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Order Date') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Required by') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Salesperson') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left" nowrap><?lsmb text('Ship Via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb ordnumber ?></td>
|
||||
<td><?lsmb orddate ?></td>
|
||||
<td><?lsmb reqdate ?></td>
|
||||
<td><?lsmb employee ?></td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="right"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Price') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Disc %') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Amount') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td align="right"><?lsmb runningnumber.${loop_count} ?>.</td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb sellprice.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb discountrate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb linetotal.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<?lsmb IF taxincluded ?>
|
||||
<th colspan="6" align="right"><?lsmb text('Total') ?></th>
|
||||
<td colspan="2" align="right"><?lsmb invtotal ?></td><?lsmb ELSE ?>
|
||||
<th colspan="6" align="right"><?lsmb text('Subtotal') ?></th>
|
||||
<td colspan="2" align="right"><?lsmb subtotal ?></td><?lsmb END ?>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="6" align="right">
|
||||
<?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>on
|
||||
<?lsmb taxbase.${loop_count} ?> @ <?lsmb taxrate.${loop_count} ?> %</th>
|
||||
<td colspan="2" align="right"><?lsmb tax.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="4"> </td>
|
||||
<td colspan="4">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4"><?lsmb text_amount ?>***** <?lsmb decimal ?>/100 <?lsmb IF terms ?><br>
|
||||
<?lsmb text('Terms Net [_1] days', terms) ?> <?lsmb END ?></td>
|
||||
<th colspan="2" align="right"><?lsmb text('Total') ?></th>
|
||||
<th colspan="2" align="right"><?lsmb ordtotal ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<?lsmb IF notes ?>
|
||||
<td><?lsmb text('Notes') ?></td>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td><?lsmb END ?>
|
||||
<td align="right" nowrap><?lsmb text('All prices in [_1] Funds', currency) ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="60%"><span class=
|
||||
"c4"><?lsmb text('Special order items are subject to a 10% order cancellation fee.') ?></span></td>
|
||||
<td width="40%">
|
||||
X
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,196 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: sales_order.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\setlength\LTleft{0pt}
|
||||
\setlength\LTright{0pt}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
\markboth{<?lsmb company ?>\hfill <?lsmb ordnumber ?>}{<?lsmb company ?>\hfill <?lsmb ordnumber ?>}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb contact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerphone ?>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerfax ?>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{Ship To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF shiptocontact ?>
|
||||
<?lsmb shiptocontact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Sales Order') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{6}{|X}|} \hline
|
||||
\textbf{<?lsmb text('Order #') ?>} & \textbf{<?lsmb text('Order Date') ?>}
|
||||
& \textbf{<?lsmb text('Required by') ?>}
|
||||
& \textbf{<?lsmb text('Salesperson') ?>}
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship Via') ?>} \\ [0.5em]
|
||||
\hline
|
||||
<?lsmb ordnumber ?> & <?lsmb orddate ?> & <?lsmb reqdate ?> & <?lsmb employee ?> & <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}rlcrlrrr@{\extracolsep{0pt}}}
|
||||
\textbf{<?lsmb text('Item') ?>} & \textbf{<?lsmb text('Number') ?>}
|
||||
& \textbf{<?lsmb text('Description') ?>} & \textbf{<?lsmb text('Qty') ?>} &
|
||||
\textbf{<?lsmb text('Unit') ?>} & \textbf{<?lsmb text('Price') ?>}
|
||||
& \textbf{<?lsmb text('Disc %') ?>}
|
||||
& \textbf{<?lsmb text('Amount') ?>}
|
||||
\endhead
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb runningnumber.${lc} ?> &
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> &
|
||||
<?lsmb sellprice.${lc} ?> &
|
||||
<?lsmb discountrate.${lc} ?> &
|
||||
<?lsmb linetotal.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
\hfill
|
||||
\begin{tabularx}{7cm}{Xr@{\hspace{1cm}}r@{}}
|
||||
& Subtotal & <?lsmb subtotal ?> \\
|
||||
<?lsmb FOREACH tax ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
& <?lsmb taxdescription.${lc} ?> on <?lsmb taxbase.${lc} ?> & <?lsmb tax.${lc} ?>\\
|
||||
<?lsmb END ?>
|
||||
\hline
|
||||
& Total & <?lsmb ordtotal ?>\\
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb text_amount ?> ***** <?lsmb decimal ?>/100
|
||||
\hfill
|
||||
<?lsmb text('All prices in [_1].', currency) ?>
|
||||
|
||||
<?lsmb IF terms ?>
|
||||
<?lsmb text('Terms: Net [_1] days', terms) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
\vspace{12pt}
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
|
||||
}
|
||||
|
||||
\vfill
|
||||
|
||||
\centerline{\textbf{<?lsmb text('Thank You for your valued business!') ?>}}
|
||||
|
||||
\rule{\textwidth}{0.5pt}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,168 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: sales_quotation.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Quotation') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
span.c4 {font-size: 51%}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
th.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3" class="c1">
|
||||
<h4><?lsmb text('Quotation') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb text('Attn: [_1]', contact) ?> <?lsmb END ?> <?lsmb IF customerphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?> <?lsmb END ?> <?lsmb IF customerfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?> <?lsmb END ?> <?lsmb IF email ?><br>
|
||||
<?lsmb email ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Number') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Date') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Valid until') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Contact') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left" nowrap><?lsmb text('Ship via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb quonumber ?></td>
|
||||
<td><?lsmb quodate ?></td>
|
||||
<td><?lsmb reqdate ?></td>
|
||||
<td><?lsmb employee ?></td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="right"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Price') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Disc %') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Amount') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td align="right"><?lsmb runningnumber.${loop_count} ?></td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb sellprice.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb discountrate.${loop_count} ?></td>
|
||||
<td align="right"><?lsmb linetotal.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<?lsmb IF taxincluded ?>
|
||||
<th colspan="6" align="right"><?lsmb text('Total') ?></th>
|
||||
<td colspan="2" align="right"><?lsmb invtotal ?></td><?lsmb ELSE ?>
|
||||
<th colspan="6" align="right"><?lsmb text('Subtotal') ?></th>
|
||||
<td colspan="2" align="right"><?lsmb subtotal ?></td><?lsmb END ?>
|
||||
</tr><?lsmb FOREACH tax ?><?lsmb loop_count = loop.index ?>
|
||||
<tr>
|
||||
<th colspan="6" align="right">
|
||||
<?lsmb taxdescription.${loop_count}.replace("\n","<br />") ?>on
|
||||
<?lsmb taxbase.${loop_count} ?> @ <?lsmb taxrate.${loop_count} ?> %</th>
|
||||
<td colspan="2" align="right"><?lsmb tax.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="4"> </td>
|
||||
<td colspan="4">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="4"> <?lsmb IF terms ?> <?lsmb text('Terms Net [_1] days', terms) ?>
|
||||
<?lsmb END ?></td>
|
||||
<th colspan="2" align="right"><?lsmb text('Total') ?></th>
|
||||
<th colspan="2" align="right"><?lsmb quototal ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<?lsmb IF notes ?>
|
||||
<td><?lsmb text('Notes') ?></td>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td><?lsmb END ?>
|
||||
<td align="right"><?lsmb text('All prices in [_1] Funds', currency) ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="60%"><span class="c4"><?lsmb
|
||||
text('Special order items are subject to a 10% cancellation fee.')
|
||||
?></span></td>
|
||||
<td width="40%">
|
||||
X
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,163 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: sales_quotation.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\setlength\LTleft{0pt}
|
||||
\setlength\LTright{0pt}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
\newsavebox{\ftr}
|
||||
\sbox{\ftr}{
|
||||
\parbox{\textwidth}{
|
||||
\tiny
|
||||
\rule[1.5em]{\textwidth}{0.5pt}
|
||||
<?lsmb text('Special order items are subject to a 10\% cancellation fee.') ?>
|
||||
}
|
||||
}
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
\markboth{<?lsmb company ?>\hfill <?lsmb quonumber ?>}{<?lsmb company ?>\hfill <?lsmb quonumber ?>}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb contact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerphone ?>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?> ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerfax ?>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Quotation') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{6}{|X}|} \hline
|
||||
\textbf{<?lsmb text('Quotation #') ?>} & \textbf{<?lsmb text('Date') ?>}
|
||||
& \textbf{<?lsmb text('Valid until') ?>} & \textbf{<?lsmb text('Contact') ?>}
|
||||
& \textbf{<?lsmb text('Shipping Point') ?>}
|
||||
& \textbf{<?lsmb text('Ship via') ?>} \\ [0.5ex]
|
||||
\hline
|
||||
<?lsmb quonumber ?> & <?lsmb quodate ?> & <?lsmb reqdate ?> & <?lsmb employee ?> & <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}llrlrrr@{\extracolsep{0pt}}}
|
||||
\textbf{<?lsmb text('Number') ?>} & \textbf{<?lsmb text('Description') ?>}
|
||||
& \textbf{<?lsmb text('Qty') ?>} & \textbf{<?lsmb text('Unit') ?>}
|
||||
& \textbf{<?lsmb text('Price') ?>} & \textbf{<?lsmb text('Disc %') ?>}
|
||||
& \textbf{<?lsmb text('Amount') ?>}
|
||||
\endhead
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb number.${lc} ?> &
|
||||
\begin{minipage}{2in}
|
||||
\raggedright
|
||||
<?lsmb item_description.${lc} ?>
|
||||
\end{minipage}&
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> &
|
||||
<?lsmb sellprice.${lc} ?> &
|
||||
<?lsmb discountrate.${lc} ?> &
|
||||
<?lsmb linetotal.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\hline \hline
|
||||
\multicolumn{6}{r}{<?lsmb text('Subtotal') ?>} & <?lsmb subtotal ?> \\*
|
||||
<?lsmb FOREACH tax ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
\multicolumn{6}{r}{<?lsmb taxdescription.${lc}
|
||||
?> on <?lsmb taxbase.${lc} ?> }
|
||||
& <?lsmb tax.${lc} ?> \\*
|
||||
<?lsmb END ?>
|
||||
\multicolumn{6}{r}{<?lsmb text('Total') ?> } & <?lsmb quototal ?> \\*
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
\hfill
|
||||
<?lsmb text('All prices in [_1].', currency) ?>
|
||||
|
||||
<?lsmb IF terms ?>
|
||||
<?lsmb text('Terms: [_1] days', terms) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
\vspace{12pt}
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
|
||||
}
|
||||
|
||||
\vfill
|
||||
|
||||
\hfill \parbox{7cm}{X \rule{6.5cm}{0.5pt}}
|
||||
|
||||
\rule{\textwidth}{0.5pt}
|
||||
|
||||
\usebox{\ftr}
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: shipping_label.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" } ?>
|
||||
\documentclass{scrartcl}
|
||||
\usepackage{iftex}
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\else
|
||||
\usepackage{fontspec}
|
||||
\fi
|
||||
\usepackage{tabularx}
|
||||
\usepackage[paperheight=10.5cm, paperwidth=16.2cm,top=1cm,bottom=1.5cm,left=2cm,right=2cm]{geometry}
|
||||
\begin{document}
|
||||
<?lsmb IF shiptoaddress1 ?>
|
||||
\noindent <?lsmb name ?>\\
|
||||
<?lsmb shiptoaddress1 ?>\\
|
||||
<?lsmb IF shiptoaddress2; shiptoaddress2 ?>\\ <?lsmb END ?>
|
||||
<?lsmb- shiptocity ?>
|
||||
<?lsmb IF shiptostate -?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?><?lsmb END ?> <?lsmb shiptozipcode ?>\\
|
||||
<?lsmb shiptocountry ?>
|
||||
<?lsmb ELSE ?>
|
||||
\noindent <?lsmb name ?>\\
|
||||
<?lsmb address1 ?> \\
|
||||
<?lsmb- IF address2; address2 ?> \\<?lsmb END ?>
|
||||
<?lsmb- city ?>
|
||||
<?lsmb- IF state -?>, <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>\\
|
||||
<?lsmb END ?>
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,114 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 2.0
|
||||
Date: 2024-03-16
|
||||
File: statement.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
2.0 Grouping of amounts by currency, in case of
|
||||
exposure in multiple currencies against a single customer
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Statement') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
tr.subtotal td { font-weight: bold }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?lsmb FOREACH statement IN statements ?>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Statement') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" align="right"><?lsmb statementdate ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td><?lsmb statement.entity.name ?><br>
|
||||
<?lsmb statement.address.line_one ?> <?lsmb IF statement.address.line_two ?><br>
|
||||
<?lsmb statement.address.line_two ?> <?lsmb END ?><br>
|
||||
<?lsmb statement.address.city ?> <?lsmb IF statement.address.state ?> ,
|
||||
<?lsmb statement.address.state ?> <?lsmb END ?>
|
||||
<?lsmb statement.address.mail_code ?><br></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Invoice #') ?></th>
|
||||
<th align="left"><?lsmb text('Order #') ?></th>
|
||||
<th width="10%"><?lsmb text('Date') ?></th>
|
||||
<th width="10%"><?lsmb text('Due') ?></th>
|
||||
<th width="10%"><?lsmb text('Current') ?></th>
|
||||
<th width="10%"><?lsmb text('30') ?></th>
|
||||
<th width="10%"><?lsmb text('60') ?></th>
|
||||
<th width="10%"><?lsmb text('90') ?></th>
|
||||
<th width="10%"><?lsmb text('Total') ?></th>
|
||||
<th width="10%"><?lsmb text('Currency') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="10">
|
||||
<hr size="1">
|
||||
</td>
|
||||
</tr>
|
||||
<?lsmb- FOREACH invoice IN statement.aging.rows ;
|
||||
IF invoice.html_class.defined ;
|
||||
row_class = 'class="subtotal"';
|
||||
ELSE ;
|
||||
row_class = '';
|
||||
END; ?>
|
||||
<tr <?lsmb row_class ?> >
|
||||
<?lsmb- IF invoice.html_class.defined ?>
|
||||
<td><?lsmb text('Total') ?></td>
|
||||
<?lsmb- ELSE ?>
|
||||
<td><?lsmb invoice.invnumber ?></td>
|
||||
<?lsmb- END ?>
|
||||
<td><?lsmb invoice.ordnumber ?></td>
|
||||
<td><?lsmb invoice.transdate ?></td>
|
||||
<td><?lsmb invoice.duedate ?></td>
|
||||
<td align="right"><?lsmb invoice.c0_tc ?></td>
|
||||
<td align="right"><?lsmb invoice.c30_tc ?></td>
|
||||
<td align="right"><?lsmb invoice.c60_tc ?></td>
|
||||
<td align="right"><?lsmb invoice.c90_tc ?></td>
|
||||
<td align="right"><?lsmb invoice.total_tc ?></td>
|
||||
<td><?lsmb invoice.curr ?></td>
|
||||
</tr>
|
||||
<?lsmb- IF invoice.html_class == 'listsubtotal' ; ?>
|
||||
<tr class="subtotal">
|
||||
<td colspan="10">
|
||||
<hr size="1">
|
||||
</td>
|
||||
</tr>
|
||||
<?lsmb- END -?>
|
||||
<?lsmb END -?>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table><?lsmb END ?>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,95 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 2.0
|
||||
Date: 2024-03-16
|
||||
File: statement.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
2.0 Grouping of amounts by currency, in case of
|
||||
exposure in multiple currencies against a single customer
|
||||
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
<?lsmb FOREACH statement IN statements ?>
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
<?lsmb statement.entity.name ?>
|
||||
|
||||
<?lsmb statement.address.line_one ?>
|
||||
<?lsmb statement.address.city ?> <?lsmb statement.address.state ?>
|
||||
<?lsmb statement.address.mail_code ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Statement') ?>}} \hfill
|
||||
\textbf{<?lsmb statementdate ?>}
|
||||
|
||||
\vspace{2cm}
|
||||
|
||||
\begin{tabular*}{\textwidth}{|ll@{\extracolsep\fill}ccrrrrrl|}
|
||||
\hline
|
||||
\textbf{<?lsmb text('Invoice #') ?>} & \textbf{<?lsmb text('Order #') ?>}
|
||||
& \textbf{<?lsmb text('Date') ?>} & \textbf{<?lsmb text('Due') ?>} &
|
||||
\textbf{<?lsmb text('Current') ?>} & \textbf{30} & \textbf{60} & \textbf{90} &
|
||||
\textbf{<?lsmb text('Total') ?>} & \textbf{<?lsmb text('Currency') ?>} \\
|
||||
\hline
|
||||
<?lsmb- FOREACH invoice IN statement.aging.rows -?>
|
||||
<?lsmb- IF invoice.html_class.defined -?>
|
||||
% \hline
|
||||
\textbf{<?lsmb text('Total') ?>} &
|
||||
& & &
|
||||
\textbf{<?lsmb invoice.c0_tc ?>} &
|
||||
\textbf{<?lsmb invoice.c30_tc ?>} &
|
||||
\textbf{<?lsmb invoice.c60_tc ?>} &
|
||||
\textbf{<?lsmb invoice.c90_tc ?>} &
|
||||
\textbf{<?lsmb invoice.total_tc ?>} &
|
||||
\textbf{<?lsmb invoice.curr ?>} \\
|
||||
<?lsmb- ELSE -?>
|
||||
<?lsmb invoice.invnumber ?> &
|
||||
<?lsmb invoice.ordnumber ?> &
|
||||
<?lsmb invoice.transdate ?> &
|
||||
<?lsmb invoice.duedate ?> &
|
||||
<?lsmb invoice.c0_tc ?> &
|
||||
<?lsmb invoice.c30_tc ?> &
|
||||
<?lsmb invoice.c60_tc ?> &
|
||||
<?lsmb invoice.c90_tc ?> &
|
||||
<?lsmb invoice.total_tc ?> &
|
||||
<?lsmb invoice.curr ?> \\
|
||||
<?lsmb- END -?>
|
||||
<?lsmb- IF invoice.html_class.defined -?>
|
||||
\hline
|
||||
<?lsmb- END -?>
|
||||
<?lsmb END ?>
|
||||
\end{tabular*}
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
\hfill
|
||||
\pagebreak
|
||||
<?lsmb END ?>
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,131 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: timecard.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Time Card') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Time Card') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<table>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Employee') ?></th>
|
||||
<td><?lsmb employee ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('ID') ?></th>
|
||||
<td><?lsmb employee_id ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align="right">
|
||||
<table>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Card ID') ?></th>
|
||||
<td><?lsmb id ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Date') ?></th>
|
||||
<td><?lsmb transdate ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('In') ?></th>
|
||||
<td><?lsmb checkedin ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Out') ?></th>
|
||||
<td><?lsmb checkedout ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" nowrap><?lsmb text('Hours') ?></th>
|
||||
<td><?lsmb qty ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr valign="bottom">
|
||||
<td>
|
||||
<table>
|
||||
<tr valign="top">
|
||||
<th align="left"><?lsmb text('Job/Project #') ?></th>
|
||||
<td><?lsmb projectnumber ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Description') ?></th>
|
||||
<td><?lsmb projectdescription ?></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th align="left"><?lsmb text('Labor/Service Code') ?></th>
|
||||
<td><?lsmb partnumber ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left"><?lsmb text('Description') ?></th>
|
||||
<td><?lsmb description ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align="right">
|
||||
<table>
|
||||
<tr>
|
||||
<th align="right"><?lsmb text('Rate') ?></th>
|
||||
<td><?lsmb sellprice ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="right"><?lsmb text('Total') ?></th>
|
||||
<td><?lsmb total ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><?lsmb IF notes ?>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td>
|
||||
</tr><?lsmb END ?>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: timecard.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
\centerline{\textbf{\MakeUppercase{<?lsmb text('Time Card') ?>}}}
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\begin{tabular}[t]{ll}
|
||||
\textbf{<?lsmb text('Employee') ?>} & <?lsmb employee ?> \\
|
||||
\textbf{<?lsmb text('ID') ?>} & <?lsmb employee_id ?> \\
|
||||
\end{tabular}
|
||||
\hfill
|
||||
\begin{tabular}[t]{ll}
|
||||
\textbf{<?lsmb text('Card ID') ?>} & <?lsmb id ?> \\
|
||||
\textbf{<?lsmb text('Date') ?>} & <?lsmb transdate ?> \\
|
||||
\textbf{<?lsmb text('In') ?>} & <?lsmb checkedin ?> \\
|
||||
\textbf{<?lsmb text('Out') ?>} & <?lsmb checkedout ?> \\
|
||||
\textbf{<?lsmb text('Hours') ?>} & <?lsmb qty ?> \\
|
||||
\end{tabular}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabular}[b]{ll}
|
||||
\textbf{<?lsmb text('Job/Project #') ?>} & <?lsmb projectnumber ?> \\
|
||||
\textbf{<?lsmb text('Description') ?>} & <?lsmb projectdescription ?> \\
|
||||
\textbf{<?lsmb text('Labor/Service Code') ?>} & <?lsmb partnumber ?> \\
|
||||
\textbf{<?lsmb text('Description') ?>} & <?lsmb description ?> \\
|
||||
\end{tabular}
|
||||
\hfill
|
||||
\begin{tabular}[b]{lr}
|
||||
\textbf{<?lsmb text('Rate') ?>} & <?lsmb sellprice ?> \\
|
||||
\textbf{<?lsmb text('Total') ?>} & <?lsmb total ?> \\
|
||||
\end{tabular}
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
@@ -0,0 +1,131 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.0
|
||||
Date: 2021-01-04
|
||||
File: work_order.html
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
-?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.6.0">
|
||||
<title><?lsmb text('Work Order') ?></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
tr.c3 {background-color: black}
|
||||
span.c2 {color: white}
|
||||
h4.c1 {text-transform:uppercase}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%">
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
<tr>
|
||||
<th colspan="3">
|
||||
<h4 class="c1"><?lsmb text('Work Order') ?></h4>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tr class="c3">
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('To') ?></span></th>
|
||||
<th align="left" width="50%"><span class="c2"><?lsmb text('Ship To') ?></span></th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td><?lsmb name ?><br>
|
||||
<?lsmb address1 ?> <?lsmb IF address2 ?><br>
|
||||
<?lsmb address2 ?> <?lsmb END ?><br>
|
||||
<?lsmb city ?> <?lsmb IF state ?> , <?lsmb state ?> <?lsmb END ?> <?lsmb zipcode ?>
|
||||
<?lsmb IF country ?><br>
|
||||
<?lsmb country ?> <?lsmb END ?><br>
|
||||
<?lsmb IF contact ?><br>
|
||||
<?lsmb text('Attn: [_1]', contact) ?> <?lsmb END ?> <?lsmb IF customerphone ?><br>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?> <?lsmb END ?> <?lsmb IF customerfax ?><br>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?> <?lsmb END ?> <?lsmb IF email ?><br>
|
||||
<?lsmb email ?> <?lsmb END ?></td>
|
||||
<td><?lsmb shiptoname ?><br>
|
||||
<?lsmb shiptoaddress1 ?> <?lsmb IF shiptoaddress2 ?><br>
|
||||
<?lsmb shiptoaddress2 ?> <?lsmb END ?><br>
|
||||
<?lsmb shiptocity ?> <?lsmb IF shiptostate ?> , <?lsmb shiptostate ?> <?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?> <?lsmb IF shiptocountry ?><br>
|
||||
<?lsmb shiptocountry ?> <?lsmb END ?><br>
|
||||
<?lsmb IF shiptocontact ?><br>
|
||||
<?lsmb shiptocontact ?> <?lsmb END ?> <?lsmb IF shiptophone ?><br>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?> <?lsmb END ?> <?lsmb IF shiptofax ?><br>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?> <?lsmb END ?> <?lsmb IF shiptoemail ?><br>
|
||||
<?lsmb shiptoemail ?> <?lsmb END ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" border="1">
|
||||
<tr>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Order #') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Order Date') ?></th>
|
||||
<th width="17%" align="left"><?lsmb text('Required by') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Salesperson') ?></th>
|
||||
<th width="17%" align="left" nowrap><?lsmb text('Shipping Point') ?></th>
|
||||
<th width="15%" align="left" nowrap><?lsmb text('Ship Via') ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?lsmb ordnumber ?></td>
|
||||
<td><?lsmb orddate ?></td>
|
||||
<td><?lsmb reqdate ?></td>
|
||||
<td><?lsmb employee ?></td>
|
||||
<td><?lsmb shippingpoint ?> </td>
|
||||
<td><?lsmb shipvia ?> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%">
|
||||
<tr class="c3">
|
||||
<th align="right"><span class="c2"><?lsmb text('Item') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Number') ?></span></th>
|
||||
<th align="left"><span class="c2"><?lsmb text('Description') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Qty') ?></span></th>
|
||||
<th> </th>
|
||||
<th><span class="c2"><?lsmb text('Bin') ?></span></th>
|
||||
<th><span class="c2"><?lsmb text('Serial #') ?></span></th>
|
||||
</tr><?lsmb FOREACH number ?><?lsmb loop_count = loop.index ?>
|
||||
<tr valign="top">
|
||||
<td align="right"><?lsmb runningnumber.${loop_count} ?>.</td>
|
||||
<td><?lsmb number.${loop_count} ?></td>
|
||||
<td><?lsmb item_description.${loop_count}.replace("\n","<br />") ?></td>
|
||||
<td align="right"><?lsmb qty.${loop_count} ?></td>
|
||||
<td><?lsmb unit.${loop_count} ?></td>
|
||||
<td><?lsmb bin.${loop_count} ?></td>
|
||||
<td><?lsmb serialnumber.${loop_count} ?></td>
|
||||
</tr><?lsmb END ?>
|
||||
<tr>
|
||||
<td colspan="7">
|
||||
<hr noshade>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><?lsmb IF notes ?>
|
||||
<td>
|
||||
<?lsmb FOREACH P IN notes.split('\n\n') ?>
|
||||
<p><?lsmb P ?></p><?lsmb END ?>
|
||||
</td><?lsmb END ?>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,168 @@
|
||||
<?lsmb# This is a comment block; it's ignored by the template engine.
|
||||
|
||||
Version: 1.1
|
||||
Date: 2022-07-22
|
||||
File: work_order.tex
|
||||
Set: demo
|
||||
|
||||
Template version numbers are explicitly not aligned across templates or
|
||||
releases. No explicit versioning was applied before 2021-01-04.
|
||||
|
||||
Version Changes
|
||||
1.1 Merged xelatex targetting templates with those targetting pdflatex
|
||||
|
||||
-?>
|
||||
<?lsmb FILTER latex { format="$FORMAT($PROCESSOR)" };
|
||||
# Uncomment the next line to overrule the value from System > Defaults;
|
||||
# The value should be without the 'paper' suffix. E.g. "a4" for "a4paper"
|
||||
# SETTINGS.papersize = "<your-format>";
|
||||
INCLUDE "preamble.tex"; -?>
|
||||
|
||||
\begin{document}
|
||||
|
||||
\pagestyle{myheadings}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\ifpdftex
|
||||
%% (pdf)latex
|
||||
\fontfamily{cmss}\fontsize{10pt}{12pt}\selectfont
|
||||
\fi
|
||||
|
||||
<?lsmb INCLUDE letterhead ?>
|
||||
|
||||
|
||||
% Break old pagebreak directive
|
||||
%<?xlsmb pagebreak 65 27 48 ?>
|
||||
%\end{tabularx}
|
||||
%
|
||||
%\newpage
|
||||
%
|
||||
%\markboth{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}{<?xlsmb company ?>\hfill <?xlsmb ordnumber ?>}
|
||||
%
|
||||
%\begin{tabularx}{\textwidth}{@{}rlXrll@{}}
|
||||
% \textbf{Item} & \textbf{Number} & \textbf{Description} & \textbf{Qt'y} &
|
||||
% & \textbf{Serial Number} \\
|
||||
%<?xlsmb end pagebreak ?>
|
||||
|
||||
|
||||
\vspace*{0.5cm}
|
||||
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb name ?>
|
||||
|
||||
<?lsmb address1 ?>
|
||||
|
||||
<?lsmb address2 ?>
|
||||
|
||||
<?lsmb city ?>
|
||||
<?lsmb IF state ?>
|
||||
\hspace{-0.1cm}, <?lsmb state ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb zipcode ?>
|
||||
|
||||
<?lsmb country ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF contact ?>
|
||||
<?lsmb contact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerphone ?>
|
||||
<?lsmb text('Tel: [_1]', customerphone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF customerfax ?>
|
||||
<?lsmb text('Fax: [_1]', customerfax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb email ?>
|
||||
}
|
||||
\parbox[t]{.5\textwidth}{
|
||||
\textbf{Ship To}
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb shiptoname ?>
|
||||
|
||||
<?lsmb shiptoaddress1 ?>
|
||||
|
||||
<?lsmb shiptoaddress2 ?>
|
||||
|
||||
<?lsmb shiptocity ?>
|
||||
<?lsmb IF shiptostate ?>
|
||||
\hspace{-0.1cm}, <?lsmb shiptostate ?>
|
||||
<?lsmb END ?>
|
||||
<?lsmb shiptozipcode ?>
|
||||
|
||||
<?lsmb shiptocountry ?>
|
||||
|
||||
\vspace{0.3cm}
|
||||
|
||||
<?lsmb IF shiptocontact ?>
|
||||
<?lsmb shiptocontact ?>
|
||||
\vspace{0.2cm}
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptophone ?>
|
||||
<?lsmb text('Tel: [_1]', shiptophone) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb IF shiptofax ?>
|
||||
<?lsmb text('Fax: [_1]', shiptofax) ?>
|
||||
<?lsmb END ?>
|
||||
|
||||
<?lsmb shiptoemail ?>
|
||||
}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\textbf{\MakeUppercase{<?lsmb text('Work Order') ?>}}
|
||||
\hfill
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{tabularx}{\textwidth}{*{6}{|X}|} \hline
|
||||
\textbf{Order \#} & \textbf{Order Date} & \textbf{Required by} & \textbf{Salesperson} & \textbf{Shipping Point} & \textbf{Ship Via} \\ [0.5em]
|
||||
\hline
|
||||
<?lsmb ordnumber ?> & <?lsmb orddate ?> & <?lsmb reqdate ?> & <?lsmb employee ?> & <?lsmb shippingpoint ?> & <?lsmb shipvia ?> \\
|
||||
\hline
|
||||
\end{tabularx}
|
||||
|
||||
\vspace{1cm}
|
||||
|
||||
\begin{longtable}{@{\extracolsep{\fill}}rllrll@{}}
|
||||
\textbf{<?lsmb text('Item') ?>} & \textbf{<?lsmb text('Number') ?>}
|
||||
& \textbf{<?lsmb text('Description') ?>} & \textbf{<?lsmb text('Qty') ?>} &
|
||||
& \textbf{<?lsmb text('Serial Number') ?>} \\
|
||||
<?lsmb FOREACH number ?>
|
||||
<?lsmb lc = loop.index ?>
|
||||
<?lsmb runningnumber.${lc} ?> &
|
||||
<?lsmb number.${lc} ?> &
|
||||
<?lsmb item_description.${lc} ?> &
|
||||
<?lsmb qty.${lc} ?> &
|
||||
<?lsmb unit.${lc} ?> &
|
||||
<?lsmb serialnumber.${lc} ?> \\
|
||||
<?lsmb END ?>
|
||||
\end{longtable}
|
||||
|
||||
|
||||
\parbox{\textwidth}{
|
||||
\rule{\textwidth}{2pt}
|
||||
|
||||
\vspace{12pt}
|
||||
|
||||
<?lsmb FOREACH P IN notes.split('\n\n+') ?>
|
||||
<?lsmb P ?>\medskip
|
||||
|
||||
<?lsmb END ?>
|
||||
}
|
||||
|
||||
\vfill
|
||||
|
||||
\end{document}
|
||||
<?lsmb END -?>
|
||||
Executable → Regular
+109
-89
@@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
set -euo pipefail
|
||||
|
||||
# --- CONFIGURATION ---
|
||||
@@ -10,122 +11,141 @@ EXCLUDE_LIST=(120 121 150 151 152)
|
||||
declare -A CONTAINER_MAP
|
||||
CONTAINER_MAP[100]="/mnt/flash1/podman/lxc_servarr/"
|
||||
CONTAINER_MAP[101]="/mnt/flash1/podman/lxc_second/"
|
||||
CONTAINER_MAP[102]="/mnt/flash1/podman/lxc_bird/"
|
||||
CONTAINER_MAP[108]="/mnt/flash1/podman/lxc_dns/" # Multiple paths allowed
|
||||
CONTAINER_MAP[109]="/mnt/flash1/podman/lxc_immich/"
|
||||
CONTAINER_MAP[111]="/mnt/flash1/podman/lxc_ollama/"
|
||||
|
||||
# --- UTILS ---
|
||||
log() {
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*"
|
||||
}
|
||||
|
||||
# Wrapper for commands that modify state
|
||||
run_pct() {
|
||||
if [[ "${DRY_RUN:-0}" == "1" ]]; then
|
||||
log "[DRY-RUN] pct $*"
|
||||
else
|
||||
pct "$@"
|
||||
fi
|
||||
if [[ "${DRY_RUN:-0}" == "1" ]]; then
|
||||
log "[DRY-RUN] pct $*"
|
||||
else
|
||||
pct "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
cleanup_sudoers() {
|
||||
local ctid="${1:-}"
|
||||
[ -z "$ctid" ] && return 0
|
||||
pct exec "$ctid" -- rm -f /etc/sudoers.d/99-paru-nopass >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
ALL_CTIDS=$(pct list | awk 'NR>1 {print $1}')
|
||||
|
||||
for CTID in $ALL_CTIDS; do
|
||||
# Check if CTID is in EXCLUDE_LIST
|
||||
IS_EXCLUDED=false
|
||||
for EXCLUDE in "${EXCLUDE_LIST[@]}"; do
|
||||
if [[ "$CTID" == "$EXCLUDE" ]]; then
|
||||
IS_EXCLUDED=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ "$IS_EXCLUDED" = true ]; then continue; fi
|
||||
# Check if CTID is in EXCLUDE_LIST
|
||||
if [[ " ${EXCLUDE_LIST[*]} " =~ " $CTID " ]]; then continue; fi
|
||||
|
||||
if pct config "$CTID" | grep -q "template: 1"; then continue; fi
|
||||
if pct config "$CTID" | grep -q "template: 1"; then continue; fi
|
||||
|
||||
NAME=$(pct config "$CTID" | grep "hostname:" | awk '{print $2}')
|
||||
STATUS=$(pct status "$CTID" | awk '{print $2}')
|
||||
NAME=$(pct config "$CTID" | grep "hostname:" | awk '{print $2}')
|
||||
STATUS=$(pct status "$CTID" | awk '{print $2}')
|
||||
|
||||
echo "======================================================="
|
||||
log "PROCESSING LXC: $NAME (ID: $CTID)"
|
||||
echo "======================================================="
|
||||
echo "======================================================="
|
||||
log "PROCESSING LXC: $NAME (ID: $CTID)"
|
||||
echo "======================================================="
|
||||
|
||||
WAS_STOPPED=false
|
||||
if [ "$STATUS" == "stopped" ]; then
|
||||
run_pct start "$CTID"
|
||||
[[ "${DRY_RUN:-0}" == "0" ]] && sleep 10
|
||||
WAS_STOPPED=true
|
||||
fi
|
||||
WAS_STOPPED=false
|
||||
if [ "$STATUS" == "stopped" ]; then
|
||||
run_pct start "$CTID"
|
||||
[[ "${DRY_RUN:-0}" == "0" ]] && sleep 10
|
||||
WAS_STOPPED=true
|
||||
fi
|
||||
|
||||
# --- 1. SETUP PASSWORDLESS FOR PARU ---
|
||||
# Paru MUST run as a user, so we keep this sudoers rule for pacman.
|
||||
log "[+] Configuring temporary sudoers for $AUR_USER..."
|
||||
run_pct exec "$CTID" -- bash -c "echo '$AUR_USER ALL=(ALL) NOPASSWD: /usr/bin/pacman' > /etc/sudoers.d/99-paru-nopass"
|
||||
run_pct exec "$CTID" -- chmod 440 /etc/sudoers.d/99-paru-nopass
|
||||
# --- 1. SETUP PASSWORDLESS FOR PARU ---
|
||||
# Paru MUST run as a user, so we keep this sudoers rule for pacman.
|
||||
log "[+] Configuring temporary sudoers for $AUR_USER..."
|
||||
run_pct exec "$CTID" -- bash -c "echo '$AUR_USER ALL=(root) NOPASSWD: /usr/bin/pacman' > /etc/sudoers.d/99-paru-nopass"
|
||||
run_pct exec "$CTID" -- chmod 440 /etc/sudoers.d/99-paru-nopass
|
||||
trap 'cleanup_sudoers "$CTID"' EXIT
|
||||
|
||||
# --- 2. OS UPDATER (User Context) ---
|
||||
log "[+] Updating Arch packages (as $AUR_USER)..."
|
||||
run_pct exec "$CTID" -- sudo -u "$AUR_USER" paru -Syu --noconfirm --cleanafter
|
||||
# --- 2. OS UPDATER (User Context) ---
|
||||
log "[+] Updating Arch packages (as $AUR_USER)..."
|
||||
run_pct exec "$CTID" -- sudo -u "$AUR_USER" paru -Syu --noconfirm --cleanafter || log "[WARN] Package update failed for CT $CTID"
|
||||
|
||||
# --- 3. PODMAN SCAN (Root Context) ---
|
||||
if [[ -n "${CONTAINER_MAP[$CTID]:-}" ]]; then
|
||||
# Check Storage Driver (Diagnostic)
|
||||
DRIVER=$(pct exec "$CTID" -- podman info --format '{{.Store.GraphDriverName}}' 2>/dev/null || echo "unknown")
|
||||
if [[ "$DRIVER" == "vfs" ]]; then
|
||||
log "[WARN] Storage driver is 'vfs'. Image operations will be slow."
|
||||
fi
|
||||
# --- 3. PODMAN SCAN (Root Context) ---
|
||||
if [[ -n "${CONTAINER_MAP[$CTID]:-}" ]]; then
|
||||
# Check Storage Driver (Diagnostic)
|
||||
DRIVER=$(pct exec "$CTID" -- podman info --format '{{.Store.GraphDriverName}}' 2>/dev/null || echo "unknown")
|
||||
if [[ "$DRIVER" == "vfs" ]]; then
|
||||
log "[WARN] Storage driver is 'vfs'. Image operations will be slow."
|
||||
fi
|
||||
|
||||
# Support multiple paths
|
||||
ROOT_DIRS=${CONTAINER_MAP[$CTID]}
|
||||
for ROOT_DIR in $ROOT_DIRS; do
|
||||
log "[+] Scanning for compose files in: $ROOT_DIR"
|
||||
# Determine compose command once per container
|
||||
FINAL_CMD=""
|
||||
if pct exec "$CTID" -- podman compose version >/dev/null 2>&1; then
|
||||
FINAL_CMD="podman compose"
|
||||
elif pct exec "$CTID" -- podman-compose version >/dev/null 2>&1; then
|
||||
FINAL_CMD="podman-compose"
|
||||
elif pct exec "$CTID" -- docker-compose version >/dev/null 2>&1; then
|
||||
FINAL_CMD="docker-compose"
|
||||
fi
|
||||
|
||||
# Determine Command
|
||||
if pct exec "$CTID" -- podman compose version >/dev/null 2>&1; then
|
||||
FINAL_CMD="podman compose"
|
||||
elif pct exec "$CTID" -- podman-compose version >/dev/null 2>&1; then
|
||||
FINAL_CMD="podman-compose"
|
||||
elif pct exec "$CTID" -- docker-compose version >/dev/null 2>&1; then
|
||||
FINAL_CMD="docker-compose"
|
||||
else FINAL_CMD=""; fi
|
||||
if [ -z "$FINAL_CMD" ]; then
|
||||
log "[WARN] No compose tool found in CT $CTID (tried: podman compose, podman-compose, docker-compose)"
|
||||
else
|
||||
log "[+] Using compose tool: $FINAL_CMD"
|
||||
|
||||
if [ -n "$FINAL_CMD" ]; then
|
||||
# Scan for files
|
||||
if pct exec "$CTID" -- [ -d "$ROOT_DIR" ]; then
|
||||
pct exec "$CTID" -- find "$ROOT_DIR" -maxdepth 2 -name "docker-compose.y*ml" | while read -r FILE; do
|
||||
[ -z "$FILE" ] && continue
|
||||
DIR=$(dirname "$FILE")
|
||||
log " -> Updating Project: $DIR"
|
||||
# Support multiple paths
|
||||
ROOT_DIRS=${CONTAINER_MAP[$CTID]}
|
||||
for ROOT_DIR in $ROOT_DIRS; do
|
||||
log "[+] Scanning for compose files in: $ROOT_DIR"
|
||||
|
||||
log " -> Pulling new images (this may take a while)..."
|
||||
run_pct exec "$CTID" -- bash -c "cd \"$DIR\" && $FINAL_CMD pull"
|
||||
# Scan for files
|
||||
if pct exec "$CTID" -- [ -d "$ROOT_DIR" ]; then
|
||||
COMPOSE_FILES=$(pct exec "$CTID" -- find "$ROOT_DIR" -maxdepth 2 -name "docker-compose.y*ml" 2>/dev/null || true)
|
||||
if [ -n "$COMPOSE_FILES" ]; then
|
||||
echo "$COMPOSE_FILES" | while read -r FILE; do
|
||||
[ -z "$FILE" ] && continue
|
||||
DIR=$(dirname "$FILE")
|
||||
log " -> Updating Project: $DIR"
|
||||
|
||||
if [ "$WAS_STOPPED" = true ]; then
|
||||
log " -> Recreating stopped container (up --no-start)..."
|
||||
run_pct exec "$CTID" -- bash -c "cd \"$DIR\" && $FINAL_CMD up --no-start" ||
|
||||
log " [WARN] Failed to recreate stopped container. Old images may not be pruned."
|
||||
else
|
||||
log " -> Applying updates (up -d --force-recreate)..."
|
||||
run_pct exec "$CTID" -- bash -c "cd \"$DIR\" && $FINAL_CMD up -d --force-recreate"
|
||||
fi
|
||||
done
|
||||
else
|
||||
log " [WARN] Root directory not found: $ROOT_DIR"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
log "[+] Pruning all unused images to save space..."
|
||||
run_pct exec "$CTID" -- podman image prune -a -f
|
||||
fi
|
||||
log " -> Pulling new images (this may take a while)..."
|
||||
run_pct exec "$CTID" -- bash -c "cd \"$DIR\" && $FINAL_CMD pull" || {
|
||||
log " [WARN] Image pull failed for $DIR"
|
||||
}
|
||||
|
||||
# --- 4. MAINTENANCE ---
|
||||
log "[+] Running maintenance tasks (journal, orphans)..."
|
||||
run_pct exec "$CTID" -- journalctl --rotate
|
||||
run_pct exec "$CTID" -- journalctl --vacuum-time=7d
|
||||
run_pct exec "$CTID" -- bash -c "orphans=\$(pacman -Qtdq); if [ -n \"\$orphans\" ]; then echo \" -> Removing orphans: \$orphans\"; pacman -Rns \$orphans --noconfirm; fi"
|
||||
if [ "$WAS_STOPPED" = true ]; then
|
||||
log " -> Recreating stopped container (up --no-start)..."
|
||||
run_pct exec "$CTID" -- bash -c "cd \"$DIR\" && $FINAL_CMD up --no-start" || {
|
||||
log " [WARN] Failed to recreate stopped container in $DIR"
|
||||
}
|
||||
else
|
||||
log " -> Applying updates (up -d --force-recreate)..."
|
||||
run_pct exec "$CTID" -- bash -c "cd \"$DIR\" && $FINAL_CMD up -d --force-recreate" || {
|
||||
log " [WARN] Compose up failed for $DIR (exit: $?)"
|
||||
}
|
||||
fi
|
||||
done
|
||||
fi
|
||||
else
|
||||
log " [WARN] Root directory not found: $ROOT_DIR"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$WAS_STOPPED" = true ]; then
|
||||
log "[+] Shutting down container (was previously stopped)..."
|
||||
run_pct shutdown "$CTID"
|
||||
fi
|
||||
log "[+] Pruning all unused images to save space..."
|
||||
run_pct exec "$CTID" -- podman image prune -a -f || log "[WARN] Image prune failed for CT $CTID"
|
||||
fi
|
||||
|
||||
# --- 4. MAINTENANCE ---
|
||||
log "[+] Running maintenance tasks (journal, orphans)..."
|
||||
run_pct exec "$CTID" -- journalctl --rotate || log "[WARN] journalctl rotate failed"
|
||||
run_pct exec "$CTID" -- journalctl --vacuum-time=7d || log "[WARN] journalctl vacuum failed"
|
||||
run_pct exec "$CTID" -- bash -c "orphans=\$(pacman -Qtdq); if [ -n \"\$orphans\" ]; then echo \" -> Removing orphans: \$orphans\"; pacman -Rns \$orphans --noconfirm; fi" || log "[WARN] Orphan removal failed"
|
||||
|
||||
# Cleanup temporary sudoers before possible shutdown
|
||||
cleanup_sudoers "$CTID"
|
||||
trap - EXIT
|
||||
|
||||
if [ "$WAS_STOPPED" = true ]; then
|
||||
log "[+] Shutting down container (was previously stopped)..."
|
||||
run_pct shutdown "$CTID"
|
||||
fi
|
||||
done
|
||||
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
Executable → Regular
File mode changed.
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --- Configuration ---
|
||||
BACKUP_DIR="$HOME/paperless-backups"
|
||||
PAPERLESS_DATA_DIR="/mnt/flash1/podman/lxc_servarr/browser/data"
|
||||
DATEStamp=$(date +%F-%H%M)
|
||||
DB_BACKUP="$BACKUP_DIR/paperless-db-backup-$DATEStamp.sql.gz"
|
||||
FILES_BACKUP="$BACKUP_DIR/paperless-files-backup-$DATEStamp.tar.gz"
|
||||
|
||||
# --- Prepare ---
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# --- Step 1: Backup Database ---
|
||||
echo "[$(date)] Starting database backup..."
|
||||
sudo podman exec paperless-db pg_dump -U paperless paperless | gzip >"$DB_BACKUP"
|
||||
|
||||
if [ -s "$DB_BACKUP" ]; then
|
||||
echo "[$(date)] ✅ Database backup created: $DB_BACKUP"
|
||||
else
|
||||
echo "[$(date)] ❌ Database backup failed"
|
||||
rm -f "$DB_BACKUP"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Step 2: Backup Disk Folders ---
|
||||
echo "[$(date)] Starting files backup..."
|
||||
|
||||
tar czf "$FILES_BACKUP" \
|
||||
"$PAPERLESS_DATA_DIR/paperless/media" \
|
||||
"$PAPERLESS_DATA_DIR/paperless/data" \
|
||||
"$PAPERLESS_DATA_DIR/paperless/export" \
|
||||
"$PAPERLESS_DATA_DIR/.consume" \
|
||||
2>/dev/null
|
||||
|
||||
if [ -s "$FILES_BACKUP" ]; then
|
||||
echo "[$(date)] ✅ Files backup created: $FILES_BACKUP"
|
||||
else
|
||||
echo "[$(date)] ❌ Files backup failed"
|
||||
rm -f "$FILES_BACKUP"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Step 3: Verify ---
|
||||
echo ""
|
||||
echo "=== Backup Summary ==="
|
||||
ls -lh "$DB_BACKUP" "$FILES_BACKUP"
|
||||
|
||||
# --- Step 4: Cleanup old backups (keep 14 days) ---
|
||||
find "$BACKUP_DIR" -name "paperless-db-backup-*.sql.gz" -mtime +14 -delete
|
||||
find "$BACKUP_DIR" -name "paperless-files-backup-*.tar.gz" -mtime +14 -delete
|
||||
|
||||
echo "[$(date)] ✅ Backup complete. Old backups older than 14 days removed."
|
||||
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --- CONFIGURATION ---
|
||||
# Replace with the actual path to your update script
|
||||
UPDATE_SCRIPT="/mnt/tank/scripts/lxc-update.sh"
|
||||
# Replace with your specific Uptime Kuma Push URL
|
||||
KUMA_URL="https://uptime.liphlink.xyz/api/push/2H3mltg79B?status=up&msg=OK&ping="
|
||||
|
||||
# --- EXECUTION ---
|
||||
# Run the LXC update script
|
||||
# The script will process LXCs, run paru/pacman updates, and handle maintenance [1]
|
||||
bash "$UPDATE_SCRIPT"
|
||||
EXIT_CODE=$?
|
||||
|
||||
# --- PING LOGIC ---
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
# If the script finishes the entire loop and maintenance tasks successfully [1]
|
||||
/usr/bin/curl -fsS --retry 3 "${KUMA_URL}?status=up&msg=LXC_Updates_Successful"
|
||||
else
|
||||
# If any part of the script fails (due to set -e), send a 'down' status [1]
|
||||
/usr/bin/curl -fsS --retry 3 "${KUMA_URL}?status=down&msg=LXC_Update_Failed_Exit_$EXIT_CODE"
|
||||
|
||||
fi
|
||||
Executable → Regular
File renamed without changes.
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --- CONFIGURATION ---
|
||||
# Replace with the actual path to your update script
|
||||
UPDATE_SCRIPT="/mnt/tank/scripts/paperless_backup.sh"
|
||||
# Replace with your specific Uptime Kuma Push URL
|
||||
KUMA_URL="https://uptime.liphlink.xyz/api/push/LW7OZFTXSa?status=up&msg=OK&ping="
|
||||
|
||||
# --- EXECUTION ---
|
||||
# Run the LXC update script
|
||||
# The script will process LXCs, run paru/pacman updates, and handle maintenance [1]
|
||||
bash "$UPDATE_SCRIPT"
|
||||
EXIT_CODE=$?
|
||||
|
||||
# --- PING LOGIC ---
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
# If the script finishes the entire loop and maintenance tasks successfully [1]
|
||||
/usr/bin/curl -fsS --retry 3 "${KUMA_URL}?status=up&msg=LXC_Updates_Successful"
|
||||
else
|
||||
# If any part of the script fails (due to set -e), send a 'down' status [1]
|
||||
/usr/bin/curl -fsS --retry 3 "${KUMA_URL}?status=down&msg=LXC_Update_Failed_Exit_$EXIT_CODE"
|
||||
|
||||
fi
|
||||
Executable → Regular
File mode changed.
Executable → Regular
+4
-8
@@ -1,17 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo chown -R 101000:100033 /mnt/{hdd1,hdd2,hdd3,hdd4,hdd5,ssd1,ssd2}
|
||||
sudo chown -R 101000:101000 /mnt/tank/{audio,movies,series,shows,tutorial,documentaries,sports}
|
||||
sudo chmod -R 777 /mnt/tank/{audio,movies,series,shows,tutorial,documentaries,sports}
|
||||
|
||||
sudo chmod -R 775 /mnt/{hdd1,hdd2,hdd3,hdd4,hdd5,ssd1,ssd2}
|
||||
|
||||
sudo chown -R 101000:101000 /mnt/tank/audio
|
||||
sudo chmod -R 777 /mnt/tank/audio
|
||||
sudo chown -R 101000:101000 /mnt/flash1/downloads/torrent/
|
||||
sudo chmod -R 777 /mnt/flash1/downloads/torrent
|
||||
|
||||
sudo chown -R 101000:101000 /mnt/flash1/downloads/music
|
||||
sudo chmod -R 755 /mnt/flash1/downloads/music
|
||||
|
||||
sudo chown -R 100033:101000 /mnt/ssd2/cloud_phil /mnt/flash1/podman/lxc_servarr/browser/data/.consume
|
||||
sudo chmod -R 775 /mnt/ssd2/cloud_phil /mnt/flash1/podman/lxc_servarr/browser/data/.consume
|
||||
|
||||
sudo chown -R 101000:101000 /mnt/flash1/podman/lxc_servarr/nextcloud/config/obsidian/vaults
|
||||
sudo chmod -R 755 /mnt/flash1/podman/lxc_servarr/nextcloud/config/obsidian/vaults
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo chown -R 101000:100033 /mnt/ssd2/{ebooks_phil,cloud_phil}
|
||||
sudo chmod -R 775 /mnt/ssd2/{ebooks_phil,cloud_phil}
|
||||
|
||||
# sudo chown -R 101000:100033 /mnt/{hdd1,hdd2,hdd3,hdd4,hdd5,ssd1,ssd2}
|
||||
# sudo chmod -R 775 /mnt/{hdd1,hdd2,hdd3,hdd4,hdd5,ssd1,ssd2}
|
||||
|
||||
sudo chown -R 100033:101000 /mnt/flash1/podman/lxc_servarr/browser/data/.consume
|
||||
sudo chmod -R 775 /mnt/flash1/podman/lxc_servarr/browser/data/.consume
|
||||
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Step 1: Prompt user for Year and Tag [7][9]
|
||||
read -p "Enter Year: " user_year
|
||||
read -p "Enter Tag: " user_tag
|
||||
|
||||
# Process the first MP4 file found in the current directory
|
||||
for file in *.mp4; do
|
||||
if [ -f "$file" ]; then
|
||||
# Extract Title and Resolution (Height) using ExifTool [4][5]
|
||||
# -s3 returns just the value of the tag
|
||||
title=$(exiftool -s3 -Title "$file")
|
||||
|
||||
# If the internal Title tag is empty, fall back to the filename [5]
|
||||
if [ -z "$title" ]; then
|
||||
title="${file%.*}"
|
||||
fi
|
||||
|
||||
# Extracting image height for pixel count (e.g., 1080) [4]
|
||||
height=$(exiftool -s3 -ImageHeight "$file")
|
||||
if [ -n "$height" ]; then
|
||||
pixel="${height}p"
|
||||
else
|
||||
pixel="UnknownRes"
|
||||
fi
|
||||
|
||||
# Construct the new base name (without extension)
|
||||
new_base_name="${title} ${user_year} ${pixel} ${user_tag}"
|
||||
|
||||
# Step 2: Rename the file [5][11]
|
||||
new_file_name="${new_base_name}.mp4"
|
||||
mv "$file" "$new_file_name"
|
||||
|
||||
# Step 3: Rename the parent directory [1][2]
|
||||
# Identify current directory info
|
||||
current_dir_path=$(pwd)
|
||||
parent_dir=$(dirname "$current_dir_path")
|
||||
current_folder_name=$(basename "$current_dir_path")
|
||||
|
||||
# Move to the parent directory to rename the 'root' folder
|
||||
cd "$parent_dir" || exit
|
||||
mv "$current_folder_name" "$new_base_name"
|
||||
|
||||
echo "Successfully renamed file to: $new_file_name"
|
||||
echo "Successfully renamed folder to: $new_base_name"
|
||||
|
||||
# Exit after processing the first video file
|
||||
break
|
||||
fi
|
||||
done
|
||||
Loaded 100 of 118 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user