Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
tankwanghow committed Jan 20, 2024
0 parents commit b784cb9
Show file tree
Hide file tree
Showing 972 changed files with 11,062 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .formatter.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
import_deps: [:ecto, :ecto_sql, :phoenix],
subdirectories: ["priv/*/migrations"],
plugins: [Phoenix.LiveView.HTMLFormatter],
inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"]
]
49 changes: 49 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# The directory Mix will write compiled artifacts to.
/_build/

# If you run "mix test --cover", coverage assets end up here.
/cover/

# The directory Mix downloads your dependencies sources to.
/deps/

# Where 3rd-party dependencies like ExDoc output generated docs.
/doc/

# Ignore .fetch files in case you like to edit your project deps locally.
/.fetch

# If the VM crashes, it generates a dump, let's ignore it too.
erl_crash.dump

# Also ignore archive artifacts (built via "mix archive.build").
*.ez

# Temporary files, for example, from tests.
/tmp/

# Ignore package tarball (built via "mix hex.build").
peggy-*.tar

# Ignore assets that are produced by build tools.
/priv/static/assets/

# Ignore digested assets cache.
/priv/static/cache_manifest.json

/priv/static/uploads/

# In case you use Node.js/npm, you want to ignore these.
npm-debug.log
/assets/node_modules/

fly.toml
Dockerfile

*.csv
*.tar

txnpart*
stuff*.*

secret.txt
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Peggy

To start your Phoenix server:

* Run `mix setup` to install and setup dependencies
* Start Phoenix endpoint with `mix phx.server` or inside IEx with `iex -S mix phx.server`

Now you can visit [`localhost:4000`](http://localhost:4000) from your browser.

Ready to run in production? Please [check our deployment guides](https://hexdocs.pm/phoenix/deployment.html).

## Learn more

* Official website: https://www.phoenixframework.org/
* Guides: https://hexdocs.pm/phoenix/overview.html
* Docs: https://hexdocs.pm/phoenix
* Forum: https://elixirforum.com/c/phoenix-forum
* Source: https://github.com/phoenixframework/phoenix
255 changes: 255 additions & 0 deletions assets/css/app.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,255 @@
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";

.tribute-container {
position: absolute;
top: 0;
left: 0;
height: auto;
overflow: auto;
display: block;
z-index: 999999;
}
.tribute-container ul {
margin: 0;
margin-top: 2px;
padding: 0;
list-style: none;
background: #efefef;
}
.tribute-container li {
padding: 5px 5px;
cursor: pointer;
}
.tribute-container li.highlight {
background: #ddd;
}
.tribute-container li span {
font-weight: bold;
}
.tribute-container li.no-match {
cursor: default;
}
.tribute-container .menu-highlighted {
font-weight: bold;
}

input:not([type="file"]).phx-change-loading{
@apply ring-inset ring-4 ring-amber-300 animate-quick-pulse !important;
}

input[readonly] { @apply cursor-not-allowed bg-gray-200; }

div.SalaryType_Addition input {
@apply text-green-600;
}

div.SalaryType_Deduction input, div.SalaryType_Advance input {
@apply text-red-600;
}

div.SalaryType_Contribution input {
@apply text-amber-600;
}

.phx-click-loading {
@apply animate-quick-pulse !important;
}

@keyframes quick-pulse {
50% {
opacity: .1;
}
}

.animate-quick-pulse {
animation: quick-pulse 0.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}

/* This file is for your main application CSS */

/* Chrome, Safari, Edge, Opera */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}

/* Firefox */
input[type=number] {
-moz-appearance: textfield;
text-align: right;
}

.detail-header {
@apply border border-gray-500 bg-gray-200 py-1;
}

.shake {
animation: shake 0.5s;
animation-iteration-count: 3;
}

.slow-hide {
@apply opacity-0 transition-opacity duration-1000;
}

.nav-btn {
@apply ml-1 mb-1 rounded-md px-2 py-2 border border-red-600;
@apply transition duration-200 select-none bg-red-300 hover:bg-red-500 focus:bg-red-500;
}

button[disabled] {
@apply cursor-not-allowed bg-gray-400;
}

input[disabled] {
@apply cursor-not-allowed bg-gray-200;
}

.button {
@apply text-center tracking-tighter rounded-md transition px-3 py-2 border duration-500;
@apply select-none hover:cursor-pointer;
}

.button[disabled] {@apply cursor-not-allowed;}

.blue.button {
@apply border-sky-500 bg-sky-200 hover:bg-sky-500 focus:bg-sky-500;
}

.orange.button {
@apply border-amber-500 bg-amber-200 hover:bg-amber-500 focus:bg-amber-500;
}

.gray.button {
@apply border-gray-500 bg-gray-200 hover:bg-gray-500 focus:bg-gray-500;
}

.red.button {
@apply border-red-500 bg-red-200 hover:bg-red-500 focus:bg-red-500;
}

.teal.button {
@apply border-teal-500 bg-teal-200 hover:bg-teal-500 focus:bg-teal-500;
}

.tab {
@apply rounded-lg border-b-2 border-gray-400 font-medium text-lg py-2;
@apply hover:border-b-2 hover:border-blue-800 hover:font-extrabold hover:cursor-pointer;
}

.tab.active {
@apply border-b-2 border-blue-800 font-extrabold bg-gray-300;
}

.detail-good-col {
@apply grow shrink;
width: 10%;
}

.detail-desc-col {
@apply grow shrink;
width: 10%;
}

.detail-pack-col {
@apply grow shrink;
width: 6%;
}

.detail-packqty-col {
width: 6%;
}

.detail-qty-col {
width: 7%;
}

.detail-unit-col {
width: 4%;
}

.detail-price-col {
width: 7%;
}

.detail-goodamt-col {
width: 8%;
}

.detail-discount-col {
width: 6%;
}

.detail-account-col {
@apply grow shrink;
width: 9%;
}

.detail-taxcode-col {
width: 5%;
}

.detail-taxrate-col {
width: 4%;
}

.detail-taxamt-col {
width: 8%;
}

.detail-amt-col {
width: 9%;
}

.detail-setting-col {
width: 1%;
}

@keyframes shake {
0% {
transform: translate(1px, 1px);
}

10% {
transform: translate(-1px, -2px);
}

20% {
transform: translate(-3px, 0px);
}

30% {
transform: translate(3px, 2px);
}

40% {
transform: translate(1px, -1px);
}

50% {
transform: translate(-1px, 2px);
}

60% {
transform: translate(-3px, 1px);
}

70% {
transform: translate(3px, 1px);
}

80% {
transform: translate(-1px, -1px);
}

90% {
transform: translate(1px, 2px);
}

100% {
transform: translate(1px, -2px);
}
}
41 changes: 41 additions & 0 deletions assets/js/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// If you want to use Phoenix channels, run `mix help phx.gen.channel`
// to get started and then uncomment the line below.
// import "./user_socket.js"

// You can include dependencies in two ways.
//
// The simplest option is to put them in assets/vendor and
// import them using relative paths:
//
// import "../vendor/some-package.js"
//
// Alternatively, you can `npm install some-package --prefix assets` and import
// them using a path starting with the package name:
//
// import "some-package"
//

// Include phoenix_html to handle method=PUT/DELETE in forms and buttons.
import "phoenix_html"
// Establish Phoenix Socket and LiveView configuration.
import {Socket} from "phoenix"
import {LiveSocket} from "phoenix_live_view"
import topbar from "../vendor/topbar"

let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content")
let liveSocket = new LiveSocket("/live", Socket, {params: {_csrf_token: csrfToken}})

// Show progress bar on live navigation and form submits
topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"})
window.addEventListener("phx:page-loading-start", _info => topbar.show(300))
window.addEventListener("phx:page-loading-stop", _info => topbar.hide())

// connect if there are any LiveViews on the page
liveSocket.connect()

// expose liveSocket on window for web console debug logs and latency simulation:
// >> liveSocket.enableDebug()
// >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session
// >> liveSocket.disableLatencySim()
window.liveSocket = liveSocket

Loading

0 comments on commit b784cb9

Please sign in to comment.