changes
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
[ 247ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
[ 132415ms] [WARNING] <link rel=preload> uses an unsupported `as` value @ https://checkout.stripe.com/c/pay/cs_live_c1WuqElp1rL75KKplheOsAMOU6n26I0xPFrlRRF7j2lveqAQpjtTE6vhWO#fidnandhYHdWcXxpYCc%2FJ2FgY2RwaXEnKSdicGRmZGhqaWBTZHdsZGtxJz8nZmprcXdqaScpJ2R1bE5gfCc%2FJ3VuWmlsc2BaMDRWbWlEPExuclBHNGFTan19a01RSDRAfTZDM0c0NVJBckJfQTRAR0hqM1N%2FbjdVMW1CPG00ZE9tVG1ONWt1cWxpXH1yb2ZqbTdLcFRxYExQZHdSdlRzXG81NUQwbXZHajJNJyknY3dqaFZgd3Ngdyc%2FcXdwYCknZ2RmbmJ3anBrYUZqaWp3Jz8nJmNjY2NjYycpJ2lkfGpwcVF8dWAnPyd2bGtiaWBaZmppcGhrJyknYGtkZ2lgVWlkZmBtamlhYHd2Jz9xd3BgeCUl:0
|
||||
[ 132415ms] [WARNING] <link rel=preload> uses an unsupported `as` value @ https://checkout.stripe.com/c/pay/cs_live_c1WuqElp1rL75KKplheOsAMOU6n26I0xPFrlRRF7j2lveqAQpjtTE6vhWO#fidnandhYHdWcXxpYCc%2FJ2FgY2RwaXEnKSdicGRmZGhqaWBTZHdsZGtxJz8nZmprcXdqaScpJ2R1bE5gfCc%2FJ3VuWmlsc2BaMDRWbWlEPExuclBHNGFTan19a01RSDRAfTZDM0c0NVJBckJfQTRAR0hqM1N%2FbjdVMW1CPG00ZE9tVG1ONWt1cWxpXH1yb2ZqbTdLcFRxYExQZHdSdlRzXG81NUQwbXZHajJNJyknY3dqaFZgd3Ngdyc%2FcXdwYCknZ2RmbmJ3anBrYUZqaWp3Jz8nJmNjY2NjYycpJ2lkfGpwcVF8dWAnPyd2bGtiaWBaZmppcGhrJyknYGtkZ2lgVWlkZmBtamlhYHd2Jz9xd3BgeCUl:0
|
||||
[ 133204ms] [INFO] Executing inline script violates the following Content Security Policy directive 'script-src 'self''. Either the 'unsafe-inline' keyword, a hash ('sha256-RdbgEKWw7Og82qSdvec1a1Oc+o+iP69HVD99Z5UY7rQ='), or a nonce ('nonce-...') is required to enable inline execution. The policy is report-only, so the violation has been logged but no further action has been taken. @ https://js.stripe.com/v3/human-security-21d0f2599ff57789c225b63b5b51ad75.html#debugMode=false&parentOrigin=https%3A%2F%2Fcheckout.stripe.com:2
|
||||
[ 134089ms] [LOG] %c EvalError
|
||||
at oe (https://client.px-cloud.net/PXVl48pWoc/main.min.js:2:58410)
|
||||
at qd (https://client.px-cloud.net/PXVl48pWoc/main.min.js:3:164)
|
||||
at GC (https://client.px-cloud.net/PXVl48pWoc/main.min.js:3:137492)
|
||||
at GA (https://client.px-cloud.net/PXVl48pWoc/main.min.js:3:137107)
|
||||
at https://client.px-cloud.net/PXVl48pWoc/main.min.js:3:138837
|
||||
at https://client.px-cloud.net/PXVl48pWoc/main.min.js:3:138843
|
||||
at https://client.px-cloud.net/PXVl48pWoc/main.min.js:3:139308 @ https://client.px-cloud.net/PXVl48pWoc/main.min.js:1
|
||||
[ 133204ms] [INFO] Executing inline script violates the following Content Security Policy directive 'script-src 'self''. Either the 'unsafe-inline' keyword, a hash ('sha256-RdbgEKWw7Og82qSdvec1a1Oc+o+iP69HVD99Z5UY7rQ='), or a nonce ('nonce-...') is required to enable inline execution. The policy is report-only, so the violation has been logged but no further action has been taken. @ https://js.stripe.com/v3/human-security-21d0f2599ff57789c225b63b5b51ad75.html#debugMode=false&parentOrigin=https%3A%2F%2Fcheckout.stripe.com:2
|
||||
[ 134597ms] [ERROR] Framing 'https://client.wra-api.net/' violates the following Content Security Policy directive: "frame-src 'self' https://*.px-cloud.net https://*.px-cdn.net https://crcldu.com". The request has been blocked.
|
||||
@ https://client.px-cloud.net/:0
|
||||
[ 134604ms] [WARNING] Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://client.wra-api.net') does not match the recipient window's origin ('null'). @ https://client.px-cloud.net/PXVl48pWoc/main.min.js:2
|
||||
@@ -0,0 +1 @@
|
||||
[ 161ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
@@ -0,0 +1 @@
|
||||
[ 183ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
@@ -0,0 +1,2 @@
|
||||
[ 232ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
[ 266ms] [VERBOSE] [DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) %o @ https://maps.nexasystems.ca/admin/login:0
|
||||
@@ -0,0 +1,2 @@
|
||||
[ 94ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
[ 17936ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
@@ -0,0 +1 @@
|
||||
[ 88ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
@@ -0,0 +1 @@
|
||||
[ 75ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
||||
@@ -0,0 +1,68 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "1. Choose a plan" [level=1] [ref=e21]
|
||||
- paragraph [ref=e22]: Pick the right plan for your usage. You can change it anytime from the portal.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e26]:
|
||||
- generic [ref=e27] [cursor=pointer]:
|
||||
- radio "Starter $29/mo 50,000 calls/mo · 60/min" [ref=e28]
|
||||
- generic [ref=e29]:
|
||||
- generic [ref=e30]: Starter
|
||||
- generic [ref=e31]: $29/mo
|
||||
- generic [ref=e32]: 50,000 calls/mo · 60/min
|
||||
- generic [ref=e33] [cursor=pointer]:
|
||||
- radio "Pro $79/mo 500,000 calls/mo · 120/min Most popular" [checked] [ref=e34]
|
||||
- generic [ref=e35]:
|
||||
- generic [ref=e36]: Pro
|
||||
- generic [ref=e37]: $79/mo
|
||||
- generic [ref=e38]: 500,000 calls/mo · 120/min
|
||||
- generic [ref=e39]: Most popular
|
||||
- generic [ref=e40] [cursor=pointer]:
|
||||
- radio "Business $249/mo 5,000,000 calls/mo · 600/min" [ref=e41]
|
||||
- generic [ref=e42]:
|
||||
- generic [ref=e43]: Business
|
||||
- generic [ref=e44]: $249/mo
|
||||
- generic [ref=e45]: 5,000,000 calls/mo · 600/min
|
||||
- button "Next →" [ref=e48] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Pro
|
||||
- generic [ref=e54]: $79/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 500,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 120 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $79
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
@@ -0,0 +1,68 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "1. Choose a plan" [level=1] [ref=e21]
|
||||
- paragraph [ref=e22]: Pick the right plan for your usage. You can change it anytime from the portal.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e26]:
|
||||
- generic [ref=e27] [cursor=pointer]:
|
||||
- radio "Starter $29/mo 50,000 calls/mo · 60/min" [checked] [active] [ref=e28]
|
||||
- generic [ref=e29]:
|
||||
- generic [ref=e30]: Starter
|
||||
- generic [ref=e31]: $29/mo
|
||||
- generic [ref=e32]: 50,000 calls/mo · 60/min
|
||||
- generic [ref=e33] [cursor=pointer]:
|
||||
- radio "Pro $79/mo 500,000 calls/mo · 120/min Most popular" [ref=e34]
|
||||
- generic [ref=e35]:
|
||||
- generic [ref=e36]: Pro
|
||||
- generic [ref=e37]: $79/mo
|
||||
- generic [ref=e38]: 500,000 calls/mo · 120/min
|
||||
- generic [ref=e39]: Most popular
|
||||
- generic [ref=e40] [cursor=pointer]:
|
||||
- radio "Business $249/mo 5,000,000 calls/mo · 600/min" [ref=e41]
|
||||
- generic [ref=e42]:
|
||||
- generic [ref=e43]: Business
|
||||
- generic [ref=e44]: $249/mo
|
||||
- generic [ref=e45]: 5,000,000 calls/mo · 600/min
|
||||
- button "Next →" [ref=e48] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Starter
|
||||
- generic [ref=e54]: $29/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 50,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 60 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $29
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
@@ -0,0 +1,68 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "1. Choose a plan" [level=1] [ref=e21]
|
||||
- paragraph [ref=e22]: Pick the right plan for your usage. You can change it anytime from the portal.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e26]:
|
||||
- generic [ref=e27] [cursor=pointer]:
|
||||
- radio "Starter $29/mo 50,000 calls/mo · 60/min" [ref=e28]
|
||||
- generic [ref=e29]:
|
||||
- generic [ref=e30]: Starter
|
||||
- generic [ref=e31]: $29/mo
|
||||
- generic [ref=e32]: 50,000 calls/mo · 60/min
|
||||
- generic [ref=e33] [cursor=pointer]:
|
||||
- radio "Pro $79/mo 500,000 calls/mo · 120/min Most popular" [checked] [active] [ref=e34]
|
||||
- generic [ref=e35]:
|
||||
- generic [ref=e36]: Pro
|
||||
- generic [ref=e37]: $79/mo
|
||||
- generic [ref=e38]: 500,000 calls/mo · 120/min
|
||||
- generic [ref=e39]: Most popular
|
||||
- generic [ref=e40] [cursor=pointer]:
|
||||
- radio "Business $249/mo 5,000,000 calls/mo · 600/min" [ref=e41]
|
||||
- generic [ref=e42]:
|
||||
- generic [ref=e43]: Business
|
||||
- generic [ref=e44]: $249/mo
|
||||
- generic [ref=e45]: 5,000,000 calls/mo · 600/min
|
||||
- button "Next →" [ref=e48] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Pro
|
||||
- generic [ref=e54]: $79/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 500,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 120 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $79
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
@@ -0,0 +1,62 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "2. Your account" [level=1] [ref=e77]
|
||||
- paragraph [ref=e22]: This is how you'll sign in to the portal and where invoices will be sent.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e78]:
|
||||
- generic [ref=e79]:
|
||||
- generic [ref=e80]: Your full name
|
||||
- textbox [ref=e81]
|
||||
- generic [ref=e82]:
|
||||
- generic [ref=e83]: Email
|
||||
- textbox [ref=e84]
|
||||
- paragraph [ref=e85]: You'll sign in with this. Invoices also go here.
|
||||
- generic [ref=e86]:
|
||||
- generic [ref=e87]: Password
|
||||
- textbox [ref=e88]
|
||||
- paragraph [ref=e89]: At least 10 characters. Mix of letters, numbers, and symbols recommended.
|
||||
- generic [ref=e46]:
|
||||
- button "← Back" [ref=e90] [cursor=pointer]
|
||||
- button "Next →" [active] [ref=e48] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Pro
|
||||
- generic [ref=e54]: $79/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 500,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 120 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $79
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
@@ -0,0 +1,84 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "3. Company & billing address" [level=1] [ref=e91]
|
||||
- paragraph [ref=e22]: Used on your invoices and passed to Stripe as your billing address.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e92]:
|
||||
- generic [ref=e93]:
|
||||
- generic [ref=e94]: Company / business name
|
||||
- textbox [ref=e95]
|
||||
- generic [ref=e96]:
|
||||
- generic [ref=e97]:
|
||||
- generic [ref=e98]: Phone
|
||||
- textbox [ref=e99]
|
||||
- generic [ref=e100]:
|
||||
- generic [ref=e101]: Tax / GST number (optional)
|
||||
- textbox [ref=e102]
|
||||
- generic [ref=e103]:
|
||||
- generic [ref=e104]: Street address
|
||||
- textbox [ref=e105]
|
||||
- generic [ref=e106]:
|
||||
- generic [ref=e107]: Apt / Suite / Unit (optional)
|
||||
- textbox [ref=e108]
|
||||
- generic [ref=e109]:
|
||||
- generic [ref=e110]:
|
||||
- generic [ref=e111]: City
|
||||
- textbox [ref=e112]
|
||||
- generic [ref=e113]:
|
||||
- generic [ref=e114]: Province / State
|
||||
- textbox [ref=e115]
|
||||
- generic [ref=e116]:
|
||||
- generic [ref=e117]: Postal code
|
||||
- textbox [ref=e118]
|
||||
- generic [ref=e119]:
|
||||
- generic [ref=e120]: Country
|
||||
- combobox [ref=e121]:
|
||||
- option "Canada" [selected]
|
||||
- option "United States"
|
||||
- option "United Kingdom"
|
||||
- option "Australia"
|
||||
- generic [ref=e46]:
|
||||
- button "← Back" [ref=e90] [cursor=pointer]
|
||||
- button "Next →" [active] [ref=e48] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Pro
|
||||
- generic [ref=e54]: $79/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 500,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 120 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $79
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
@@ -0,0 +1,75 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "4. Review & pay" [level=1] [ref=e122]
|
||||
- paragraph [ref=e22]: Check everything, then we'll send you to Stripe to enter your card.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e123]:
|
||||
- generic [ref=e124]:
|
||||
- generic [ref=e125]:
|
||||
- generic [ref=e126]: Plan
|
||||
- button "Change" [ref=e127] [cursor=pointer]
|
||||
- generic [ref=e128]: Pro · $79/mo
|
||||
- generic [ref=e129]: 500,000 calls/mo · 120/min
|
||||
- generic [ref=e130]:
|
||||
- generic [ref=e131]:
|
||||
- generic [ref=e132]: Account
|
||||
- button "Change" [ref=e133] [cursor=pointer]
|
||||
- generic [ref=e134]: QA Tester
|
||||
- generic [ref=e135]: qa-test-1@example.invalid
|
||||
- generic [ref=e136]:
|
||||
- generic [ref=e137]:
|
||||
- generic [ref=e138]: Company & billing
|
||||
- button "Change" [ref=e139] [cursor=pointer]
|
||||
- generic [ref=e140]: QA Test Co
|
||||
- generic [ref=e141]: 416-555-1212
|
||||
- generic [ref=e142]: 123 Test Street, Unit 4, Brampton, ON, L6X1M9, CA
|
||||
- paragraph [ref=e143]:
|
||||
- text: By clicking Continue to payment you agree to pay $$79/month until you cancel. Map data ©
|
||||
- link "OpenStreetMap contributors" [ref=e144] [cursor=pointer]:
|
||||
- /url: https://www.openstreetmap.org/copyright
|
||||
- text: under the ODbL. Nexa Systems terms apply.
|
||||
- generic [ref=e46]:
|
||||
- button "← Back" [ref=e90] [cursor=pointer]
|
||||
- button "Continue to payment →" [ref=e145] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Pro
|
||||
- generic [ref=e54]: $79/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 500,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 120 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $79
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
329
fusion_tasks/.playwright-mcp/page-2026-04-23T03-42-19-331Z.yml
Normal file
329
fusion_tasks/.playwright-mcp/page-2026-04-23T03-42-19-331Z.yml
Normal file
@@ -0,0 +1,329 @@
|
||||
- generic [ref=e4]:
|
||||
- banner [ref=e6]:
|
||||
- img "Nexa Systems Inc logo" [ref=e11]
|
||||
- generic [ref=e12]:
|
||||
- main [ref=e13]:
|
||||
- generic [ref=e16]:
|
||||
- generic:
|
||||
- iframe [ref=e22]:
|
||||
|
||||
- generic [ref=e23]:
|
||||
- separator [ref=e24]
|
||||
- paragraph [ref=e25]: Or
|
||||
- heading "Enter payment details" [level=2] [ref=e26]
|
||||
- generic [ref=e30]:
|
||||
- generic [ref=e31]:
|
||||
- generic [ref=e33]:
|
||||
- generic [ref=e35]: Email
|
||||
- textbox "Email" [ref=e42]:
|
||||
- /placeholder: email@example.com
|
||||
- heading "Save payment information" [level=2] [ref=e44]
|
||||
- generic [ref=e45]:
|
||||
- list [ref=e46]:
|
||||
- listitem [ref=e51]:
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e66]: Card
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e74]:
|
||||
- generic [ref=e76]: Card information
|
||||
- group [ref=e77]:
|
||||
- generic [ref=e78]:
|
||||
- generic [ref=e80]:
|
||||
- textbox "Card number" [ref=e83]:
|
||||
- /placeholder: 1234 1234 1234 1234
|
||||
- generic:
|
||||
- generic:
|
||||
- generic:
|
||||
- img "Visa"
|
||||
- generic:
|
||||
- generic:
|
||||
- img "MasterCard"
|
||||
- generic:
|
||||
- generic:
|
||||
- img "American Express"
|
||||
- generic:
|
||||
- img "UnionPay"
|
||||
- img "JCB"
|
||||
- img "Discover"
|
||||
- img "Diners Club"
|
||||
- textbox "Expiration" [ref=e88]:
|
||||
- /placeholder: MM / YY
|
||||
- generic [ref=e90]:
|
||||
- textbox "CVC" [ref=e93]
|
||||
- generic:
|
||||
- generic:
|
||||
- img "Credit or debit card CVC"
|
||||
- group "Billing address" [ref=e99]:
|
||||
- generic [ref=e100]:
|
||||
- generic [ref=e102]:
|
||||
- generic [ref=e104]: Cardholder name
|
||||
- textbox "Cardholder name" [ref=e111]:
|
||||
- /placeholder: Full name on card
|
||||
- generic [ref=e113]:
|
||||
- generic [ref=e115]: Country or region
|
||||
- group [ref=e116]:
|
||||
- generic [ref=e117]:
|
||||
- generic [ref=e121]:
|
||||
- combobox "Country or region" [ref=e122]:
|
||||
- option "Afghanistan"
|
||||
- option "Åland Islands"
|
||||
- option "Albania"
|
||||
- option "Algeria"
|
||||
- option "Andorra"
|
||||
- option "Angola"
|
||||
- option "Anguilla"
|
||||
- option "Antarctica"
|
||||
- option "Antigua & Barbuda"
|
||||
- option "Argentina"
|
||||
- option "Armenia"
|
||||
- option "Aruba"
|
||||
- option "Ascension Island"
|
||||
- option "Australia"
|
||||
- option "Austria"
|
||||
- option "Azerbaijan"
|
||||
- option "Bahamas"
|
||||
- option "Bahrain"
|
||||
- option "Bangladesh"
|
||||
- option "Barbados"
|
||||
- option "Belarus"
|
||||
- option "Belgium"
|
||||
- option "Belize"
|
||||
- option "Benin"
|
||||
- option "Bermuda"
|
||||
- option "Bhutan"
|
||||
- option "Bolivia"
|
||||
- option "Bosnia & Herzegovina"
|
||||
- option "Botswana"
|
||||
- option "Bouvet Island"
|
||||
- option "Brazil"
|
||||
- option "British Indian Ocean Territory"
|
||||
- option "British Virgin Islands"
|
||||
- option "Brunei"
|
||||
- option "Bulgaria"
|
||||
- option "Burkina Faso"
|
||||
- option "Burundi"
|
||||
- option "Cambodia"
|
||||
- option "Cameroon"
|
||||
- option "Canada" [selected]
|
||||
- option "Cape Verde"
|
||||
- option "Caribbean Netherlands"
|
||||
- option "Cayman Islands"
|
||||
- option "Central African Republic"
|
||||
- option "Chad"
|
||||
- option "Chile"
|
||||
- option "China"
|
||||
- option "Colombia"
|
||||
- option "Comoros"
|
||||
- option "Congo - Brazzaville"
|
||||
- option "Congo - Kinshasa"
|
||||
- option "Cook Islands"
|
||||
- option "Costa Rica"
|
||||
- option "Côte d’Ivoire"
|
||||
- option "Croatia"
|
||||
- option "Curaçao"
|
||||
- option "Cyprus"
|
||||
- option "Czechia"
|
||||
- option "Denmark"
|
||||
- option "Djibouti"
|
||||
- option "Dominica"
|
||||
- option "Dominican Republic"
|
||||
- option "Ecuador"
|
||||
- option "Egypt"
|
||||
- option "El Salvador"
|
||||
- option "Equatorial Guinea"
|
||||
- option "Eritrea"
|
||||
- option "Estonia"
|
||||
- option "Eswatini"
|
||||
- option "Ethiopia"
|
||||
- option "Falkland Islands"
|
||||
- option "Faroe Islands"
|
||||
- option "Fiji"
|
||||
- option "Finland"
|
||||
- option "France"
|
||||
- option "French Guiana"
|
||||
- option "French Polynesia"
|
||||
- option "French Southern Territories"
|
||||
- option "Gabon"
|
||||
- option "Gambia"
|
||||
- option "Georgia"
|
||||
- option "Germany"
|
||||
- option "Ghana"
|
||||
- option "Gibraltar"
|
||||
- option "Greece"
|
||||
- option "Greenland"
|
||||
- option "Grenada"
|
||||
- option "Guadeloupe"
|
||||
- option "Guam"
|
||||
- option "Guatemala"
|
||||
- option "Guernsey"
|
||||
- option "Guinea"
|
||||
- option "Guinea-Bissau"
|
||||
- option "Guyana"
|
||||
- option "Haiti"
|
||||
- option "Honduras"
|
||||
- option "Hong Kong SAR China"
|
||||
- option "Hungary"
|
||||
- option "Iceland"
|
||||
- option "India"
|
||||
- option "Indonesia"
|
||||
- option "Iraq"
|
||||
- option "Ireland"
|
||||
- option "Isle of Man"
|
||||
- option "Israel"
|
||||
- option "Italy"
|
||||
- option "Jamaica"
|
||||
- option "Japan"
|
||||
- option "Jersey"
|
||||
- option "Jordan"
|
||||
- option "Kazakhstan"
|
||||
- option "Kenya"
|
||||
- option "Kiribati"
|
||||
- option "Kosovo"
|
||||
- option "Kuwait"
|
||||
- option "Kyrgyzstan"
|
||||
- option "Laos"
|
||||
- option "Latvia"
|
||||
- option "Lebanon"
|
||||
- option "Lesotho"
|
||||
- option "Liberia"
|
||||
- option "Libya"
|
||||
- option "Liechtenstein"
|
||||
- option "Lithuania"
|
||||
- option "Luxembourg"
|
||||
- option "Macao SAR China"
|
||||
- option "Madagascar"
|
||||
- option "Malawi"
|
||||
- option "Malaysia"
|
||||
- option "Maldives"
|
||||
- option "Mali"
|
||||
- option "Malta"
|
||||
- option "Martinique"
|
||||
- option "Mauritania"
|
||||
- option "Mauritius"
|
||||
- option "Mayotte"
|
||||
- option "Mexico"
|
||||
- option "Moldova"
|
||||
- option "Monaco"
|
||||
- option "Mongolia"
|
||||
- option "Montenegro"
|
||||
- option "Montserrat"
|
||||
- option "Morocco"
|
||||
- option "Mozambique"
|
||||
- option "Myanmar (Burma)"
|
||||
- option "Namibia"
|
||||
- option "Nauru"
|
||||
- option "Nepal"
|
||||
- option "Netherlands"
|
||||
- option "New Caledonia"
|
||||
- option "New Zealand"
|
||||
- option "Nicaragua"
|
||||
- option "Niger"
|
||||
- option "Nigeria"
|
||||
- option "Niue"
|
||||
- option "North Macedonia"
|
||||
- option "Norway"
|
||||
- option "Oman"
|
||||
- option "Pakistan"
|
||||
- option "Palestinian Territories"
|
||||
- option "Panama"
|
||||
- option "Papua New Guinea"
|
||||
- option "Paraguay"
|
||||
- option "Peru"
|
||||
- option "Philippines"
|
||||
- option "Pitcairn Islands"
|
||||
- option "Poland"
|
||||
- option "Portugal"
|
||||
- option "Puerto Rico"
|
||||
- option "Qatar"
|
||||
- option "Réunion"
|
||||
- option "Romania"
|
||||
- option "Russia"
|
||||
- option "Rwanda"
|
||||
- option "Samoa"
|
||||
- option "San Marino"
|
||||
- option "São Tomé & Príncipe"
|
||||
- option "Saudi Arabia"
|
||||
- option "Senegal"
|
||||
- option "Serbia"
|
||||
- option "Seychelles"
|
||||
- option "Sierra Leone"
|
||||
- option "Singapore"
|
||||
- option "Sint Maarten"
|
||||
- option "Slovakia"
|
||||
- option "Slovenia"
|
||||
- option "Solomon Islands"
|
||||
- option "Somalia"
|
||||
- option "South Africa"
|
||||
- option "South Georgia & South Sandwich Islands"
|
||||
- option "South Korea"
|
||||
- option "South Sudan"
|
||||
- option "Spain"
|
||||
- option "Sri Lanka"
|
||||
- option "St. Barthélemy"
|
||||
- option "St. Helena"
|
||||
- option "St. Kitts & Nevis"
|
||||
- option "St. Lucia"
|
||||
- option "St. Martin"
|
||||
- option "St. Pierre & Miquelon"
|
||||
- option "St. Vincent & Grenadines"
|
||||
- option "Sudan"
|
||||
- option "Suriname"
|
||||
- option "Svalbard & Jan Mayen"
|
||||
- option "Sweden"
|
||||
- option "Switzerland"
|
||||
- option "Taiwan"
|
||||
- option "Tajikistan"
|
||||
- option "Tanzania"
|
||||
- option "Thailand"
|
||||
- option "Timor-Leste"
|
||||
- option "Togo"
|
||||
- option "Tokelau"
|
||||
- option "Tonga"
|
||||
- option "Trinidad & Tobago"
|
||||
- option "Tristan da Cunha"
|
||||
- option "Tunisia"
|
||||
- option "Turkey"
|
||||
- option "Turkmenistan"
|
||||
- option "Turks & Caicos Islands"
|
||||
- option "Tuvalu"
|
||||
- option "Uganda"
|
||||
- option "Ukraine"
|
||||
- option "United Arab Emirates"
|
||||
- option "United Kingdom"
|
||||
- option "United States"
|
||||
- option "Uruguay"
|
||||
- option "Uzbekistan"
|
||||
- option "Vanuatu"
|
||||
- option "Vatican City"
|
||||
- option "Venezuela"
|
||||
- option "Vietnam"
|
||||
- option "Wallis & Futuna"
|
||||
- option "Western Sahara"
|
||||
- option "Yemen"
|
||||
- option "Zambia"
|
||||
- option "Zimbabwe"
|
||||
- img
|
||||
- textbox "Postal code" [ref=e127]
|
||||
- generic [ref=e140]:
|
||||
- checkbox "Save my information for faster checkout" [ref=e142] [cursor=pointer]
|
||||
- generic [ref=e143]:
|
||||
- generic [ref=e146] [cursor=pointer]: Save my information for faster checkout
|
||||
- generic [ref=e148]: Pay securely at Nexa Systems Inc and everywhere Link is accepted.
|
||||
- generic [ref=e150]:
|
||||
- button "Save" [ref=e153] [cursor=pointer]:
|
||||
- generic:
|
||||
- generic [ref=e155]: Save
|
||||
- generic [ref=e156]: Processing
|
||||
- img [ref=e161]
|
||||
- img [ref=e166]
|
||||
- generic [ref=e172]: By saving your payment information, you allow Nexa Systems Inc to charge you for future payments in accordance with their terms.
|
||||
- contentinfo [ref=e174]:
|
||||
- link "Powered by Stripe" [ref=e176] [cursor=pointer]:
|
||||
- /url: https://stripe.com
|
||||
- generic [ref=e177]:
|
||||
- text: Powered by
|
||||
- img "Stripe" [ref=e179]
|
||||
- link "Terms" [ref=e182] [cursor=pointer]:
|
||||
- /url: https://stripe.com/legal/end-users
|
||||
- link "Privacy" [ref=e183] [cursor=pointer]:
|
||||
- /url: https://stripe.com/privacy
|
||||
@@ -0,0 +1,68 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "1. Choose a plan" [level=1] [ref=e21]
|
||||
- paragraph [ref=e22]: Pick the right plan for your usage. You can change it anytime from the portal.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e26]:
|
||||
- generic [ref=e27] [cursor=pointer]:
|
||||
- radio "Starter $29/mo 50,000 calls/mo · 60/min" [ref=e28]
|
||||
- generic [ref=e29]:
|
||||
- generic [ref=e30]: Starter
|
||||
- generic [ref=e31]: $29/mo
|
||||
- generic [ref=e32]: 50,000 calls/mo · 60/min
|
||||
- generic [ref=e33] [cursor=pointer]:
|
||||
- radio "Pro $79/mo 500,000 calls/mo · 120/min Most popular" [checked] [ref=e34]
|
||||
- generic [ref=e35]:
|
||||
- generic [ref=e36]: Pro
|
||||
- generic [ref=e37]: $79/mo
|
||||
- generic [ref=e38]: 500,000 calls/mo · 120/min
|
||||
- generic [ref=e39]: Most popular
|
||||
- generic [ref=e40] [cursor=pointer]:
|
||||
- radio "Business $249/mo 5,000,000 calls/mo · 600/min" [ref=e41]
|
||||
- generic [ref=e42]:
|
||||
- generic [ref=e43]: Business
|
||||
- generic [ref=e44]: $249/mo
|
||||
- generic [ref=e45]: 5,000,000 calls/mo · 600/min
|
||||
- button "Next →" [ref=e48] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Pro
|
||||
- generic [ref=e54]: $79/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 500,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 120 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $79
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
@@ -0,0 +1,68 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- list [ref=e5]:
|
||||
- listitem [ref=e6]:
|
||||
- generic [ref=e7]: "1"
|
||||
- generic [ref=e8]: Plan
|
||||
- listitem [ref=e10]:
|
||||
- generic [ref=e11]: "2"
|
||||
- generic [ref=e12]: Account
|
||||
- listitem [ref=e14]:
|
||||
- generic [ref=e15]: "3"
|
||||
- generic [ref=e16]: Company & billing
|
||||
- listitem [ref=e18]:
|
||||
- generic [ref=e19]: "4"
|
||||
- generic [ref=e20]: Review & pay
|
||||
- heading "1. Choose a plan" [level=1] [ref=e21]
|
||||
- paragraph [ref=e22]: Pick the right plan for your usage. You can change it anytime from the portal.
|
||||
- generic [ref=e23]:
|
||||
- generic [ref=e24]:
|
||||
- generic [ref=e26]:
|
||||
- generic [ref=e27] [cursor=pointer]:
|
||||
- radio "Starter $29/mo 50,000 calls/mo · 60/min" [ref=e28]
|
||||
- generic [ref=e29]:
|
||||
- generic [ref=e30]: Starter
|
||||
- generic [ref=e31]: $29/mo
|
||||
- generic [ref=e32]: 50,000 calls/mo · 60/min
|
||||
- generic [ref=e33] [cursor=pointer]:
|
||||
- radio "Pro $79/mo 500,000 calls/mo · 120/min Most popular" [checked] [ref=e34]
|
||||
- generic [ref=e35]:
|
||||
- generic [ref=e36]: Pro
|
||||
- generic [ref=e37]: $79/mo
|
||||
- generic [ref=e38]: 500,000 calls/mo · 120/min
|
||||
- generic [ref=e39]: Most popular
|
||||
- generic [ref=e40] [cursor=pointer]:
|
||||
- radio "Business $249/mo 5,000,000 calls/mo · 600/min" [ref=e41]
|
||||
- generic [ref=e42]:
|
||||
- generic [ref=e43]: Business
|
||||
- generic [ref=e44]: $249/mo
|
||||
- generic [ref=e45]: 5,000,000 calls/mo · 600/min
|
||||
- button "Next →" [ref=e48] [cursor=pointer]
|
||||
- complementary [ref=e49]:
|
||||
- generic [ref=e50]:
|
||||
- generic [ref=e51]: Order summary
|
||||
- generic [ref=e52]:
|
||||
- generic [ref=e53]: Pro
|
||||
- generic [ref=e54]: $79/mo
|
||||
- paragraph [ref=e55]: Billed monthly in CAD.
|
||||
- generic [ref=e56]:
|
||||
- generic [ref=e57]:
|
||||
- generic [ref=e58]: ✓
|
||||
- generic [ref=e59]: 500,000 API calls per month
|
||||
- generic [ref=e60]:
|
||||
- generic [ref=e61]: ✓
|
||||
- generic [ref=e62]: 120 requests per minute
|
||||
- generic [ref=e63]:
|
||||
- generic [ref=e64]: ✓
|
||||
- generic [ref=e65]: Hard cap — can't exceed plan
|
||||
- generic [ref=e66]:
|
||||
- generic [ref=e67]: ✓
|
||||
- generic [ref=e68]: Self-serve key management
|
||||
- generic [ref=e69]:
|
||||
- generic [ref=e70]: ✓
|
||||
- generic [ref=e71]: Cancel anytime from the portal
|
||||
- generic [ref=e72]:
|
||||
- generic [ref=e73]:
|
||||
- generic [ref=e74]: Charged today
|
||||
- generic [ref=e75]: $79
|
||||
- paragraph [ref=e76]: Card authorised by Stripe. Cancel anytime before the next cycle.
|
||||
@@ -0,0 +1,12 @@
|
||||
- main [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- heading "Admin sign in" [level=1] [ref=e4]
|
||||
- paragraph [ref=e5]: Nexa Maps staff only.
|
||||
- generic [ref=e6]:
|
||||
- generic [ref=e7]:
|
||||
- generic [ref=e8]: Email
|
||||
- textbox [active] [ref=e9]
|
||||
- generic [ref=e10]:
|
||||
- generic [ref=e11]: Password
|
||||
- textbox [ref=e12]
|
||||
- button "Sign in" [ref=e13] [cursor=pointer]
|
||||
@@ -0,0 +1,64 @@
|
||||
- generic [ref=e1]:
|
||||
- navigation [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- generic [ref=e4]:
|
||||
- link "Nexa Maps admin" [ref=e5] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- img "Nexa Maps" [ref=e6]
|
||||
- generic [ref=e7]: admin
|
||||
- generic [ref=e8]:
|
||||
- link "Dashboard" [ref=e9] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- link "Clients" [ref=e10] [cursor=pointer]:
|
||||
- /url: /admin/clients
|
||||
- link "Keys" [ref=e11] [cursor=pointer]:
|
||||
- /url: /admin/keys
|
||||
- link "Usage" [ref=e12] [cursor=pointer]:
|
||||
- /url: /admin/usage
|
||||
- link "Audit" [ref=e13] [cursor=pointer]:
|
||||
- /url: /admin/audit
|
||||
- generic [ref=e14]:
|
||||
- generic [ref=e15]: gurpreet6672@gmail.com
|
||||
- button "Log out" [ref=e17] [cursor=pointer]
|
||||
- main [ref=e18]:
|
||||
- generic [ref=e19]:
|
||||
- heading "Clients" [level=1] [ref=e20]
|
||||
- button "+ New client" [ref=e21] [cursor=pointer]
|
||||
- generic [ref=e22]:
|
||||
- generic [ref=e23]:
|
||||
- img [ref=e24]
|
||||
- textbox "Search name, email, Odoo DB, plan, city…" [active] [ref=e27]
|
||||
- button "Search" [ref=e28] [cursor=pointer]
|
||||
- table [ref=e30]:
|
||||
- rowgroup [ref=e31]:
|
||||
- row "Name Email Plan Used this month Status Created" [ref=e32]:
|
||||
- columnheader "Name" [ref=e33]
|
||||
- columnheader "Email" [ref=e34]
|
||||
- columnheader "Plan" [ref=e35]
|
||||
- columnheader "Used this month" [ref=e36]
|
||||
- columnheader "Status" [ref=e37]
|
||||
- columnheader "Created" [ref=e38]
|
||||
- columnheader [ref=e39]
|
||||
- rowgroup [ref=e40]:
|
||||
- row "Westin Healthcare gsingh@westinhealthcare.com pro 5,116 active 2026-04-23 Open →" [ref=e41]:
|
||||
- cell "Westin Healthcare" [ref=e42]
|
||||
- cell "gsingh@westinhealthcare.com" [ref=e43]
|
||||
- cell "pro" [ref=e44]
|
||||
- cell "5,116" [ref=e45]
|
||||
- cell "active" [ref=e46]:
|
||||
- generic [ref=e47]: active
|
||||
- cell "2026-04-23" [ref=e48]
|
||||
- cell "Open →" [ref=e49]:
|
||||
- link "Open →" [ref=e50] [cursor=pointer]:
|
||||
- /url: /admin/clients/7bdbffbe-691e-4fb9-8ae2-8fddd574b4f5
|
||||
- row "Mobility Specialties gurpreet6672@gmail.com pro 288 active 2026-04-23 Open →" [ref=e51]:
|
||||
- cell "Mobility Specialties" [ref=e52]
|
||||
- cell "gurpreet6672@gmail.com" [ref=e53]
|
||||
- cell "pro" [ref=e54]
|
||||
- cell "288" [ref=e55]
|
||||
- cell "active" [ref=e56]:
|
||||
- generic [ref=e57]: active
|
||||
- cell "2026-04-23" [ref=e58]
|
||||
- cell "Open →" [ref=e59]:
|
||||
- link "Open →" [ref=e60] [cursor=pointer]:
|
||||
- /url: /admin/clients/a76a024e-72b1-4d3d-8f9e-ac59a4b17005
|
||||
@@ -0,0 +1,56 @@
|
||||
- generic [ref=e1]:
|
||||
- navigation [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- generic [ref=e4]:
|
||||
- link "Nexa Maps admin" [ref=e5] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- img "Nexa Maps" [ref=e6]
|
||||
- generic [ref=e7]: admin
|
||||
- generic [ref=e8]:
|
||||
- link "Dashboard" [ref=e9] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- link "Clients" [ref=e10] [cursor=pointer]:
|
||||
- /url: /admin/clients
|
||||
- link "Keys" [ref=e11] [cursor=pointer]:
|
||||
- /url: /admin/keys
|
||||
- link "Usage" [ref=e12] [cursor=pointer]:
|
||||
- /url: /admin/usage
|
||||
- link "Audit" [ref=e13] [cursor=pointer]:
|
||||
- /url: /admin/audit
|
||||
- generic [ref=e14]:
|
||||
- generic [ref=e15]: gurpreet6672@gmail.com
|
||||
- button "Log out" [ref=e17] [cursor=pointer]
|
||||
- main [ref=e18]:
|
||||
- generic [ref=e19]:
|
||||
- heading "Clients" [level=1] [ref=e20]
|
||||
- button "+ New client" [ref=e21] [cursor=pointer]
|
||||
- generic [ref=e22]:
|
||||
- generic [ref=e23]:
|
||||
- img [ref=e24]
|
||||
- textbox "Search name, email, Odoo DB, plan, city…" [active] [ref=e27]: westin
|
||||
- button "Search" [ref=e28] [cursor=pointer]
|
||||
- link "Clear" [ref=e29] [cursor=pointer]:
|
||||
- /url: /admin/clients
|
||||
- paragraph [ref=e30]: Showing 1 result for "westin".
|
||||
- table [ref=e32]:
|
||||
- rowgroup [ref=e33]:
|
||||
- row "Name Email Plan Used this month Status Created" [ref=e34]:
|
||||
- columnheader "Name" [ref=e35]
|
||||
- columnheader "Email" [ref=e36]
|
||||
- columnheader "Plan" [ref=e37]
|
||||
- columnheader "Used this month" [ref=e38]
|
||||
- columnheader "Status" [ref=e39]
|
||||
- columnheader "Created" [ref=e40]
|
||||
- columnheader [ref=e41]
|
||||
- rowgroup [ref=e42]:
|
||||
- row "Westin Healthcare gsingh@westinhealthcare.com pro 5,131 active 2026-04-23 Open →" [ref=e43]:
|
||||
- cell "Westin Healthcare" [ref=e44]
|
||||
- cell "gsingh@westinhealthcare.com" [ref=e45]
|
||||
- cell "pro" [ref=e46]
|
||||
- cell "5,131" [ref=e47]
|
||||
- cell "active" [ref=e48]:
|
||||
- generic [ref=e49]: active
|
||||
- cell "2026-04-23" [ref=e50]
|
||||
- cell "Open →" [ref=e51]:
|
||||
- link "Open →" [ref=e52] [cursor=pointer]:
|
||||
- /url: /admin/clients/7bdbffbe-691e-4fb9-8ae2-8fddd574b4f5
|
||||
@@ -0,0 +1,56 @@
|
||||
- generic [ref=e1]:
|
||||
- navigation [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- generic [ref=e4]:
|
||||
- link "Nexa Maps admin" [ref=e5] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- img "Nexa Maps" [ref=e6]
|
||||
- generic [ref=e7]: admin
|
||||
- generic [ref=e8]:
|
||||
- link "Dashboard" [ref=e9] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- link "Clients" [ref=e10] [cursor=pointer]:
|
||||
- /url: /admin/clients
|
||||
- link "Keys" [ref=e11] [cursor=pointer]:
|
||||
- /url: /admin/keys
|
||||
- link "Usage" [ref=e12] [cursor=pointer]:
|
||||
- /url: /admin/usage
|
||||
- link "Audit" [ref=e13] [cursor=pointer]:
|
||||
- /url: /admin/audit
|
||||
- generic [ref=e14]:
|
||||
- generic [ref=e15]: gurpreet6672@gmail.com
|
||||
- button "Log out" [ref=e17] [cursor=pointer]
|
||||
- main [ref=e18]:
|
||||
- generic [ref=e19]:
|
||||
- heading "Clients" [level=1] [ref=e20]
|
||||
- button "+ New client" [ref=e21] [cursor=pointer]
|
||||
- generic [ref=e22]:
|
||||
- generic [ref=e23]:
|
||||
- img [ref=e24]
|
||||
- textbox "Search name, email, Odoo DB, plan, city…" [active] [ref=e27]: gmail
|
||||
- button "Search" [ref=e28] [cursor=pointer]
|
||||
- link "Clear" [ref=e29] [cursor=pointer]:
|
||||
- /url: /admin/clients
|
||||
- paragraph [ref=e30]: Showing 1 result for "gmail".
|
||||
- table [ref=e32]:
|
||||
- rowgroup [ref=e33]:
|
||||
- row "Name Email Plan Used this month Status Created" [ref=e34]:
|
||||
- columnheader "Name" [ref=e35]
|
||||
- columnheader "Email" [ref=e36]
|
||||
- columnheader "Plan" [ref=e37]
|
||||
- columnheader "Used this month" [ref=e38]
|
||||
- columnheader "Status" [ref=e39]
|
||||
- columnheader "Created" [ref=e40]
|
||||
- columnheader [ref=e41]
|
||||
- rowgroup [ref=e42]:
|
||||
- row "Mobility Specialties gurpreet6672@gmail.com pro 288 active 2026-04-23 Open →" [ref=e43]:
|
||||
- cell "Mobility Specialties" [ref=e44]
|
||||
- cell "gurpreet6672@gmail.com" [ref=e45]
|
||||
- cell "pro" [ref=e46]
|
||||
- cell "288" [ref=e47]
|
||||
- cell "active" [ref=e48]:
|
||||
- generic [ref=e49]: active
|
||||
- cell "2026-04-23" [ref=e50]
|
||||
- cell "Open →" [ref=e51]:
|
||||
- link "Open →" [ref=e52] [cursor=pointer]:
|
||||
- /url: /admin/clients/a76a024e-72b1-4d3d-8f9e-ac59a4b17005
|
||||
@@ -0,0 +1,47 @@
|
||||
- generic [ref=e1]:
|
||||
- navigation [ref=e2]:
|
||||
- generic [ref=e3]:
|
||||
- generic [ref=e4]:
|
||||
- link "Nexa Maps admin" [ref=e5] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- img "Nexa Maps" [ref=e6]
|
||||
- generic [ref=e7]: admin
|
||||
- generic [ref=e8]:
|
||||
- link "Dashboard" [ref=e9] [cursor=pointer]:
|
||||
- /url: /admin/
|
||||
- link "Clients" [ref=e10] [cursor=pointer]:
|
||||
- /url: /admin/clients
|
||||
- link "Keys" [ref=e11] [cursor=pointer]:
|
||||
- /url: /admin/keys
|
||||
- link "Usage" [ref=e12] [cursor=pointer]:
|
||||
- /url: /admin/usage
|
||||
- link "Audit" [ref=e13] [cursor=pointer]:
|
||||
- /url: /admin/audit
|
||||
- generic [ref=e14]:
|
||||
- generic [ref=e15]: gurpreet6672@gmail.com
|
||||
- button "Log out" [ref=e17] [cursor=pointer]
|
||||
- main [ref=e18]:
|
||||
- generic [ref=e19]:
|
||||
- heading "Clients" [level=1] [ref=e20]
|
||||
- button "+ New client" [ref=e21] [cursor=pointer]
|
||||
- generic [ref=e22]:
|
||||
- generic [ref=e23]:
|
||||
- img [ref=e24]
|
||||
- textbox "Search name, email, Odoo DB, plan, city…" [active] [ref=e27]: nope
|
||||
- button "Search" [ref=e28] [cursor=pointer]
|
||||
- link "Clear" [ref=e29] [cursor=pointer]:
|
||||
- /url: /admin/clients
|
||||
- paragraph [ref=e30]: Showing 0 results for "nope".
|
||||
- table [ref=e32]:
|
||||
- rowgroup [ref=e33]:
|
||||
- row "Name Email Plan Used this month Status Created" [ref=e34]:
|
||||
- columnheader "Name" [ref=e35]
|
||||
- columnheader "Email" [ref=e36]
|
||||
- columnheader "Plan" [ref=e37]
|
||||
- columnheader "Used this month" [ref=e38]
|
||||
- columnheader "Status" [ref=e39]
|
||||
- columnheader "Created" [ref=e40]
|
||||
- columnheader [ref=e41]
|
||||
- rowgroup [ref=e42]:
|
||||
- row "No clients match \"nope\"." [ref=e43]:
|
||||
- cell "No clients match \"nope\"." [ref=e44]
|
||||
371
fusion_tasks/graphify-out/GRAPH_REPORT.md
Normal file
371
fusion_tasks/graphify-out/GRAPH_REPORT.md
Normal file
@@ -0,0 +1,371 @@
|
||||
# Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_tasks (2026-04-22)
|
||||
|
||||
## Corpus Check
|
||||
- 13 files · ~20,730 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 320 nodes · 505 edges · 47 communities detected
|
||||
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 20 edges (avg confidence: 0.8)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Community Hubs (Navigation)
|
||||
- [[_COMMUNITY_Community 0|Community 0]]
|
||||
- [[_COMMUNITY_Community 1|Community 1]]
|
||||
- [[_COMMUNITY_Community 2|Community 2]]
|
||||
- [[_COMMUNITY_Community 3|Community 3]]
|
||||
- [[_COMMUNITY_Community 4|Community 4]]
|
||||
- [[_COMMUNITY_Community 5|Community 5]]
|
||||
- [[_COMMUNITY_Community 6|Community 6]]
|
||||
- [[_COMMUNITY_Community 7|Community 7]]
|
||||
- [[_COMMUNITY_Community 8|Community 8]]
|
||||
- [[_COMMUNITY_Community 9|Community 9]]
|
||||
- [[_COMMUNITY_Community 10|Community 10]]
|
||||
- [[_COMMUNITY_Community 11|Community 11]]
|
||||
- [[_COMMUNITY_Community 12|Community 12]]
|
||||
- [[_COMMUNITY_Community 13|Community 13]]
|
||||
- [[_COMMUNITY_Community 14|Community 14]]
|
||||
- [[_COMMUNITY_Community 15|Community 15]]
|
||||
- [[_COMMUNITY_Community 16|Community 16]]
|
||||
- [[_COMMUNITY_Community 17|Community 17]]
|
||||
- [[_COMMUNITY_Community 18|Community 18]]
|
||||
- [[_COMMUNITY_Community 19|Community 19]]
|
||||
- [[_COMMUNITY_Community 20|Community 20]]
|
||||
- [[_COMMUNITY_Community 21|Community 21]]
|
||||
- [[_COMMUNITY_Community 22|Community 22]]
|
||||
- [[_COMMUNITY_Community 23|Community 23]]
|
||||
- [[_COMMUNITY_Community 24|Community 24]]
|
||||
- [[_COMMUNITY_Community 25|Community 25]]
|
||||
- [[_COMMUNITY_Community 26|Community 26]]
|
||||
- [[_COMMUNITY_Community 27|Community 27]]
|
||||
- [[_COMMUNITY_Community 28|Community 28]]
|
||||
- [[_COMMUNITY_Community 29|Community 29]]
|
||||
- [[_COMMUNITY_Community 30|Community 30]]
|
||||
- [[_COMMUNITY_Community 31|Community 31]]
|
||||
- [[_COMMUNITY_Community 32|Community 32]]
|
||||
- [[_COMMUNITY_Community 33|Community 33]]
|
||||
- [[_COMMUNITY_Community 34|Community 34]]
|
||||
- [[_COMMUNITY_Community 35|Community 35]]
|
||||
- [[_COMMUNITY_Community 36|Community 36]]
|
||||
- [[_COMMUNITY_Community 37|Community 37]]
|
||||
- [[_COMMUNITY_Community 38|Community 38]]
|
||||
- [[_COMMUNITY_Community 39|Community 39]]
|
||||
- [[_COMMUNITY_Community 40|Community 40]]
|
||||
- [[_COMMUNITY_Community 41|Community 41]]
|
||||
- [[_COMMUNITY_Community 42|Community 42]]
|
||||
- [[_COMMUNITY_Community 43|Community 43]]
|
||||
- [[_COMMUNITY_Community 44|Community 44]]
|
||||
- [[_COMMUNITY_Community 45|Community 45]]
|
||||
- [[_COMMUNITY_Community 46|Community 46]]
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `FusionTechnicianTask` - 66 edges
|
||||
2. `FusionTaskMapController` - 38 edges
|
||||
3. `FusionTaskSyncConfig` - 14 edges
|
||||
4. `create()` - 10 edges
|
||||
5. `_float_to_time_str()` - 10 edges
|
||||
6. `FusionEmailBuilderMixin` - 9 edges
|
||||
7. `create()` - 7 edges
|
||||
8. `_check_no_overlap()` - 6 edges
|
||||
9. `_get_tech_start_locations()` - 6 edges
|
||||
10. `_cron_check_late_arrivals()` - 6 edges
|
||||
|
||||
## Surprising Connections (you probably didn't know these)
|
||||
- `log_location()` --calls--> `create()` [INFERRED]
|
||||
/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_location.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_partner.py
|
||||
- `create()` --calls--> `_push_tasks()` [INFERRED]
|
||||
/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_task.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/task_sync.py
|
||||
- `get_map_data()` --calls--> `get_latest_locations()` [INFERRED]
|
||||
/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_task.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/technician_location.py
|
||||
- `register_subscription()` --calls--> `create()` [INFERRED]
|
||||
/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py → /Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_partner.py
|
||||
|
||||
## Communities
|
||||
|
||||
### Community 0 - "Community 0"
|
||||
Cohesion: 0.04
|
||||
Nodes (38): create(), _fill_address_vals(), FusionTechnicianTask, _onchange_is_in_store(), Populate address fields from a partner record., Hook: fill address from linked records during create. Base implementati, Hook: post-create side-effects for linked records. Override in fusion_c, Create or update a linked calendar.event for external calendar sync. On (+30 more)
|
||||
|
||||
### Community 1 - "Community 1"
|
||||
Cohesion: 0.07
|
||||
Nodes (12): classifyDate(), classifyTask(), extractTechnicians(), floatToTime12(), FusionMapArchParser, FusionTaskMapController, groupTasks(), initialsOf() (+4 more)
|
||||
|
||||
### Community 2 - "Community 2"
|
||||
Cohesion: 0.09
|
||||
Nodes (22): FusionPushSubscription, register_subscription(), create(), ResPartner, _cron_pull_remote_tasks(), FusionTaskSyncConfig, _push_shadow_status(), _push_tasks() (+14 more)
|
||||
|
||||
### Community 3 - "Community 3"
|
||||
Cohesion: 0.08
|
||||
Nodes (20): _check_no_overlap(), _compute_datetimes(), _compute_prev_task_summary(), _compute_schedule_info(), _compute_time_displays(), default_get(), _float_to_time_str(), _maps_api_headers() (+12 more)
|
||||
|
||||
### Community 4 - "Community 4"
|
||||
Cohesion: 0.09
|
||||
Nodes (22): FusionTechnicianLocation, get_latest_locations(), log_location(), _cron_calculate_travel_times(), _cron_check_late_arrivals(), _cron_send_push_notifications(), _get_clock_in_locations(), get_map_data() (+14 more)
|
||||
|
||||
### Community 5 - "Community 5"
|
||||
Cohesion: 0.14
|
||||
Nodes (9): FusionEmailBuilderMixin, Build a labeled details table section. Args: heading: Secti, Build a left-border accent note block., Build a centered CTA button., Build a dashed-border attachment callout. Args: description, Return an inline status badge/pill HTML snippet., Return company name, phone, email for email templates., Check if email notifications are enabled in settings. (+1 more)
|
||||
|
||||
### Community 6 - "Community 6"
|
||||
Cohesion: 0.15
|
||||
Nodes (8): Check that all earlier tasks for the same technician+date are completed., Write GPS coordinates from context onto the task record., Mark task as En Route., Mark task as In Progress., Cancel the task. Sends cancellation email and runs cancel hooks., Hook: additional side-effects after task cancellation. Override in fusio, Post a status change message to the task chatter., Send cancellation email. Base: no-op. Override in fusion_claims.
|
||||
|
||||
### Community 7 - "Community 7"
|
||||
Cohesion: 1.0
|
||||
Nodes (2): _fusion_tasks_post_init(), Post-install hook for fusion_tasks. 1. Sets default ICP values (upsert - sa
|
||||
|
||||
### Community 8 - "Community 8"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): ResCompany
|
||||
|
||||
### Community 9 - "Community 9"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): ResUsers
|
||||
|
||||
### Community 10 - "Community 10"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): ResConfigSettings
|
||||
|
||||
### Community 11 - "Community 11"
|
||||
Cohesion: 1.0
|
||||
Nodes (0):
|
||||
|
||||
### Community 12 - "Community 12"
|
||||
Cohesion: 1.0
|
||||
Nodes (0):
|
||||
|
||||
### Community 13 - "Community 13"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Log the current user's location. Called from portal JS.
|
||||
|
||||
### Community 14 - "Community 14"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Get the most recent location for each technician (for map view). Includ
|
||||
|
||||
### Community 15 - "Community 15"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Remove location logs based on configurable retention setting. Setting (
|
||||
|
||||
### Community 16 - "Community 16"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Register or update a push subscription.
|
||||
|
||||
### Community 17 - "Community 17"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Generate 12-hour time slots every 15 minutes, store hours only (9 AM - 6 PM).
|
||||
|
||||
### Community 18 - "Community 18"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Sync the 12h selection fields from the raw float values.
|
||||
|
||||
### Community 19 - "Community 19"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Convert float hours to readable time strings.
|
||||
|
||||
### Community 20 - "Community 20"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Set default duration based on task type.
|
||||
|
||||
### Community 21 - "Community 21"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Auto-compute end time from start + duration. Also run overlap check.
|
||||
|
||||
### Community 22 - "Community 22"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Combine date + float time into proper Datetime fields for calendar. time
|
||||
|
||||
### Community 23 - "Community 23"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Show booked + available time slots for the technician on the selected date.
|
||||
|
||||
### Community 24 - "Community 24"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Show previous task info + travel time warning with color coding.
|
||||
|
||||
### Community 25 - "Community 25"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Auto-fill company address when task is marked as in-store.
|
||||
|
||||
### Community 26 - "Community 26"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Auto-fill address fields from the selected client's address.
|
||||
|
||||
### Community 27 - "Community 27"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Non-in-store tasks must have a geocoded address.
|
||||
|
||||
### Community 28 - "Community 28"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Prevent overlapping bookings for the same technician on the same date.
|
||||
|
||||
### Community 29 - "Community 29"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Auto-set start/end time to the first available slot when tech+date change.
|
||||
|
||||
### Community 30 - "Community 30"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Handle calendar time range selection: pre-fill date + times from context.
|
||||
|
||||
### Community 31 - "Community 31"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Helper to fill address vals dict from a partner record.
|
||||
|
||||
### Community 32 - "Community 32"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Return task data, technician locations, and Google Maps API key. Args:
|
||||
|
||||
### Community 33 - "Community 33"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Build a dict of technician start locations for route origins. Priority
|
||||
|
||||
### Community 34 - "Community 34"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Get today's clock-in lat/lng from fusion_clock if installed. Uses the t
|
||||
|
||||
### Community 35 - "Community 35"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Build request headers for the FusionMaps gateway. When fusion_tasks.map
|
||||
|
||||
### Community 36 - "Community 36"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Query OSRM /route for driving time + distance. Returns (minutes, km) or
|
||||
|
||||
### Community 37 - "Community 37"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Query Nominatim /search for address → (lat, lng). Returns (0.0, 0.0) on
|
||||
|
||||
### Community 38 - "Community 38"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Cron job: Refresh travel times for TODAY's active tasks only. Future-da
|
||||
|
||||
### Community 39 - "Community 39"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Cron: detect tasks where the technician hasn't started and the scheduled
|
||||
|
||||
### Community 40 - "Community 40"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Cron: Send push notifications for upcoming tasks.
|
||||
|
||||
### Community 41 - "Community 41"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Convert float hours to time string like '9:30 AM'.
|
||||
|
||||
### Community 42 - "Community 42"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Push local task changes to all active remote instances. Called from tech
|
||||
|
||||
### Community 43 - "Community 43"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Push local status changes on shadow tasks back to their source instance.
|
||||
|
||||
### Community 44 - "Community 44"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Push a technician's location update to all remote instances. Called whe
|
||||
|
||||
### Community 45 - "Community 45"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Cron job: pull tasks and technician locations from all active remote instances.
|
||||
|
||||
### Community 46 - "Community 46"
|
||||
Cohesion: 1.0
|
||||
Nodes (1): Remove shadow tasks older than 30 days (completed/cancelled).
|
||||
|
||||
## Knowledge Gaps
|
||||
- **123 isolated node(s):** `Post-install hook for fusion_tasks. 1. Sets default ICP values (upsert - sa`, `FusionTechnicianLocation`, `Log the current user's location. Called from portal JS.`, `Get the most recent location for each technician (for map view). Includ`, `Remove location logs based on configurable retention setting. Setting (` (+118 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **Thin community `Community 8`** (2 nodes): `ResCompany`, `res_company.py`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 9`** (2 nodes): `ResUsers`, `res_users.py`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 10`** (2 nodes): `ResConfigSettings`, `res_config_settings.py`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 11`** (1 nodes): `__init__.py`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 12`** (1 nodes): `__manifest__.py`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 13`** (1 nodes): `Log the current user's location. Called from portal JS.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 14`** (1 nodes): `Get the most recent location for each technician (for map view). Includ`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 15`** (1 nodes): `Remove location logs based on configurable retention setting. Setting (`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 16`** (1 nodes): `Register or update a push subscription.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 17`** (1 nodes): `Generate 12-hour time slots every 15 minutes, store hours only (9 AM - 6 PM).`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 18`** (1 nodes): `Sync the 12h selection fields from the raw float values.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 19`** (1 nodes): `Convert float hours to readable time strings.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 20`** (1 nodes): `Set default duration based on task type.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 21`** (1 nodes): `Auto-compute end time from start + duration. Also run overlap check.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 22`** (1 nodes): `Combine date + float time into proper Datetime fields for calendar. time`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 23`** (1 nodes): `Show booked + available time slots for the technician on the selected date.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 24`** (1 nodes): `Show previous task info + travel time warning with color coding.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 25`** (1 nodes): `Auto-fill company address when task is marked as in-store.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 26`** (1 nodes): `Auto-fill address fields from the selected client's address.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 27`** (1 nodes): `Non-in-store tasks must have a geocoded address.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 28`** (1 nodes): `Prevent overlapping bookings for the same technician on the same date.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 29`** (1 nodes): `Auto-set start/end time to the first available slot when tech+date change.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 30`** (1 nodes): `Handle calendar time range selection: pre-fill date + times from context.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 31`** (1 nodes): `Helper to fill address vals dict from a partner record.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 32`** (1 nodes): `Return task data, technician locations, and Google Maps API key. Args:`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 33`** (1 nodes): `Build a dict of technician start locations for route origins. Priority`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 34`** (1 nodes): `Get today's clock-in lat/lng from fusion_clock if installed. Uses the t`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 35`** (1 nodes): `Build request headers for the FusionMaps gateway. When fusion_tasks.map`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 36`** (1 nodes): `Query OSRM /route for driving time + distance. Returns (minutes, km) or`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 37`** (1 nodes): `Query Nominatim /search for address → (lat, lng). Returns (0.0, 0.0) on`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 38`** (1 nodes): `Cron job: Refresh travel times for TODAY's active tasks only. Future-da`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 39`** (1 nodes): `Cron: detect tasks where the technician hasn't started and the scheduled`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 40`** (1 nodes): `Cron: Send push notifications for upcoming tasks.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 41`** (1 nodes): `Convert float hours to time string like '9:30 AM'.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 42`** (1 nodes): `Push local task changes to all active remote instances. Called from tech`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 43`** (1 nodes): `Push local status changes on shadow tasks back to their source instance.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 44`** (1 nodes): `Push a technician's location update to all remote instances. Called whe`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 45`** (1 nodes): `Cron job: pull tasks and technician locations from all active remote instances.`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
- **Thin community `Community 46`** (1 nodes): `Remove shadow tasks older than 30 days (completed/cancelled).`
|
||||
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `FusionTechnicianTask` connect `Community 0` to `Community 3`, `Community 4`, `Community 6`?**
|
||||
_High betweenness centrality (0.328) - this node is a cross-community bridge._
|
||||
- **Why does `_push_shadow_status()` connect `Community 2` to `Community 4`, `Community 6`?**
|
||||
_High betweenness centrality (0.030) - this node is a cross-community bridge._
|
||||
- **Why does `_push_tasks()` connect `Community 2` to `Community 0`, `Community 4`?**
|
||||
_High betweenness centrality (0.027) - this node is a cross-community bridge._
|
||||
- **What connects `Post-install hook for fusion_tasks. 1. Sets default ICP values (upsert - sa`, `FusionTechnicianLocation`, `Log the current user's location. Called from portal JS.` to the rest of the system?**
|
||||
_123 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `Community 0` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.04 - nodes in this community are weakly interconnected._
|
||||
- **Should `Community 1` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.07 - nodes in this community are weakly interconnected._
|
||||
- **Should `Community 2` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.09 - nodes in this community are weakly interconnected._
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L5", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L6", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L7", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L9", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L10", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L11", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L12", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_models_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/__init__.py", "source_location": "L13", "weight": 1.0}], "raw_calls": []}
|
||||
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_tasks_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L1"}, {"id": "init_fusion_tasks_post_init", "label": "_fusion_tasks_post_init()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L8"}, {"id": "init_rationale_9", "label": "Post-install hook for fusion_tasks. 1. Sets default ICP values (upsert - sa", "file_type": "rationale", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L9"}], "edges": [{"source": "users_gurpreet_github_odoo_modules_fusion_tasks_init_py", "target": "users_gurpreet_github_odoo_modules_fusion_tasks_init_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L5", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_init_py", "target": "init_fusion_tasks_post_init", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "init_rationale_9", "target": "init_fusion_tasks_post_init", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L9", "weight": 1.0}], "raw_calls": [{"caller_nid": "init_fusion_tasks_post_init", "callee": "sudo", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L15"}, {"caller_nid": "init_fusion_tasks_post_init", "callee": "items", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L25"}, {"caller_nid": "init_fusion_tasks_post_init", "callee": "get_param", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L26"}, {"caller_nid": "init_fusion_tasks_post_init", "callee": "set_param", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L27"}, {"caller_nid": "init_fusion_tasks_post_init", "callee": "ref", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L30"}, {"caller_nid": "init_fusion_tasks_post_init", "callee": "search", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L32"}, {"caller_nid": "init_fusion_tasks_post_init", "callee": "write", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__init__.py", "source_location": "L36"}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_users_py", "label": "res_users.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_users.py", "source_location": "L1"}, {"id": "res_users_resusers", "label": "ResUsers", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_users.py", "source_location": "L8"}], "edges": [{"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_users_py", "target": "odoo", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_users.py", "source_location": "L5", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_users_py", "target": "res_users_resusers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_users.py", "source_location": "L8", "weight": 1.0}], "raw_calls": []}
|
||||
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_config_settings_py", "label": "res_config_settings.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_config_settings.py", "source_location": "L1"}, {"id": "res_config_settings_resconfigsettings", "label": "ResConfigSettings", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_config_settings.py", "source_location": "L8"}], "edges": [{"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_config_settings_py", "target": "odoo", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_config_settings.py", "source_location": "L5", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_config_settings_py", "target": "res_config_settings_resconfigsettings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_config_settings.py", "source_location": "L8", "weight": 1.0}], "raw_calls": []}
|
||||
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_tasks_models_push_subscription_py", "label": "push_subscription.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L1"}, {"id": "push_subscription_fusionpushsubscription", "label": "FusionPushSubscription", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L15"}, {"id": "push_subscription_register_subscription", "label": "register_subscription()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L55"}, {"id": "push_subscription_rationale_56", "label": "Register or update a push subscription.", "file_type": "rationale", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L56"}], "edges": [{"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_push_subscription_py", "target": "odoo", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L9", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_push_subscription_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L10", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_push_subscription_py", "target": "push_subscription_fusionpushsubscription", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L15", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_push_subscription_py", "target": "push_subscription_register_subscription", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L55", "weight": 1.0}, {"source": "push_subscription_rationale_56", "target": "push_subscription_fusionpushsubscription_register_subscription", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L56", "weight": 1.0}], "raw_calls": [{"caller_nid": "push_subscription_register_subscription", "callee": "search", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L57"}, {"caller_nid": "push_subscription_register_subscription", "callee": "sudo", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L57"}, {"caller_nid": "push_subscription_register_subscription", "callee": "write", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L59"}, {"caller_nid": "push_subscription_register_subscription", "callee": "create", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L67"}, {"caller_nid": "push_subscription_register_subscription", "callee": "sudo", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/push_subscription.py", "source_location": "L67"}]}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_company_py", "label": "res_company.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_company.py", "source_location": "L1"}, {"id": "res_company_rescompany", "label": "ResCompany", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_company.py", "source_location": "L8"}], "edges": [{"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_company_py", "target": "odoo", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_company.py", "source_location": "L5", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_tasks_models_res_company_py", "target": "res_company_rescompany", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/models/res_company.py", "source_location": "L8", "weight": 1.0}], "raw_calls": []}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_tasks_manifest_py", "label": "__manifest__.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_tasks/__manifest__.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
File diff suppressed because one or more lines are too long
257
fusion_tasks/graphify-out/graph.html
Normal file
257
fusion_tasks/graphify-out/graph.html
Normal file
File diff suppressed because one or more lines are too long
8950
fusion_tasks/graphify-out/graph.json
Normal file
8950
fusion_tasks/graphify-out/graph.json
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -55,6 +55,13 @@ class ResConfigSettings(models.TransientModel):
|
||||
'When set, address geocoding goes to Nominatim instead of Google. '
|
||||
'Leave empty to use Google.',
|
||||
)
|
||||
fc_maps_api_key = fields.Char(
|
||||
string='FusionMaps API Key',
|
||||
config_parameter='fusion_tasks.maps_api_key',
|
||||
help='API key for the FusionMaps gateway at maps.nexasystems.ca. '
|
||||
'When set, OSRM and Nominatim requests include it as X-API-Key. '
|
||||
'Leave empty for direct LAN access without authentication.',
|
||||
)
|
||||
fc_location_retention_days = fields.Char(
|
||||
string='Location History Retention (Days)',
|
||||
config_parameter='fusion_claims.location_retention_days',
|
||||
|
||||
@@ -32,12 +32,16 @@ class ResPartner(models.Model):
|
||||
addr = address.strip()
|
||||
nominatim_url = (ICP.get_param('fusion_tasks.nominatim_url', '') or '').strip()
|
||||
if nominatim_url:
|
||||
headers = {'User-Agent': 'fusion_tasks/1.0'}
|
||||
maps_key = (ICP.get_param('fusion_tasks.maps_api_key', '') or '').strip()
|
||||
if maps_key:
|
||||
headers['X-API-Key'] = maps_key
|
||||
try:
|
||||
resp = requests.get(
|
||||
f'{nominatim_url.rstrip("/")}/search',
|
||||
params={'q': addr, 'format': 'json', 'limit': 1, 'countrycodes': 'ca'},
|
||||
timeout=5,
|
||||
headers={'User-Agent': 'fusion_tasks/1.0'},
|
||||
headers=headers,
|
||||
)
|
||||
data = resp.json()
|
||||
if isinstance(data, list) and data:
|
||||
|
||||
@@ -2773,14 +2773,33 @@ class FusionTechnicianTask(models.Model):
|
||||
_logger.warning(f"Travel time calculation failed for task {self.name}: {e}")
|
||||
return False
|
||||
|
||||
@api.model
|
||||
def _maps_api_headers(self):
|
||||
"""Build request headers for the FusionMaps gateway.
|
||||
|
||||
When fusion_tasks.maps_api_key is set (public gateway at
|
||||
maps.nexasystems.ca) we send it as X-API-Key. When unset (direct
|
||||
LAN access to OSRM/Nominatim), we send only the User-Agent.
|
||||
"""
|
||||
headers = {'User-Agent': 'fusion_tasks/1.0'}
|
||||
key = (self.env['ir.config_parameter'].sudo()
|
||||
.get_param('fusion_tasks.maps_api_key', '') or '').strip()
|
||||
if key:
|
||||
headers['X-API-Key'] = key
|
||||
return headers
|
||||
|
||||
@api.model
|
||||
def _osrm_travel(self, osrm_url, from_lat, from_lng, to_lat, to_lng):
|
||||
"""Query self-hosted OSRM /route for driving time + distance.
|
||||
Returns (minutes, km) or (0, 0) on failure."""
|
||||
"""Query OSRM /route for driving time + distance.
|
||||
Returns (minutes, km) or (0, 0) on failure.
|
||||
|
||||
`osrm_url` may be either a direct OSRM endpoint (LAN) or a FusionMaps
|
||||
gateway endpoint (public). The gateway requires X-API-Key.
|
||||
"""
|
||||
try:
|
||||
url = (f'{osrm_url.rstrip("/")}/route/v1/driving/'
|
||||
f'{from_lng},{from_lat};{to_lng},{to_lat}?overview=false')
|
||||
resp = requests.get(url, timeout=5)
|
||||
resp = requests.get(url, timeout=5, headers=self._maps_api_headers())
|
||||
data = resp.json()
|
||||
if data.get('code') == 'Ok' and data.get('routes'):
|
||||
route = data['routes'][0]
|
||||
@@ -2793,8 +2812,13 @@ class FusionTechnicianTask(models.Model):
|
||||
|
||||
@api.model
|
||||
def _nominatim_geocode(self, nominatim_url, address):
|
||||
"""Query self-hosted Nominatim /search for address → (lat, lng).
|
||||
Returns (0.0, 0.0) on failure so callers can fall through to Google."""
|
||||
"""Query Nominatim /search for address → (lat, lng). Returns
|
||||
(0.0, 0.0) on failure so callers can fall through to Google.
|
||||
|
||||
`nominatim_url` may be either a direct Nominatim endpoint (LAN) or
|
||||
a FusionMaps gateway endpoint (public) — the X-API-Key header is
|
||||
added automatically when fusion_tasks.maps_api_key is set.
|
||||
"""
|
||||
if not address or not address.strip():
|
||||
return 0.0, 0.0
|
||||
try:
|
||||
@@ -2806,8 +2830,7 @@ class FusionTechnicianTask(models.Model):
|
||||
'countrycodes': 'ca',
|
||||
}
|
||||
resp = requests.get(
|
||||
url, params=params, timeout=5,
|
||||
headers={'User-Agent': 'fusion_tasks/1.0'},
|
||||
url, params=params, timeout=5, headers=self._maps_api_headers(),
|
||||
)
|
||||
data = resp.json()
|
||||
if isinstance(data, list) and data:
|
||||
|
||||
@@ -109,6 +109,20 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- FusionMaps API Key -->
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_right_pane">
|
||||
<span class="o_form_label">FusionMaps API Key</span>
|
||||
<div class="text-muted">
|
||||
API key for the FusionMaps gateway at maps.nexasystems.ca.
|
||||
When set, OSRM and Nominatim requests include this key as X-API-Key.
|
||||
Leave empty for direct LAN access without authentication.
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<field name="fc_maps_api_key" password="True" placeholder="nxm_live_..."/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Location History Retention -->
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_right_pane">
|
||||
|
||||
Reference in New Issue
Block a user