commit 11c0abdf0b8d98bb00109641dedc5f014ae58a3b Author: fede Date: Fri Oct 31 10:57:18 2025 -0300 terminado generador de pngs desde issues de redmine diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..bdef820 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..e6cd94f --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# Svelte + TS + Vite + +This template should help get you started developing with Svelte and TypeScript in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). + +## Need an official Svelte framework? + +Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. + +## Technical considerations + +**Why use this over SvelteKit?** + +- It brings its own routing solution which might not be preferable for some users. +- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. + +This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. + +Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. + +**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** + +Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. + +**Why include `.vscode/extensions.json`?** + +Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. + +**Why enable `allowJs` in the TS template?** + +While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant. + +**Why is HMR not preserving my local component state?** + +HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). + +If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. + +```ts +// store.ts +// An extremely simple external store +import { writable } from 'svelte/store' +export default writable(0) +``` diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..fe2c5cd --- /dev/null +++ b/bun.lock @@ -0,0 +1,223 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "redmine-api-administracion", + "dependencies": { + "bootstrap": "^5.3.8", + "html2canvas": "^1.4.1", + "marked": "^16.4.1", + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tsconfig/svelte": "^5.0.5", + "@types/node": "^24.6.0", + "svelte": "^5.39.6", + "svelte-check": "^4.3.2", + "typescript": "~5.9.3", + "vite": "^7.1.7", + }, + }, + }, + "packages": { + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.11", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.11", "", { "os": "android", "cpu": "arm" }, "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.11", "", { "os": "android", "cpu": "arm64" }, "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.11", "", { "os": "android", "cpu": "x64" }, "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.11", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.11", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.11", "", { "os": "linux", "cpu": "arm" }, "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.11", "", { "os": "linux", "cpu": "ia32" }, "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.11", "", { "os": "linux", "cpu": "none" }, "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.11", "", { "os": "linux", "cpu": "none" }, "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.11", "", { "os": "linux", "cpu": "ppc64" }, "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.11", "", { "os": "linux", "cpu": "none" }, "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.11", "", { "os": "linux", "cpu": "s390x" }, "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.11", "", { "os": "linux", "cpu": "x64" }, "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.11", "", { "os": "none", "cpu": "arm64" }, "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.11", "", { "os": "none", "cpu": "x64" }, "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.11", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.11", "", { "os": "openbsd", "cpu": "x64" }, "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.11", "", { "os": "none", "cpu": "arm64" }, "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.11", "", { "os": "sunos", "cpu": "x64" }, "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.11", "", { "os": "win32", "cpu": "x64" }, "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@popperjs/core": ["@popperjs/core@2.11.8", "", {}, "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.52.5", "", { "os": "android", "cpu": "arm" }, "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.52.5", "", { "os": "android", "cpu": "arm64" }, "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.52.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.52.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.52.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.52.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.52.5", "", { "os": "linux", "cpu": "arm" }, "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.52.5", "", { "os": "linux", "cpu": "arm" }, "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.52.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.52.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.52.5", "", { "os": "linux", "cpu": "none" }, "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.52.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.52.5", "", { "os": "linux", "cpu": "none" }, "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.52.5", "", { "os": "linux", "cpu": "none" }, "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.52.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.52.5", "", { "os": "linux", "cpu": "x64" }, "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.52.5", "", { "os": "linux", "cpu": "x64" }, "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.52.5", "", { "os": "none", "cpu": "arm64" }, "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.52.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.52.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.52.5", "", { "os": "win32", "cpu": "x64" }, "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.52.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg=="], + + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.6", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ=="], + + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@6.2.1", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", "deepmerge": "^4.3.1", "magic-string": "^0.30.17", "vitefu": "^1.1.1" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ=="], + + "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@5.0.1", "", { "dependencies": { "debug": "^4.4.1" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA=="], + + "@tsconfig/svelte": ["@tsconfig/svelte@5.0.5", "", {}, "sha512-48fAnUjKye38FvMiNOj0J9I/4XlQQiZlpe9xaNPfe8vy2Y1hFBt8g1yqf2EGjVvHavo4jf2lC+TQyENCr4BJBQ=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/node": ["@types/node@24.9.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + + "base64-arraybuffer": ["base64-arraybuffer@1.0.2", "", {}, "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="], + + "bootstrap": ["bootstrap@5.3.8", "", { "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg=="], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "css-line-break": ["css-line-break@2.1.0", "", { "dependencies": { "utrie": "^1.0.2" } }, "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "esbuild": ["esbuild@0.25.11", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.11", "@esbuild/android-arm": "0.25.11", "@esbuild/android-arm64": "0.25.11", "@esbuild/android-x64": "0.25.11", "@esbuild/darwin-arm64": "0.25.11", "@esbuild/darwin-x64": "0.25.11", "@esbuild/freebsd-arm64": "0.25.11", "@esbuild/freebsd-x64": "0.25.11", "@esbuild/linux-arm": "0.25.11", "@esbuild/linux-arm64": "0.25.11", "@esbuild/linux-ia32": "0.25.11", "@esbuild/linux-loong64": "0.25.11", "@esbuild/linux-mips64el": "0.25.11", "@esbuild/linux-ppc64": "0.25.11", "@esbuild/linux-riscv64": "0.25.11", "@esbuild/linux-s390x": "0.25.11", "@esbuild/linux-x64": "0.25.11", "@esbuild/netbsd-arm64": "0.25.11", "@esbuild/netbsd-x64": "0.25.11", "@esbuild/openbsd-arm64": "0.25.11", "@esbuild/openbsd-x64": "0.25.11", "@esbuild/openharmony-arm64": "0.25.11", "@esbuild/sunos-x64": "0.25.11", "@esbuild/win32-arm64": "0.25.11", "@esbuild/win32-ia32": "0.25.11", "@esbuild/win32-x64": "0.25.11" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q=="], + + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], + + "esrap": ["esrap@2.1.2", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } }, "sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "html2canvas": ["html2canvas@1.4.1", "", { "dependencies": { "css-line-break": "^2.1.0", "text-segmentation": "^1.0.3" } }, "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA=="], + + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + + "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "marked": ["marked@16.4.1", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg=="], + + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "rollup": ["rollup@4.52.5", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.5", "@rollup/rollup-android-arm64": "4.52.5", "@rollup/rollup-darwin-arm64": "4.52.5", "@rollup/rollup-darwin-x64": "4.52.5", "@rollup/rollup-freebsd-arm64": "4.52.5", "@rollup/rollup-freebsd-x64": "4.52.5", "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", "@rollup/rollup-linux-arm-musleabihf": "4.52.5", "@rollup/rollup-linux-arm64-gnu": "4.52.5", "@rollup/rollup-linux-arm64-musl": "4.52.5", "@rollup/rollup-linux-loong64-gnu": "4.52.5", "@rollup/rollup-linux-ppc64-gnu": "4.52.5", "@rollup/rollup-linux-riscv64-gnu": "4.52.5", "@rollup/rollup-linux-riscv64-musl": "4.52.5", "@rollup/rollup-linux-s390x-gnu": "4.52.5", "@rollup/rollup-linux-x64-gnu": "4.52.5", "@rollup/rollup-linux-x64-musl": "4.52.5", "@rollup/rollup-openharmony-arm64": "4.52.5", "@rollup/rollup-win32-arm64-msvc": "4.52.5", "@rollup/rollup-win32-ia32-msvc": "4.52.5", "@rollup/rollup-win32-x64-gnu": "4.52.5", "@rollup/rollup-win32-x64-msvc": "4.52.5", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw=="], + + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "svelte": ["svelte@5.43.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-ro1umEzX8rT5JpCmlf0PPv7ncD8MdVob9e18bhwqTKNoLjS8kDvhVpaoYVPc+qMwDAOfcwJtyY7ZFSDbOaNPgA=="], + + "svelte-check": ["svelte-check@4.3.3", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg=="], + + "text-segmentation": ["text-segmentation@1.0.3", "", { "dependencies": { "utrie": "^1.0.2" } }, "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "utrie": ["utrie@1.0.2", "", { "dependencies": { "base64-arraybuffer": "^1.0.2" } }, "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw=="], + + "vite": ["vite@7.1.12", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug=="], + + "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], + + "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..0f2725a --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + redmine-api-administracion + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..c1e9b6e --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "redmine-api-administracion", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tsconfig/svelte": "^5.0.5", + "@types/node": "^24.6.0", + "svelte": "^5.39.6", + "svelte-check": "^4.3.2", + "typescript": "~5.9.3", + "vite": "^7.1.7" + }, + "dependencies": { + "bootstrap": "^5.3.8", + "html2canvas": "^1.4.1", + "marked": "^16.4.1" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.svelte b/src/App.svelte new file mode 100644 index 0000000..774f919 --- /dev/null +++ b/src/App.svelte @@ -0,0 +1,54 @@ + + +
+ {#if issues.length == 0} +

Cargando...

+ {:else} +
+ {#each issues as issue} +
+ + +
+ {/each} +
+ {/if} +
diff --git a/src/assets/issues.json b/src/assets/issues.json new file mode 100644 index 0000000..4e7df0e --- /dev/null +++ b/src/assets/issues.json @@ -0,0 +1,959 @@ +{ + "issues": [ + { + "id": 67, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "NOTA: usar patron Stategy para exportar html o csv", + "description": "TODO:\r\n\r\n\u003chr\u003e\r\n\r\n- [ ] MisPropiedades: que haya un boton de exportar a html / csv\r\n- [ ] MisContratos: Exportar Informacion de un contrato a html / csv", + "start_date": "2024-09-24", + "due_date": "2025-02-04", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:57Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 66, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "NOTA: Recrear las entidades de la nueva base de datos", + "description": "necesario para poder tener los BO dsps de crear las definiciones de las tablas de la base de datos (db-first)", + "start_date": "2024-10-17", + "due_date": "2024-10-18", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:57Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 65, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 4, + "name": "Kind/Enhancement, Kind/Feature, Priority/Medium" + }, + "subject": "Nota: Implementar el patrón Result para los retornos del modelo a la controladora", + "description": "", + "start_date": "2024-10-17", + "due_date": "2025-01-24", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:57Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 64, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 16, "name": "Compat/Breaking, Priority/Critical" }, + "subject": "Añadir identificadores de trackeo ", + "description": "Consistian en tener numeros de tracking para la base de datos para poder ver todas las operaciones que corresponden a una transaccion", + "start_date": "2024-10-18", + "due_date": "2024-10-20", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:57Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 62, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 2, "name": "Kind/Enhancement, Priority/Medium" }, + "subject": "FEATURE: Implementar minio para almacenar los archivos del sistema", + "description": "Roadmap\r\n\u003chr\u003e\r\n\r\n- [X] Crear una instancia minio.\r\n- [x] Crear una key para conectarme desde el programa y hacer que lo lea desde un archivo json (me llevo una copia en el pendrive por las dudas)\r\n\r\n- [x] Poner alguna referencia en el Contrato al archivo minio. (uso el PK)\r\n- [x] Hacer algun metodo en la entidad para recuperar el archivo.\r\n\r\n\u003chr\u003e", + "start_date": "2024-11-10", + "due_date": "2025-01-20", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:57Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 61, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 20, "name": "Kind/Feature, Priority/High" }, + "subject": "FEATURE: ABM Propiedades", + "description": "Las propiedades tienen que cumplir \r\n\u003chr\u003e\r\n\r\n- [x] Que se puedan listar todas. \r\n- [x] Que se puedan listar por Propietario \r\n- [x] Añadir \r\n- [x] Modificar (cant de habitaciones, servicios) \r\n- [x] Eliminacion logica \r\n\r\n\u003chr\u003e", + "start_date": "2024-11-11", + "due_date": "2024-11-22", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:57Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 59, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 3, + "name": "Kind/Enhancement, Kind/Feature, Priority/High" + }, + "subject": "Logica de Contratos", + "description": "Aca la cosa iria así. \r\n1. el inquilino elije la propiedad por x motivo. \r\n2. le informa al propietario.\r\n3. propietario elije el monto, moneda y aumentos mensuales.\r\n4. Inquilino acepta o no\r\n\r\n\u003chr\u003e\r\n\r\n## TODO\r\n\r\n\u003chr\u003e\r\n\r\n- [x] Hacer Lista\r\n- [x] Busqueda Propiedades\r\n- [x] Mandando Informe al Propietario de que un inquilino quiere contactarse con el por el precio. \r\n- [X] El Propietario notifica un monto y el aumento entre meses.\r\n- [X] El Inquilino puede o aceptar o declinar.\r\n- [X] En caso de aceptar tiene que dar datos de sus garantes.\r\n- [X] Se sube una version escaneada del contrato", + "start_date": "2024-11-23", + "due_date": "2025-01-25", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 56, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 27, + "name": "Kind/Feature, Priority/Medium, Reviewed/Confirmed" + }, + "subject": "FEAT: Añadir baja cascada de propietario", + "description": "La idea es que cuando se de una baja de una cuenta de propietario todas las propiedades que tenga tambien se deshabiliten recursivamente", + "start_date": "2024-11-24", + "due_date": "2024-12-31", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 55, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 26, + "name": "Kind/Enhancement, Kind/Feature, Priority/Low" + }, + "subject": "Hacer una landing page para cada grupo", + "description": "- [x] hacer la lista\r\n\r\n\u003chr\u003e\r\n\r\n- [x] Inquilino\r\n- [x] propietario\r\n- [x] admin\r\n- [x] Estadistica", + "start_date": "2024-11-24", + "due_date": "2024-12-06", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 54, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 25, + "name": "Kind/Enhancement, Priority/Medium, Reviewed/Confirmed" + }, + "subject": "Implementar Acciones que puede hacer el propietario", + "description": "- [x] Hacer lista \r\n\r\n\u003chr\u003e\r\n\r\n- [x] PublicarPropiedad\r\n- [x] BajaPropiedad\r\n- [x] AltaServicio\r\n- [x] BajaServicio\r\n- [x] ListarMisPropiedades\r\n- [x] Modificar Propiedad\r\n- [x] Ver Propiedades dadas de baja", + "start_date": "2024-11-24", + "due_date": "2024-12-10", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:24:59Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 52, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 23, "name": "Kind/Enhancement, Priority/Low" }, + "subject": "Front: que todos los path usen el $urlG", + "description": "necesario para poder crear el modo desarrollo y prod", + "start_date": "2024-12-04", + "due_date": "2024-12-06", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:24:58Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 51, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 1, "name": "Priority/Critical" }, + "subject": "Dar de Baja los permisos de {alta, baja} servicios", + "description": "", + "start_date": "2024-12-04", + "due_date": "2024-12-10", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:24:58Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 50, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 22, "name": "Kind/Feature, Priority/Low" }, + "subject": "Propiedades: Mostrar Propiedades Dadas de Baja si sos propietario", + "description": "permite a los propietarios ver cuando sus propiedades estan dadas de baja", + "start_date": "2024-12-04", + "due_date": "2024-12-06", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:25:51Z", + "closed_on": "2025-10-22T21:24:19Z" + }, + { + "id": 49, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 21, "name": "Priority/Medium" }, + "subject": "Propiedades: Pagina de la propiedad", + "description": "", + "start_date": "2024-12-06", + "due_date": "2025-01-20", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:30:38Z", + "closed_on": "2025-10-22T21:24:18Z" + }, + { + "id": 48, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 20, "name": "Kind/Feature, Priority/High" }, + "subject": "Contratos: Busqueda de contratos por categorias", + "description": "La idea principal es tener un buscador que pueda filtrar por los servicios y/o tipo de propiedad que necesites alquilar\r\n\r\nTambien tengo pensado poner algo como un fuzzy finder para la ubicacion de la propiedad\r\n\r\n\u003ch3\u003eAvances\u003c/h3\u003e\r\n\r\nFalta la query sql para obtener los datos y que el front haga la query al endpoint correcto", + "start_date": "2024-12-06", + "due_date": "2024-12-21", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:30:53Z", + "closed_on": "2025-10-22T21:24:18Z" + }, + { + "id": 45, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Busqueda: Añadir Paginacion con 10 propiedades por pagina", + "description": "", + "start_date": "2024-12-21", + "due_date": "2025-02-04", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:31:55Z", + "closed_on": "2025-10-22T21:24:18Z" + }, + { + "id": 44, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 18, "name": "Status/Abandoned" }, + "subject": "Mis Propiedades: Poner paginacion de propiedades", + "description": "", + "start_date": "2024-12-21", + "due_date": "2025-01-20", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:32:14Z", + "closed_on": "2025-10-22T21:24:18Z" + }, + { + "id": 43, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 4, "name": "Crítica" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 17, "name": "Kind/Documentation, Priority/Critical" }, + "subject": "LOGICA: Cambiar logica de aumento de los contratos", + "description": "TO-DO\r\n-------\r\n\r\n- [x] Tiene que haber un modificador de cada cuantos meses se debe de actualizar el monto del alquiler.\r\n\r\n- [x] Se tiene que poder definir el monto antes de pagar el primer alquiler una vez que se vensa el numero de meses (trimestral o cuatrimestral).\r\n\r\n- [x] Cuando el ultimo mes es pago tiene que setear la propiedad como de baja\r\n\r\nA Aclarar\r\n---------\r\n\r\n- [ ] Boton de defaultear a actualizar por ipc", + "start_date": "2024-12-23", + "due_date": "2025-02-06", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:32:55Z", + "closed_on": "2025-10-22T21:24:18Z" + }, + { + "id": 42, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 4, "name": "Crítica" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Administracion de clientes", + "description": "- [x] Hacer Lista\r\n- [x] Mostrar los clientes y que grupos tienen\r\n- [x] Dar Opcion de añadir Grupos\r\n- [x] Dar Opcion de baja de grupo\r\n- [x] Baja Cliente", + "start_date": "2024-12-30", + "due_date": "2024-12-31", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:34:24Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 41, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 4, "name": "Crítica" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 1, "name": "Priority/Critical" }, + "subject": "Notificaciones Web: Contratos", + "description": "TODO:\r\n- [x] hacer Lista\r\n- [x] hacer el back de notificaciones\r\n\t- [x] GET notificaciones\r\n\t- [x] POST Crear Notificacion inq -\u003e prop\r\n - [x] POST crear precontrato + pedido garantes prop -\u003e inq\r\n\t- [x] POST Alta datos Garantes + inq -\u003e prop \r\n\t- [x] POST Verifica que los datos de garantes estan bien y sube pdf contrato prop -\u003e inq\r\n - [x] POST Cancelar Precontrato prop -\u003e inq\r\n - [x] GET Recuperar el contrato.pdf\r\n\t- [x] POST inquilino Acepta el contrato inq -\u003e prop\r\n - [x] INTERNO pasar el precontrato a Contrato y crear los primeros canons de los primeros meses hasta el aumento\r\n - [x] PUT Marcarla Como leida\r\n- [x] hacer el front notificaciones\r\n\t- [x] Modal1: cantmeses hasta aumento, cantidad garantes opcion venta\r\n\t- [x] Modal2: inquilino carga garantes\r\n - [x] Modal3: Propieetario Acepta garantes y carga contrato\r\n - [x] Modal4: Inquilino acepta haber firmado\r\n - [x] Arreglar el tema para que todos los cancelar tengan para marcar como leido\r\n\t- [x] Hacer que salga un circulo cuando tenes notificaciones sin leer\r\n\u003chr\u003e\r\n\r\n![imagen](/attachments/75201729-5c95-4ab5-b1c0-b6f5695bfebb)\r\nla idea es implementar un menu donde el propietario y el inquilino puedan ver notificaciones que se envien ellos entre si\r\n\r\nej:\r\n\r\n![imagen](/attachments/ee13809d-7bf7-41fe-a0e7-a67b9f2d4913)\r\n\r\n\u003cfooter\u003e\r\nhttps://editor.plantuml.com/uml/VLFBRjim4BphAnQvjia764KH7ueYXnO5UjLbBMtiJIYIviE0-_MTfMHBwQ4tYfoTdPbTFUV2gTJ9TKMB4tfuyJfeeBqxLtMI7ZeUIaYathxL1-9CsXr2zIEdA_tMN6HYkyqBDAOGLK2h3HoNw_qX77biLznrIezVAU_enOywC9sha40A-XH9aWqedhYfuDHbWyST_Gn5Nws0tOS-eymKZdg_IlqFurCN5mNVdBu9XNUwulsYR2GZbyOvLFObP90UEU4eS2daPP2iXVqJPQMYub4VaPgtcejuTEtzbHpJW28TURI7IJBgJsoYAfJK2SZGMHPV7at9hoJ7QiKHSOtXW74C9ndUhHYDBd1zr_-vTJ3FkHwO74IQwDomDTDDxpre6FoqGkxFSxAye_r5SukLbpcP24Gn15-InG4_y52HQJ9xsuuRb2cQ4x7JYGT97MybGAviUHS5kgCV2_UT2sBMMLvjcbPfqq8QO8wOVRSn-8-N5ivMpPk5cupV1ApK4M4qmAkcwQEuctHkZ1XeNlPzsRQLn6h3h03ux-YPvh74f9Ca79ASpQ757_a8Hprqv6YucSyvpB_HObLcLRs_kH2iO4FXRwhiz0-Sz1vOp6cmbKCiO5wtwbdyYF_wBm00\r\n\u003c/footer\u003e", + "start_date": "2025-01-03", + "due_date": "2025-01-13", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T21:34:50Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 40, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 4, "name": "Crítica" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 16, "name": "Compat/Breaking, Priority/Critical" }, + "subject": "ME OLVIDE: hay que poner una tabla de divisas que permita definir que tipo de divisa se esta especificando", + "description": "TODO:\r\n\u003chr\u003e\r\n \r\n\r\n- [x] DB\r\n\t- [x] Crear Tabla Divisas\r\n\t- [x] Poner un FK a propiedad\r\n - [x] Poner un FK a Contrato\r\n - [x] poner un FK a Venta\r\n - [x] poner un FK en Defecto\r\n- [x] DamageControl: Backend\r\n\t- [x] Actualizar AltaPropiedadDto.cs\r\n - [x] Actualizar PatchPropiedadDto.cs\r\n - [x] Actualizar PropiedadesDto.cs\r\n - [x] Actualizar PropiedadesAdmin.cs\r\n - [x] ContratoController.cs\r\n- [x] DamageControl: Frontend\r\n - [x] Actualizar types.d.ts\r\n - [x] Componentes\r\n \t- [x] Componente RowPropiedad.svelte\r\n \t- [x] Componente AdminPropiedad.svelte\r\n \t- [x] Componente ModificarPropiedad.svelte\r\n \t- [x] Componente PublicacionPropiedad.svelte\r\n\t- [x] Paginas\r\n \t- [x] Pagina AdminPropiedades.svelte\r\n \t- [x] Pagina MisPropiedades.svelte\r\n \t- [x] Pagina MisPropiedadesDeBaja.svelte\r\n - [x] Pagina PublicarPropiedades.svelte", + "start_date": "2025-01-07", + "due_date": "2025-01-14", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:15:23Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 39, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 15, + "name": "Compat/Breaking, Priority/High, Reviewed/Won't Fix" + }, + "subject": "Garantes: Nuevo", + "description": "# Contrato\r\n\r\n# Garantes\r\n- Dni Numero\r\n- Nombre\r\n- Apellido\r\n- Domicilio\r\n\r\n## con recibo de haberes\r\n- DomicilioLaboral\r\n- NombreEmpleador\r\n\r\n\r\n## Propietaria\r\n- DomicilioInmuble\r\n- NumeroPartida\r\n- TomoRegistracion\r\n- FolioRegistracion\r\n- NumeroRegistracion\r\n- Escritura\r\n- 1 Recibo del impuesto imnobiliario\r\n\r\n# detalles de implementacion\r\n1 bit de direrenciacion entre garantes\r\n\r\n", + "start_date": "2025-01-07", + "due_date": "2025-01-14", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:15:38Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 38, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 4, "name": "Crítica" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 1, "name": "Priority/Critical" }, + "subject": "Colocar cantidad de meses de duracion de un contrato", + "description": "- [x] Hacer lista\r\n- [x] Añadir a la base de datos\r\n- [x] hacer migracion\r\n- [x] Frontend\r\n\t- [x] añadir al primer modal el contador de meses que va a durar el contrato\r\n- [x] Backend\r\n\t- [x] ControladoraContratos.cs\r\n\t- [x] repositorio de contratos añadir que cuando se generan los pagos en caso de que los meses hasta aumento sean mayores que la duracion del contrato solo se va a generar la cantidad de pagos como para la duracion del contrato.\r\n", + "start_date": "2025-01-14", + "due_date": "2025-01-16", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:16:12Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 37, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 20, "name": "Kind/Feature, Priority/High" }, + "subject": "GUI: Hay que hacer las paginas para el inquilino y propietario especificas para los alquileres", + "description": "- [x] hacer lista\r\n- [x] Definir UI\r\n\t- [x] Propietario\r\n - [x] Inquilino\r\n\t- [x] Hacerla\r\n- [x] Codigo Backend", + "start_date": "2025-01-14", + "due_date": "2025-01-20", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:16:45Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 36, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Defectos: Roadmap", + "description": "- [x] Front\r\n - [x] Propietario\r\n - [x] nuevo colapsable\r\n - [x] 1 async getdefectos\r\n - [x] 1 MarcarPago\r\n - [x] Inquilino\r\n - [x] nuevo colapsable\r\n - [x] 1 async getdefectos\r\n - [x] un post del defecto\r\n- [x] back\r\n - [x] DefectoController.cs\r\n - [x] HTTPGET obtener defectos\r\n - [x] HTTPPOST subir defectos\r\n - [x] HTTPPUT marcarPago\r\n", + "start_date": "2025-01-20", + "due_date": "2025-01-22", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:19Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 35, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Estadisticas: Roadmap", + "description": "- [x] HAcer un dto para la estadistica con el tema de los charts\r\n- [x] Pensar que voy a hacer con los charts\r\n-----\r\n- [x] back\r\n - [x] Cantidad de alquileres iniciados por año\r\n - [x] Duracion de contrato más popular", + "start_date": "2025-01-22", + "due_date": "2025-01-23", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:19Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 34, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 7, "name": "Kind/Feature, Priority/Medium" }, + "subject": "Modificar Propietario desde menu admin usuarios", + "description": null, + "start_date": "2025-01-23", + "due_date": "2025-01-30", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:19Z", + "closed_on": "2025-10-22T21:24:41Z" + }, + { + "id": 33, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Ventas: Roadmap", + "description": "- [x] Hacer Lista\r\n- [ ] Preguntarle a mi madre cuando se define el costo de la venta\r\n\r\n-----\r\n# BACK\r\n- [x] VentaController.cs\r\n - [x] POST /api/ventas/ejercerOpcionVenta?idcontrato \r\n inquilino en el ultimo mes del contrato\r\n \r\n - [x] POST /api/ventas/subirReciboPago?idventa\r\n inquilino sube certificado del pago del contrato\r\n - [x] GET /api/ventas/verRecibo?idventa\r\n \r\n - [x] POST /api/ventas/propietarioverifica?idventa\r\n propietario afirma haber recibido el pago y se hace el traspaso\r\n \r\n - [x] GET /api/venta?idventa\r\n api para ver una venta en especifico\r\n \r\n - [x] GET /api/ventas\r\n \r\n - [x] GET /api/opcionventa?idcontrato\r\n\r\n - [x] GET /api/contrato/tieneopcionventa?idcontrato\r\n\r\n-----\r\n# Front\r\n- [x] Pagina ver ventas propietario\r\n- [x] Pagina ver ventas inquilino\r\n- [x] pagina venta prop\r\n- [x] pagina venta inq\r\n- [x] Modal para subir el documento que certifique el pago\r\n\r\n- [x] Añadir a la pagina de contrato inquilino un boton que se active en el pago del ultimo canon para iniciar la opcion de venta si tiene opcion de venta y que muestre los datos de esa venta\r\n\r\n- [x] Añadir una vista para el propietario que muestre la opcion de venta y un link a la pagina si se ejercio\r\n\r\n-----\r\n# Db\r\n- [x] Hacer 2 permisos para ver Ventas inquilino/propietario", + "start_date": "2025-01-24", + "due_date": "2025-01-27", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:19Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 32, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 14, "name": "Priority/High" }, + "subject": "Auditoria", + "description": "Voy a mirar la viabilidad de usar el dbcontext para checkear los cambios en entidades ", + "start_date": "2025-01-27", + "due_date": "2025-01-30", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:38Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 31, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Requerimientos Funcionales", + "description": "- [x] Hacer Lista\r\n\r\n- [x] RF1. \tAñadir Propietarios\r\n- [x] RF2. Modificar Propietarios\r\n- [x] RF3 Eliminar Propietarios\r\n- [x] RF4. Añadir Propiedades\r\n- [x] RF5. Modificar Propiedades\r\n- [x] RF6. Eliminar Propiedades\r\n- [x] RF7. Añadir Inquilinos\r\n- [x] RF8. Modificar Inquilinos\t \t \t \t\r\n- [x] RF9. Gestionar Garantías\r\n- [x] RF10. Registro de contratos\r\n- [x] RF11. Almacenamiento de documentos creados con herramientas externas\r\n- [x] RF12. Añadir Información sobre Defectos y Arreglos.\r\n- [x] RF13. Informar Arreglo\r\n- [x] RF14. Control de pagos\r\n Faltaria que haya una opcion de \r\n- [x] RF15. Pago de Alquileres \r\n- [x] RF16. Generación de informes: Pagos y meses atrasados\r\n- [x] RF17. Gestionar Venta de Propiedades\r\n- [x] RF18. Opción de Venta\r\n\t \t ", + "start_date": "2025-01-29", + "due_date": "2025-02-02", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:53Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 30, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 14, "name": "Priority/High" }, + "subject": "RF14. Control de pagos", + "description": "Se generará una notificación para el inquilino de que tiene un pago pendiente sobre su alquiler. Llamemos al pago pendiente como “Canon” o “Meses sin pagar”. El sistema se va a encargar de generar estos datos y un empleado de administración o propietario podrá ver un listado de los meses que faltan pagar de un contrato y en caso de ser necesario redactar un texto hacia el inquilino.", + "start_date": "2025-01-29", + "due_date": "2025-01-30", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:19Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 29, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 13, "name": "Priority/Medium, Reviewed/Confirmed" }, + "subject": "RF16. Generación de informes: Pagos y meses atrasados", + "description": "El usuario tendrá la posibilidad de crear informes especificando un rango de fechas, sobre los cánones. Haciendo una diferenciación entre los que fueron pagados, los que no, cuando y si fueron pagos atrasados.\r\nEsto con la finalidad de poder visualizar cual es la tendencia e impacto de la economía sobre los inquilinos.\r\nLos informes podrán ser visualizados en una interfaz gráfica propia del programa, o ser exportados en csv para ser visualizados en aplicaciones externas.", + "start_date": "2025-01-29", + "due_date": "2025-01-30", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:19Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 28, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 1, "name": "Priority/Critical" }, + "subject": "RF17. Gestionar Venta de Propiedades", + "description": "El sistema permitirá que los propietarios ofrezcan sus propiedades en venta. Para gestionar la venta de una propiedad, se podrán especificar varios estados que representen el progreso de la transacción, como:\r\n • Disponible para Venta: Cuando la propiedad está activa en el sistema para ser vendida.\r\n • Venta Confirmada: Cuando se ha llegado a un acuerdo y se ha aceptado la oferta de compra.\r\n • Vendida: Cuando la transacción ha sido completada y la propiedad ya no está disponible para la venta.\r\n • Retirada de Venta: Cuando el propietario decide no vender la propiedad por el momento.\r\nEl sistema debe permitir al propietario o a la administración cambiar el estado de la propiedad según avance la transacción. Además, se podrán registrar las fechas en que se producen los cambios de estado y los montos de las ofertas recibidas.\r\n\r\n\u003chr\u003e\r\n\r\n- [x] GET /api/propiedad/EstaALaVenta?idprop\r\n tiene id4?\r\n \r\n- [x] PUT /api/propiedad/setPropiedadAVenta\r\n cambiar estado a 4 = venta\r\n\r\n- [x] PUT /api/propiedad/unsetPropiedadAVenta\r\n Bajar a estado 3 para mostrar que se dio de baja\r\n\r\n- [x] GET /api/propiedades/Venta\r\n Obtener Propiedades Para mostrar en venta\r\n\r\n- [x] GET /api/propiedades/Venta/Propietario\r\n\r\n- [x] Ver si puedo hacer que el patch normal de propiedades funciona\r\n\r\n- [x] ModalSetVenta\r\n\r\n- [x] Hacer un permiso para propietario de Mis Propiedades En Venta\r\n\r\n- [x] Hacer la pagina para administrar las propiedades en venta del propietario\r\n\r\n- [x] Hacer la pagina de busqueda de propiedades en venta", + "start_date": "2025-01-29", + "due_date": "2025-02-02", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:56Z", + "updated_on": "2025-10-22T22:18:19Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 22, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 4, "name": "Crítica" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 9, + "name": "Kind/Enhancement, Kind/Feature, Priority/Critical" + }, + "subject": "Modulo: seguridad", + "description": "- [x] lista\r\n-----\r\n- [x] Añadir Cerrar Sesion\r\n- [x] Gestionar Grupos\r\n - [x] Añadir Grupo\r\n - [x] Editar Grupo\r\n - [x] Eliminar Grupo\r\n \t- [x] Hacer que el gestionar tenga la opcion\r\n - [x] Hacer que no se muestre cuando esta desabilitado\r\n \t- [x] hacer que la navbar no lo tenga\r\n - [x] Hacer que el checkpermiso no lo vea tampoco\r\n- [x] Cambiar Contraseña\r\n- [x] Recuperar Clave\r\n- [x] Gestion Permisos\r\n\t- [x] Crear\r\n - [x] Editar\r\n\r\n ", + "start_date": "2025-02-25", + "due_date": "2025-06-18", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:24:13Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 21, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 8, "name": "Kind/Security, Priority/High" }, + "subject": "Hacer un logeo de los logins", + "description": "- [x] Hacer Lista\r\n-----\r\n- [x] Hacer un metodo privado en el repositorio de usuarios que cree una entidad de login con la fecha el usuario y la ip de la request del login ", + "start_date": "2025-02-25", + "due_date": "2025-03-05", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:26:56Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 20, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 7, "name": "Kind/Feature, Priority/Medium" }, + "subject": "Pensar otra Estadistica más", + "description": "Esta tiene que tener una utilidad obvia\r\n\r\n-----\r\n- [x] hacer lista\r\n-----\r\n\r\n- [x] Modificar el front para que lo muestre\r\n\t- [x] Skeleton\r\n - [x] Cambiar a que en vez de ser ingresos sea pagos.\r\n - [x] Poner path del fetch\r\n\t- [x] Añadir que el fetch se haga cuando apretas el boton y antes haya un suspense con un loading\r\n\r\n- [x] Añadir a RepositorioEstadistica\r\n\t- [x] ObtenerDatosPagos()\r\n- [x] Añadir endpoint a EstadisticaController", + "start_date": "2025-02-26", + "due_date": "2025-05-31", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:27:06Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 19, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Feature implementar tema de que los permisos usen composite", + "description": "falta que RepositorioPemrmisos use esto:\r\n\r\n- [x] ListarPermisos\r\n- [x] CheckPermisos", + "start_date": "2025-03-04", + "due_date": "2025-04-28", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:27:24Z", + "closed_on": "2025-10-22T21:24:40Z" + }, + { + "id": 16, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 1, "name": "Baja" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 5, + "name": "Kind/Feature, Kind/Security, Priority/Low" + }, + "subject": "Añadir Cerrar Sesion", + "description": "Basicamente voy a eliminar los datos del lado del cliente y redireccionarlo a la pantalla de menu", + "start_date": "2025-04-07", + "due_date": "2025-04-07", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:27:50Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 14, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Modal Editar grupo", + "description": "- [x] Hay que hacer un endpont para tener todos los permisos\r\n- [x] Otro para todos los grupos\r\n", + "start_date": "2025-04-17", + "due_date": "2025-04-21", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:32:10Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 13, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Hacer una pagina para los grupos que añada el cliente sin tener un texto de descripcion", + "description": "", + "start_date": "2025-04-21", + "due_date": "2025-04-21", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:32:17Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 12, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 3, "name": "Alta" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Crear el cambiar contraseña", + "description": "\r\n- [x] lista\r\n-----\r\n\r\n- [x] Hacer pagina de usuario\r\n\r\n- [x] hacer un popup con un form para que envie la req\r\n\r\n- [x] /api/usuario PATCH\r\n\tEsto tiene que dejar que se pueda cambiar la contraseña además de verificaciones como que tenga 8 chars o más\r\n \r\n- [x] /api/usuario?dni GET\r\n\tQue te de el dto de usuario para completar con los datos tuyos\r\n \r\n- [x] Añadir a la navbar completable un boton para abrir el menu de usuario\r\n\r\n\t\r\n", + "start_date": "2025-05-05", + "due_date": "2025-05-05", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:32:25Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 11, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 4, "name": "Crítica" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Recuperar Clave", + "description": "- [x] Hacer lista\r\n-----\r\n\r\n- [x] Setear Email de respaldo\r\n - [x] Crear dato de email de respaldo\r\n - [x] hacer el form en la pagina de usuario\r\n - [x] hacer el endpoing PUT\r\n - [x] Que se pueda ver en el panel de usuario\r\n - [x] Enviar un email de aviso que este email se seteo como un email de recuperacion\r\n \r\n- [x] Poner en la pantalla de login\r\n - [x] Link de recuperar cuenta\r\n - [x] Modal para enviar la request si conoces tu usuario + email de recuperacion\r\n - [x] Modal para ingresar los 6 digitos\r\n - [x] 2fa con el email\r\n - [x] hay que hacer un mail para esto\r\n - [x] actualizar que cuando le das al recuperar contraseña setee los 6 numeros del 2fa en el registro del usuario\r\n - [x] Esto te genera un token y te manda un dialog de cambiar contraseña\r\n\r\npd:\r\n\r\n- [x] añadir que por default se seteé el mail de recuperacion como el de usuario.\r\n- [x] hacer que el programa por defecto si solo pones el email de usuario y no recuperacion envie el mail al de usuario osea vamos son 2 lineas.", + "start_date": "2025-05-05", + "due_date": "2025-05-20", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T22:32:48Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 10, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 4, + "name": "Kind/Enhancement, Kind/Feature, Priority/Medium" + }, + "subject": "update botones de administracion usuarios", + "description": "necesito:\r\n\r\n- [x] HAcer lista\r\n------\r\n\r\n- [x] Capacidad restablecer contraseñas de usuarios.\r\n\t- [x] añadir boton con svg de llavero\r\n - [x] POST cambiarcontraseña admin\r\n \r\n- [x] Cambiar el de modificar por un svg de un papel y un lapiz", + "start_date": "2025-05-21", + "due_date": "2025-05-22", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:55Z", + "updated_on": "2025-10-22T23:05:58Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 7, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "Falta validacion de longitud campo nombre", + "description": "![image.png](/attachments/f1c4250a-b349-49f6-9d01-2db5e750bace)\r\n\r\n\u003cimg width=\"389\" alt=\"image.png\" src=\"attachments/b6ed90ae-e622-4ab6-bbf2-dabd58b94717\"\u003e\r\n\r\n", + "start_date": "2025-05-29", + "due_date": "2025-05-29", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:54Z", + "updated_on": "2025-10-22T23:07:19Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 6, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { + "id": 3, + "name": "Kind/Enhancement, Kind/Feature, Priority/High" + }, + "subject": "Crear usuario", + "description": "Actualmente tengo un crear usuario que basicamente es:\r\n- Crear inquilino\r\n- Crear Propietario\r\n\r\npero y si el usuario no entra en esas categorias que hago?\r\n\r\n- Hay que hacer un crear usuario generico que sea como el menu de crear grupo pero solo con la lista de grupos\r\n\r\n## TODO\r\n\r\n- [x] Hacer una pagina para esto CrearUsuario.svelte\r\n - [x] Fetch grupos\r\n - [x] Formulario para dar de alta usuario\r\n\r\n- [x] Crear un permiso de generacion de grupo\r\n- [x] Darle el permiso a administracion\r\n\r\n- [x] HTTPPost Usuario Generico\r\n Tiene que poder aceptar los datos base del usuario y una lista de numeros que equivalgan a los grupos ingresados.", + "start_date": "2025-06-19", + "due_date": "2025-07-23", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:54Z", + "updated_on": "2025-10-22T23:08:19Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 4, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "subject": "LogOut", + "description": "- [x] Hacer Lista\r\n------\r\n- [x] Añadir un fetch\r\n- [x] ControladorLogin que genere un nuevo token en tu usuario", + "start_date": "2025-07-22", + "due_date": "2025-07-23", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:54Z", + "updated_on": "2025-10-22T23:08:25Z", + "closed_on": "2025-10-22T21:24:48Z" + }, + { + "id": 2, + "project": { "id": 1, "name": "AlquilaFacil" }, + "tracker": { "id": 1, "name": "Caracteristica" }, + "status": { "id": 2, "name": "Cerrado", "is_closed": true }, + "priority": { "id": 2, "name": "Normal" }, + "author": { "id": 5, "name": "Federico Polidoro" }, + "category": { "id": 1, "name": "Priority/Critical" }, + "subject": "admin añadir contrato", + "description": "- [x] Hacer Lista\r\n-----\r\n\r\n\u003e \"Como Administrador Quiero Dar de Alta un contrato.\"", + "start_date": "2025-07-25", + "due_date": "2025-07-28", + "done_ratio": 100, + "is_private": false, + "estimated_hours": null, + "total_estimated_hours": null, + "created_on": "2025-10-22T20:58:54Z", + "updated_on": "2025-10-22T23:12:06Z", + "closed_on": "2025-10-22T21:24:48Z" + } + ] +} diff --git a/src/assets/svelte.svg b/src/assets/svelte.svg new file mode 100644 index 0000000..c5e0848 --- /dev/null +++ b/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/componentes/tarjeta.svelte b/src/componentes/tarjeta.svelte new file mode 100644 index 0000000..6345d20 --- /dev/null +++ b/src/componentes/tarjeta.svelte @@ -0,0 +1,34 @@ + + +
+
{issue.subject}
+ +
+
+ Descripcion
+ {@html html}
+ Estado: + {issue.status?.name}
+ Prioridad: + {issue.priority?.name}
+ {#if issue.assigned_to} + Asignado a: {issue.assigned_to.name} + {/if} +
+
+ +
diff --git a/src/lib/Counter.svelte b/src/lib/Counter.svelte new file mode 100644 index 0000000..37d75ce --- /dev/null +++ b/src/lib/Counter.svelte @@ -0,0 +1,10 @@ + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..e0478ef --- /dev/null +++ b/src/main.ts @@ -0,0 +1,10 @@ +import { mount } from "svelte"; +import App from "./App.svelte"; +//import "./app.css"; +import "bootstrap/dist/css/bootstrap.min.css"; + +const app = mount(App, { + target: document.getElementById("app")!, +}); + +export default app; diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..96b3455 --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,8 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +/** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */ +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +} diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..31c18cf --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,21 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "types": ["svelte", "vite/client"], + "noEmit": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable checkJs if you'd like to use dynamic types in JS. + * Note that setting allowJs false does not prevent the use + * of JS in `.svelte` files. + */ + "allowJs": true, + "checkJs": true, + "moduleDetection": "force" + }, + "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..8a67f62 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..d32eba1 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [svelte()], +})