Greasy Fork

Greasy Fork is available in English.

Cetak Sekaligus Kertas A6

Untuk mencetak sekaligus buat kertas ukuran A6 untuk Tokopedia, Bukalapak, Shopee, dan Akulaku

当前为 2019-03-05 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Cetak Sekaligus Kertas A6
// @author       Celleven Store
// @namespace    https://www.tokopedia.com/celleven
// @version      0.0.12
// @description  Untuk mencetak sekaligus buat kertas ukuran A6 untuk Tokopedia, Bukalapak, Shopee, dan Akulaku
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @match        https://www.tokopedia.com/logistic/print-address*
// @match        https://www.tokopedia.com/print-address.pl*
// @match        https://seller.shopee.co.id/api/v2/orders/waybill*
// @match        https://www.bukalapak.com/payment/transactions/print_preview*
// @match        http://vendor.akulaku.com/*
// @run-at       document-idle
// ==/UserScript==

(function() {
  'use strict';

  var backgroundImage = '';
  var logo = '';

  if (window.location.href.indexOf("tokopedia") > -1)
  {
    cetakTokopedia();
  }
  else if (window.location.href.indexOf("shopee") > -1)
  {
    cetakShopee();
  }
  else if (window.location.href.indexOf("bukalapak") > -1)
  {
    cetakBukalapak();
  }
  else if (window.location.href.indexOf("akulaku") > -1)
  {
    cetakAkulaku();
  }

})();

function cetakTokopedia()
{
  var styleCSS = `<style>
  @page
  {
    size: 105mm 148mm portrait;
    margin: 3mm 2mm 2mm 3mm;
  }
  @media print
  {
    div.address_contaier_left, div.address_contaier_right, div.address
    {
      float: none !important;
      padding-left: 0px;
      width: 540px !important;
    }
    div.address
    {
      page-break-after: always;
    }
    /*body
    {
      zoom: 117%;
    }*/
    h5
    {
      display: none;
    }
    div.address_contaier_left > div > table, div.address_contaier_right > div > table
    {
      width: 540px !important;
    }
    div.additional_info_wrapper
    {
      margin-top: 7px;
      margin-bottom: -10px;
    }
    div.header_wrapper
    {
      padding: 10px;
      margin-bottom: 5px;
    }
  }
  </style>`;

  $('body').append(styleCSS);
  $('div.address > table > tbody > tr > td').each(function(x, r)
  {
    $(r).find('table:contains("Kepada") > tbody > tr > td > div').css('font-size', '17px');
  });

  $("table div:contains('bayar asuransi')").remove();
  $("div.page-break").remove();
  $("td div:contains('Asuransi')").next().html('+ Rp 0').css('text-decoration', 'none');
  $("td div:contains('Ongkir')").next().css('text-decoration', 'none');
  $("div.address_contaier_right").each(function()
  {
    if ($(this).children().length == 0)
    {
      $(this).remove();
    }
  });
  $("div.address").filter(function()
  {
    return $(this).text().trim() == "";
  }).remove();
  $("div.address_contaier_right").filter(function()
  {
    return $(this).text().trim() == "";
  }).remove();
}

function cetakShopee()
{
  var styleCSS = `<style>
  @page
  {
    margin: 4mm 1mm 2mm 4mm;
  }
  @media print
  {
    .page
    {
      float: none !important;
      page-break-after: always;
      border-right: none !important;
      width: 48%;
    }
    .left
    {
      margin-left: -1px;
    }
    .page.left
    {
      padding: 0 0.55in 0 0;
      border-right: none;
    }
    .page.right
    {
      padding: 0 0.55in 0 0;
      border-left: none;
    }
  }
  </style>`;

  $('style:last').html($('style:last').html().replace('A4 landscape', 'auto'));
  $('style:first').html($('style:first').html().replace('A4 landscape', 'auto'));
  $('head').append(styleCSS);
  $('div.page-breaker').remove();
  $('div:last').remove();
  $('img.scissors-vertical').remove();
  $(".page.right").each(function()
  {
    if ($("div.job-shipping-label", this).length > 0)
    {
      $("style:last").html($('style:last').html().replace(/(padding: 0 0.55in 0 0;)/g, ""));
    }
  });
  $("div.page:has(div.job-shipping-label)").css("width", "550px");
  $("div.container:has(div.right) > div.page:has(div.job-shipping-label)").css("width", "530px");
}

function cetakBukalapak()
{
  var styleCSS = `<style>
  @media print
  {
    div.transaction-slip
    {
      page-break-after: always;
      margin-top: 20px;
    }
    div#page > div.row > div.row-item
    {
      float: none;
      width: 100%;
    }
    div.row
    {
      font-size: 13pt;
    }
    div.bukalapak-transaction-slip-footer
    {
      font-size: 12pt;
    }
    div.transaction-slip > div.row > table > tbody > tr > td > span
    {
      font-size: 13pt !important;
    }
    div.notice
    {
      font-size: 12pt;
    }
    div.section-logistic-booking > strong
    {
      font-size: 18pt !important;
    }
    div.section-logistic-booking > img
    {
      height: 82px !important;
      width: 500px !important;
    }
    div.brand-logo > img
    {
      height: 39px !important;
    }
    div.row-item > img
    {
      height: 64px !important;
    }
  }
  </style>`;

  $('body').append(styleCSS);
}

let label = `
<div class="label_alamat">
  <div class="label">
    <div class="logo">
      <img src="{{logotoko}}" width="115" height="24">
    </div>
    <div class="barcode"></div>
    <div class="job" style="display: none;">{{kode_booking}}</div>
    <div class="ekspedisi">
      <div class="logokurir">
        <img src="{{logokurir}}" width="80%">
      </div>
      <div class="kurir">{{ekspedisi}}</div>
      <div class="invoice">Nomor Invoice<br>{{invoice}}</div>
    </div>
    <div class="adminongkir">
      <div class="admin">Administrasi<br><span class="harga_admin">{{administrasi}}</span></div>
      <div class="asuransi">Asuransi<br><span class="harga_asuransi">{{asuransi}}</span></div>
      <div class="ongkir">SubTotal<br><span class="harga_ongkir">{{ongkir}}</span></div>
      <div class="berat">Tanggal<br><span class="total_berat">{{berat}}</span></div>
    </div>
    <div class="penerima">
      <div class="kepada">Kepada</div>
      <div class="penerima2">
        <div class="nama_penerima"><b>{{nama_penerima}}</b> - {{telepon_penerima}}</div>
        <div class="alamat_penerima">{{alamat_penerima}}</div>
      </div>
    </div>
    <div class="pengirim">
      <div class="dari">Dari</div>
      <div class="pengirim2">
        <div class="nama_pengirim"><b>{{nama_pengirim}}</b> - {{telepon_pengirim}}</div>
        <div class="alamat_pengirim">{{alamat_pengirim}}</div>
      </div>
    </div>
    <div class="gunting">
      <div class="icon_gunting">
        <img src="https://ecs7.tokopedia.net/img/kurir/icon-cut.png" width="14">
      </div>
    </div>
    {{foreach_item}}
    <div class="clear"></div>
  </div>
</div>
`;

// foreach_item menggunakan template ini
let item = `
<div class="item">
  <div class="jumlah">{{jumlah_produk}}</div>
  <div class="produk">
    <div class="nama_produk">{{nama_produk}}</div>
    <div class="keterangan">Keterangan: {{keterangan_produk}}</div>
  </div>
</div>
`;

let css = `
<style type="text/css">
  body
  {
    width: 1050px;
    font-size: 13px;
    font-family: sans-serif;
  }
  .print_area
  {
    width: 100%;
  }
  .kiri
  {
    float: left;
    width: 50%;
  }
  .kanan
  {
    float: left;
    margin-left: 5px;
    width: 49%;
  }
  .label_alamat
  {
    border: 1px solid black;
    margin-top: 5px;
    width: 100%;
  }
  .label
  {
    padding: 10px;
  }
  .logo
  {
    width: 100%;
    border-bottom: 1px dashed #bdbcbc;
    padding-bottom: 5px;
  }
  .print
  {
    margin-bottom: 3px;
    font-weight: bold;
    font-family: sans-serif;
    font-size: 15px;
  }
  .print a
  {
    color: green;
    text-decoration: none;
  }
  @media print
  {
    @page
    {
      size: auto;
      margin: 5mm 5mm 5mm 5mm;
    }
    .print
    {
      display: none;
    }
    .label_alamat
    {
      page-break-inside: avoid;
      page-break-after: always;
    }
  }
  div.barcode, div.job, div.ekspedisi, div.barcode, div.adminongkir, div.penerima, div.pengirim, div.item
  {
    padding-bottom: 5px;
    padding-top: 5px;
    padding-left: 5px;
    padding-right: 5px;
  }
  div.logokurir, div.kurir, div.kepada, div.dari, div.jumlah
  {
    width: 25%;
    float: left;
  }
  div.invoice
  {
    width: 50%;
    float: left;
  }
  div.produk
  {
    width: 75%;
    float: left;
  }
  div.penerima2, div.pengirim2
  {
    width: 75%;
    float: left;
    line-height: 1.5;
  }
  div.kiri, div.adminongkir, div.penerima, div.pengirim, div.clear, div.item
  {
    clear: both;
  }
  div.admin, div.asuransi, div.ongkir
  {
    width: 23%;
    float: left;
    line-height: 1.5;
  }
  div.berat
  {
    width: 30%;
    float: left;
    line-height: 1.5;
  }
  span.harga_ongkir, span.total_berat
  {
    font-size: 13px;
  }
  div.gunting
  {
    border-bottom: 1px dashed #bdbcbc;
    padding-top: 5px;
    padding-bottom: 5px;
    margin-top: 40px;
  }
  div.icon_gunting
  {
    position: relative;
    float: right;
    top: 0px;
  }
  div.item
  {
    padding-top: 0px;
  }
  div.keterangan
  {
    font-size: 10px;
    padding-bottom: 10px;
  }

</style>
`;

function cetakAkulaku()
{
  var initWatcher = '';

  if (/index\/processingOrders/.test(window.location.href))
  {
    initWatcher = setInterval(function ()
    {
      console.log('watch');
      if (unsafeWindow.angular)
      {
        clearInterval(initWatcher);
        cetakAkulaku2(1);
      }
    }, 100);
  }
  else if (/index\/preparingOrders/.test(window.location.href))
  {
    initWatcher = setInterval(function ()
    {
      console.log('watch');
      if (unsafeWindow.angular)
      {
        clearInterval(initWatcher);
        cetakAkulaku2(-1);
      }
    }, 100);
  };
}

function cetakAkulaku2(status)
{
    console.log('angular', unsafeWindow.angular);

  $.getJSON('http://vendor.akulaku.com/installment/api/json/vendor/pending/delivery/sales/order/list.do?status=' + status, function()
  {
    console.log( "success" );
  })
  .done(function(data) {
    console.log( "second success" );
      var jumlah = data.data.list.length;
      var list, html = '';

      html += '<title>Cetak Slip Alamat</title>';
      html += css;
      html += '<div class="print"><a href="javascript:window.print();"><img src="https://ecs7.tokopedia.net/img/print.png"> Cetak</a></div><div class="print_area">';

      var kanan = false;
      var x = 0;

      $.each(data.data.list, function(i) {
          list = data.data.list[i];
          if (x == 0)
          {
              html += '<div class="kiri">';
          }
          else if (x == 3 && kanan == false)
          {
              html += '<div class="kanan">';
              kanan = true;
              x = 0;
          }
          else if (x == 3 && kanan == true)
          {
              html += '<div class="kiri">';
              kanan = false;
              x = 0;
          }

          html += cetakAkulaku3(list);

          x++;
          if (x == 3)
          {
              html += '</div>';
          }
      });

      html += '</div></div>';

      $('button.btn.btn-success.btn-sm').first().after('<button type="button" id="cetakAkulaku" class="btn btn-primary btn-sm" style="margin-left: 20px;" data-toggle="button"">Cetak Sekaligus A6 (' + jumlah + ')</button>');
      $('#cetakAkulaku').click(function()
                               {
          var blank = window.open('about:blank#jangan_lupa_traktir', '_blank');
          blank.document.write(html);
      });
  })
  .fail(function() {
    console.log( "error" );
  })
  .always(function() {
    console.log( "complete" );
  });

}

function cetakAkulaku3(list)
{
    var text             = '';
    var logokurir        = 'https://ecs7.tokopedia.net/img/kurir/logo_sicepat.png';
    var logotoko         = 'https://github.com/rendy1287/tokopedia-cetak-sekaligus/raw/master/gambar/logo_akulaku.png';

    var nama_toko        = list.vendorName;
    var nama_penerima    = list.customerName;
    var alamat_penerima  = list.street + ' ' + list.roomNumber + '<br>' + list.district + ', ' + list.city + ', ' + list.province + ' ' + list.postcode;
    var telepon_penerima = list.customerPhone;
    var ekspedisi        = 'SiCepat REG';
    var kode_ekspedisi   = 'SiCepat';
        ekspedisi        = '<b>' + ekspedisi.substr(0, ekspedisi.indexOf(' ')) + '</b><br>' + ekspedisi.substr(ekspedisi.indexOf(' ')+1);
        ekspedisi        = ekspedisi.replace('(', '').replace(')', '');
    var ongkir           = 'Rp ' + formatMoney(list.subTotal, 0, ',', '.');
    var nama_pengirim    = list.vendorName;
    var telepon_pengirim = list.vPhone;
    var alamat_pengirim  = list.vDistrict + ', ' + list.vCity;
    var invoice          = list.invoiceNo;
    var administrasi     = '+ Rp 0';
    var asuransi         = '+ Rp 0';
    var logo_asuransi    = '';
    var berat            = timeConverter(list.orderTime);
    var total_harga      = 'Rp ' + list.subTotal;
    var insurance_type   = '';
	var insurance_note   = '';
	var additional_fee   = '';
    var kode_booking     = '';

    if  (kode_ekspedisi == 'SiCepat')
    {
        logokurir    = 'https://ecs7.tokopedia.net/img/kurir/logo_sicepat.png';
    }

    text += label;
    text = text.replace('{{logotoko}}', logotoko);
    text = text.replace('{{kode_booking}}', kode_booking);
    text = text.replace('{{logokurir}}', logokurir);
    text = text.replace('{{ekspedisi}}', ekspedisi);
    text = text.replace('{{invoice}}', invoice);
    text = text.replace('{{administrasi}}', administrasi);
    text = text.replace('{{asuransi}}', asuransi);
    text = text.replace('{{ongkir}}', ongkir);
    text = text.replace('{{berat}}', berat);
    text = text.replace('{{nama_penerima}}', nama_penerima);
    text = text.replace('{{telepon_penerima}}', telepon_penerima);
    text = text.replace('{{alamat_penerima}}', alamat_penerima);
    text = text.replace('{{nama_pengirim}}', nama_pengirim);
    text = text.replace('{{telepon_pengirim}}', telepon_pengirim);
    text = text.replace('{{alamat_pengirim}}', alamat_pengirim);

    var print_item = '';

    $.each(list.lineItemVOs, function(i)
    {
        var items = list.lineItemVOs[i];
        var label_item = '';

        var gambar_produk = items.img;
        var nama_produk = items.itemName;
        var jumlah_produk = items.qty + ' buah';
        var keterangan_produk = items.property;
        var total_harga_barang = 'Rp ' + items.price;

        label_item = item;
        label_item = label_item.replace('{{jumlah_produk}}', jumlah_produk);
        label_item = label_item.replace('{{nama_produk}}', nama_produk);
        label_item = label_item.replace('{{keterangan_produk}}', keterangan_produk);

        print_item += label_item;

    });

    text = text.replace('{{foreach_item}}', print_item);

    return text;


}

function formatMoney(amount, decimalCount = 2, decimal = ".", thousands = ",")
{
  try {
    decimalCount = Math.abs(decimalCount);
    decimalCount = isNaN(decimalCount) ? 2 : decimalCount;

    const negativeSign = amount < 0 ? "-" : "";

    let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
    let j = (i.length > 3) ? i.length % 3 : 0;

    return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "");
  } catch (e) {
    console.log(e)
  }
};

function timeConverter(UNIX_timestamp){
  var a = new Date(UNIX_timestamp);
  var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  var year = a.getFullYear();
  var month = months[a.getMonth()];
  var date = a.getDate();
  var hour = a.getHours();
  var min = '0' + a.getMinutes();
  var sec = '0' + a.getSeconds();
  var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min.substr(-2) + ':' + sec.substr(-2) ;
  return time;
}