ryuji0909 / memo

0 stars 0 forks source link

(GAS)在庫管理システム(詳細ページ海外用) #3

Open ryuji0909 opened 3 months ago

ryuji0909 commented 3 months ago

function doGet(e) { const template = HtmlService.createTemplateFromFile('index'); const dropdownData = getDropdownData(); // ドロップダウンデータの取得

template.countryData = dropdownData.country; // 国のデータをテンプレートに渡す template.currencyData = dropdownData.currency; // 通貨のデータをテンプレートに渡す let param = [];

if (!e.parameter.p2) { template.isNewEntry = true; // 新規登録用フラグ template.param = []; } else { const keyword = e.parameter.p2 ? e.parameter.p2 : e.parameter.p1; const searchColumn = e.parameter.p2 ? "A:A" : "A:A"; const items = findByTextFinder(keyword, searchColumn); if (items.length > 0) { param = [ items[0].supplier_id, items[0].supplier_code, items[0].supplier_companyname, items[0].supplier_country, items[0].supplier_officeaddress, items[0].supplier_contactname, items[0].supplier_contactmail, items[0].supplier_contacttel, items[0].supplier_contactfax, items[0].supplier_contactperson3, items[0].supplier_hosoku_2, items[0].supplier_warehouseaddress, items[0].supplier_warehousename, items[0].supplier_warehouseemail, items[0].supplier_warehousetel, items[0].supplier_warehousefax, items[0].supplier_s_hosoku, items[0].supplier_warehouseaddress_1, items[0].supplier_forwadername,
items[0].supplier_forwaderemail, items[0].supplier_forwadertel, items[0].supplier_f_supplement, items[0].supplier_currency, items[0].supplier_tradeterms, items[0].supplier_tradetermstxt, items[0].supplier_paymentterms, items[0].supplier_bankname, items[0].supplier_branch, items[0].supplier_bankaddress, items[0].supplier_swift, items[0].supplier_accountnumber, items[0].supplier_accountname, items[0].supplier_beneficiaryaddress, items[0].supplier_intermediatebank, items[0].supplier_homepageurl, items[0].supplier_idpassword, items[0].supplier_minimumorder, items[0].supplier_discounts, items[0].supplier_productionleadtime, items[0].supplier_remarks, items[0].supplier_supplement_2, ]; template.isNewEntry = false; // 更新用のフラグを設定 } } template.param = param; // スプレッドシートから取得したデータを格納している return template.evaluate(); }

function getDropdownData() { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('国、通貨項目リスト');

// 最終行の特定 const lastRow = sheet.getLastRow();

// A列のデータを取得 const countryDataRange = sheet.getRange(1, 1, lastRow, 1).getValues(); // 1列目のデータを取得 const countryDataValues = countryDataRange.map(function(row) { return row[0]; }).filter(function(value) { return value; });

// B列のデータを取得 const currencyDataRange = sheet.getRange(1, 2, lastRow, 1).getValues(); // 2列目のデータを取得 const currencyDataValues = currencyDataRange.map(function(row) { return row[0]; }).filter(function(value) { return value; });

return { country: countryDataValues, currency: currencyDataValues }; }

//https://script.google.com/a/macros/hq.stylinglife.co.jp/s/AKfycbw_fkmEsoR9i9wNnbpMceBKAyIDtJ4oq3k98w2JODrMHNmVPzxJlV18fcAmwpjEvZM/exec?p1=49xxxxxxxxxxx

//のように、引数を渡すには、/exec?p1=のように書く。

// 詳細ページを開く際に、キーワードを検索してそのキーワードと一致した行を取得する function findByTextFinder(keyword, searchColumn) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧'); const textFinder = sheet.getRange(searchColumn).createTextFinder(keyword).matchEntireCell(true).findNext();

if (textFinder) { let row = textFinder.getRow(); return [{ 'supplier_id': sheet.getRange(row, 1).getValue(), 'supplier_code': sheet.getRange(row, 2).getValue(), 'supplier_companyname': sheet.getRange(row, 3).getValue(), 'supplier_country': sheet.getRange(row, 4).getValue(), 'supplier_officeaddress': sheet.getRange(row, 5).getValue(), 'supplier_contactname': sheet.getRange(row, 6).getValue(), 'supplier_contactmail': sheet.getRange(row, 7).getValue(), 'supplier_contacttel': sheet.getRange(row, 8).getValue(), 'supplier_contactfax': sheet.getRange(row, 9).getValue(), 'supplier_contactperson3': sheet.getRange(row, 10).getValue(), 'supplier_hosoku_2': sheet.getRange(row, 11).getValue(), 'supplier_warehouseaddress': sheet.getRange(row, 12).getValue(), 'supplier_warehousename': sheet.getRange(row, 13).getValue(), 'supplier_warehouseemail': sheet.getRange(row, 14).getValue(), 'supplier_warehousetel': sheet.getRange(row, 15).getValue(), 'supplier_warehousefax': sheet.getRange(row, 16).getValue(), 'supplier_s_hosoku': sheet.getRange(row, 17).getValue(), 'supplier_warehouseaddress_1': sheet.getRange(row, 18).getValue(), 'supplier_forwadername': sheet.getRange(row, 19).getValue(), 'supplier_forwaderemail': sheet.getRange(row, 20).getValue(), 'supplier_forwadertel': sheet.getRange(row, 21).getValue(), 'supplier_f_supplement': sheet.getRange(row, 22).getValue(), 'supplier_currency': sheet.getRange(row, 23).getValue(), 'supplier_tradeterms': sheet.getRange(row, 24).getValue(), 'supplier_tradetermstxt': sheet.getRange(row, 25).getValue(), 'supplier_paymentterms': sheet.getRange(row, 26).getValue(), 'supplier_bankname': sheet.getRange(row, 27).getValue(), 'supplier_branch': sheet.getRange(row, 28).getValue(), 'supplier_bankaddress': sheet.getRange(row, 29).getValue(), 'supplier_swift': sheet.getRange(row, 30).getValue(), 'supplier_accountnumber': sheet.getRange(row, 31).getValue(), 'supplier_accountname': sheet.getRange(row, 32).getValue(), 'supplier_beneficiaryaddress': sheet.getRange(row, 33).getValue(), 'supplier_intermediatebank': sheet.getRange(row, 34).getValue(), 'supplier_homepageurl': sheet.getRange(row, 35).getValue(), 'supplier_idpassword': sheet.getRange(row, 36).getValue(), 'supplier_minimumorder': sheet.getRange(row, 37).getValue(), 'supplier_discounts': sheet.getRange(row, 38).getValue(), 'supplier_productionleadtime': sheet.getRange(row, 39).getValue(), 'supplier_remarks': sheet.getRange(row, 40).getValue(), 'supplier_supplement_2': sheet.getRange(row, 41).getValue() }]; } else { // 該当する行が見つからない場合は空の配列を返す return []; } }

function updateData(formData) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧'); const idRange = sheet.getRange("A:A"); const idValues = idRange.getValues();

Logger.log(formData.country)

if (!formData.code) { return 'CODEが空白です。' }

for (let i = 0; i < idValues.length; i++) { if (idValues[i][0] == formData.id) { let row = i + 1; setRowData(sheet, row, formData); return 'データが更新されました。'; } } return '指定されたIDのデータが見つかりませんでした。'; }

// データの新規登録 function addData(formData) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧');

// A列の最終行のID番号を取得 const lastRow = sheet.getRange('A:A').getValues().filter(String).length; const lastId = sheet.getRange('A' + lastRow).getValue(); const newId = lastId + 1; // 最終行のID番号に+1する

// バリデーション追加 if (!formData.code) { return "CODEが空白です。"; }

// formDataにIDを追加 formData.id = newId;

// 新しい行にデータを追加する setRowData(sheet, lastRow + 1, formData);

return '新しいデータが追加されました。'; }

// スプレッドシートへデータを挿入 function setRowData(sheet, row, formData) { let data = [ formData.id, // A列:ID "'" + formData.code, // B列: CODE (文字列として設定) formData.companyname, // C列: 会社名 formData.country, // D列: 国 formData.officeaddress, // E列: officeaddress formData.contactname, // F列: contactname formData.contactmail, // G列: contactmail formData.contacttel, // H列: contacttel formData.contactfax, // I列: contactfax formData.contactperson3, // J列: 補足1 formData.hosoku_2, // K列: 補足

//Warehouse 
formData.warehouseaddress, // L列: contactperson3
formData.warehousename, // M列: warehousename
formData.warehouseemail, // N列: warehouseemail
formData.warehousetel, // O列: warehousetel
formData.warehousefax, // P列: warehousefax
formData.s_hosoku, // Q列: s_hosoku

//Forwarder
formData.warehouseaddress_1, // R列: warehouseaddress_1
formData.forwadername, // S列: forwadername
formData.forwaderemail, // T列: forwaderemail
formData.forwadertel, // U列: 無題4
formData.f_supplement, // V列: f_supplement

// 取引条件
formData.currency, // W列: 通貨
formData.tradeterms, // X列: 貿易条件
formData.tradetermstxt, // Y列: tradetermstxt
formData.paymentterms, // Z列: 支払条件

// Bank Account 
formData.bankname, // AA列: 銀行名
formData.branch, // AB列: branch
formData.bankaddress, // AC列: bankaddress
formData.swift, // AD列: swift
formData.accountnumber, // AE列: accountnumber
formData.accountname, // AF列: accountname
formData.beneficiaryaddress, // AG列: beneficiaryaddress
formData.intermediatebank, // AH列: intermediatebank(新規)

// その他
formData.homepageurl, // AI列: homepageurl
formData.idpassword, // AJ列: idpassword(新規)
formData.minimumorder, // AK列: minimumorder
formData.discounts, // AL列: discounts
formData.productionleadtime, // AM列: productionleadtime
formData.remarks, // AN列: 補足1
formData.supplement_2 // AO列: 補足2

];

sheet.getRange(row, 1, 1, data.length).setValues([data]).toString(); }

ryuji0909 commented 3 months ago

<!DOCTYPE html>

Company Code :
Company Name
:
Country
:
Company Address :
ContactName :
Email :
Tel :
FAX :
補足① :
補足② :

Warehouse

Warehouse Address :
Contact Name :
Email :
TEL :
FAX :
補足 :

Forwarder

Company Name :
Contact Name :
Email :
Tel :
補足 :

取引条件

Currency :
Trade Terms :
補足 :
Payment Terms :

Bank Account

BankName :
Branch Name :
Branch Address :
SWIFT or ABA :
Account # (IBAN) :
Beneficiary Name :
Beneficiary Address :
Intermediate Bank (経由銀行) :

その他

Homepage :
ID + Password :
MOQ :
Discount :
Production Lead Time :
補足① :
補足② :