diff --git a/CHANGES.md b/CHANGES.md index e2439383..227a7232 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ # Change Log +## Unreleased + +- Added: Generation kwh form. Path for non partners + ## 1.9.1 2023-09-04 - Fix general conditions for holderchange form @@ -8,7 +12,7 @@ ## 1.9.0 2023-08-29 -- Added: Generation kwh. the way for partners +- Added: Generation kwh form. Path for partners ## 1.8.2 2023-08-23 diff --git a/cypress/fixtures/generationkwhContribution.json b/cypress/fixtures/generationkwhContribution.json index aab47b69..0d7c9ffa 100644 --- a/cypress/fixtures/generationkwhContribution.json +++ b/cypress/fixtures/generationkwhContribution.json @@ -24,5 +24,25 @@ "payment_data": { "iban": "ES18 1465 7317 8144 5866 4841", "err_iban": "ES18 9999 0000 9999 0000 9999" + }, + "out_zone_data":{ + "postal_code": 90902 + }, + "new_member":{ + "vat": "78912872X", + "previous_holder": true, + "name": "Pere", + "surname1": "Pi", + "surname2": "Palmera", + "postal_code": "25320", + "address": "C/Percebe", + "number": 13, + "email": "pere.pi@somenergia.coop", + "phone": "636696969", + "language": "ca_ES", + "voluntary_cent": true, + "iban": "ES77 1234 1234 1612 3456 7890", + "bad_iban": "ES77 1234 1234 1612 3456 AAAA", + "bad_email": "perepisomenergia.coop" } } diff --git a/cypress/integration/generationkwhContribution/generationContribution.spec.js b/cypress/integration/generationkwhContribution/generationContribution.spec.js index 57f19389..6a3b3fab 100644 --- a/cypress/integration/generationkwhContribution/generationContribution.spec.js +++ b/cypress/integration/generationkwhContribution/generationContribution.spec.js @@ -6,39 +6,84 @@ describe('Generation Form', () => { return false }) + function fillInData(data) { + cy.get('#member_name') + .type(data.new_member.name) + .should('have.value', data.new_member.name) + + cy.get('#member_surname1') + .type(data.new_member.surname1) + .should('have.value', data.new_member.surname1) + + cy.get('#member_surname2') + .type(data.new_member.surname2) + .should('have.value', data.new_member.surname2) + + cy.get('#member_address') + .type(data.new_member.address) + .should('have.value', data.new_member.address) + + cy.get('#member_number') + .type(data.new_member.number) + .should('have.value', data.new_member.number) + + cy.get('#member_email') + .type(data.new_member.email) + .should('have.value', data.new_member.email) + + cy.get('#member_email2') + .type(data.new_member.email) + .should('have.value', data.new_member.email) + + cy.get('#member_phone') + .type(data.new_member.phone) + .should('have.value', data.new_member.phone) + + cy.get('#member_phone2') + .type(data.new_member.phone) + .should('have.value', data.new_member.phone) + + cy.get('[name="privacy_policy_accepted"]').click() + cy.get('[data-cy=next]').click() + + + + } + beforeEach(() => { cy.visit('/generationkwh/contribution') cy.fixture('generationkwhContribution.json').as('data') }) - it('Contribute with an action', function () { - //Member page - cy.identifyMember(this.data.member.number, this.data.member.vat) + context('Member - Success Tests', () => { + it('Contribute with an action', function () { + //Member page + cy.identifyMember(this.data.member.number, this.data.member.vat) - //Contribution page - cy.get('#annual_use') - .clear() - .type(this.data.annual_use.low) - .should('have.value', this.data.annual_use.low) + //Contribution page + cy.get('#annual_use') + .clear() + .type(this.data.annual_use.low) + .should('have.value', this.data.annual_use.low) - for (let n = 0; n < this.data.number_of_action.normal; n++) { - cy.get('#add_action').click() - } + for (let n = 0; n < this.data.number_of_action.normal; n++) { + cy.get('#add_action').click() + } - cy.get('[name="payment.iban"]') - .clear() - .type(this.data.payment_data.iban) - .should('have.value', this.data.payment_data.iban) - cy.get('[data-cy=next]').click() + cy.get('[name="payment.iban"]') + .clear() + .type(this.data.payment_data.iban) + .should('have.value', this.data.payment_data.iban) + cy.get('[data-cy=next]').click() - //Review page - cy.get('#privacy_plicy_check').check() - cy.get('[data-cy=next]').click() - }) + //Review page + cy.get('#privacy_plicy_check').check() + cy.get('[data-cy=submit]').click() + }) - it('Try to contribute with out of zone member', function () { - //Member page - let memberNumber = this.data.member_out_first_fase_zone.number + it('Try to contribute with out of zone member', function () { + //Member page + let memberNumber = this.data.member_out_first_fase_zone.number let memberVat = this.data.member_out_first_fase_zone.vat cy.intercept('GET', '/data/soci/**').as('checkMember') @@ -50,13 +95,62 @@ describe('Generation Form', () => { cy.get('#vat').clear().type(memberVat).should('have.value', memberVat) cy.wait('@checkMember') - .its('response.statusCode') - .should('be.oneOf', [200, 304]) + .its('response.statusCode') + .should('be.oneOf', [200, 304]) cy.get('[data-cy=exit]').click() + }) }) + + context(' NO Member - Success Tests', () => { + it('Contribute with an action', function () { + //Member page + let postal_code = this.data.new_member.postal_code + let vat = this.data.new_member.vat + cy.get('#member_choose_no').click() + cy.get('#input_postalcode') + .clear() + .type(postal_code) + .should('have.value', postal_code) + cy.get('#vat').clear().type(vat).should('have.value', vat) + + cy.get('[data-cy=next]').click() - context('Fail Tests', () => { + fillInData(this.data) + //Contribution page + cy.get('#annual_use') + .clear() + .type(this.data.annual_use.low) + .should('have.value', this.data.annual_use.low) + + for (let n = 0; n < this.data.number_of_action.normal; n++) { + cy.get('#add_action').click() + } + + cy.get('[name="payment.iban"]') + .clear() + .type(this.data.payment_data.iban) + .should('have.value', this.data.payment_data.iban) + cy.get('[data-cy=next]').click() + + //Review page + cy.get('#privacy_plicy_check').check() + /* cy.get('[data-cy=next]').click() */ + }) + + it('Try to contribute with out of zone postal code', function () { + //Member page + let postal_code = this.data.out_zone_data.postal_code + cy.get('#member_choose_no').click() + cy.get('#input_postalcode') + .clear() + .type(postal_code) + .should('have.value', postal_code) + cy.get('[data-cy=exit]').click() + }) + }) + + context('Member - Fail Tests', () => { it('Try to contribute with erroneous credentials', function () { //Member page let memberNumber = this.data.member.number @@ -119,24 +213,24 @@ describe('Generation Form', () => { }) it('Erroneous IBAN', function () { - //Member page - cy.identifyMember(this.data.member.number, this.data.member.vat) - - //Contribution page - cy.get('#annual_use') - .clear() - .type(this.data.annual_use.normal) - .should('have.value', this.data.annual_use.normal) - - for (let n = 0; n < this.data.number_of_action.normal; n++) { - cy.get('#add_action').click() - } - - cy.get('[name="payment.iban"]') - .clear() - .type(this.data.payment_data.err_iban) - .should('have.value', this.data.payment_data.err_iban) - cy.get('[data-cy=next]').should('be.disabled') - }) - }) + //Member page + cy.identifyMember(this.data.member.number, this.data.member.vat) + + //Contribution page + cy.get('#annual_use') + .clear() + .type(this.data.annual_use.normal) + .should('have.value', this.data.annual_use.normal) + + for (let n = 0; n < this.data.number_of_action.normal; n++) { + cy.get('#add_action').click() + } + + cy.get('[name="payment.iban"]') + .clear() + .type(this.data.payment_data.err_iban) + .should('have.value', this.data.payment_data.err_iban) + cy.get('[data-cy=next]').should('be.disabled') + }) + }) }) diff --git a/src/components/IBANField.js b/src/components/IBANField.js index e4926dc2..9421527f 100644 --- a/src/components/IBANField.js +++ b/src/components/IBANField.js @@ -51,7 +51,7 @@ function IBANField(props) { useEffect(() => { onChange({ IBAN: IBAN, IBANValid: false }) - if (IBAN.length > 27) { + if (IBAN.length > 28) { setIsLoading(true) checkIban(IBAN) .then((response) => { diff --git a/src/containers/Generation/GenerationForm/GenerationContributionForm.js b/src/containers/Generation/GenerationForm/GenerationContributionForm.js index d1ba4bfb..b4429fe4 100644 --- a/src/containers/Generation/GenerationForm/GenerationContributionForm.js +++ b/src/containers/Generation/GenerationForm/GenerationContributionForm.js @@ -1,4 +1,4 @@ -import React, { useCallback, useState } from 'react' +import React, { useCallback } from 'react' import { useTranslation } from 'react-i18next' import { makeStyles } from '@material-ui/core/styles' @@ -8,7 +8,6 @@ import IBANField from '../../../components/IBANField' import AddIcon from '@material-ui/icons/AddBox' import RemoveIcon from '@material-ui/icons/IndeterminateCheckBox' import Box from '@material-ui/core/Box' -import IconButton from '@material-ui/core/IconButton' import Button from '@material-ui/core/Button' import Grid from '@material-ui/core/Grid' import InputAdornment from '@material-ui/core/InputAdornment' @@ -156,7 +155,6 @@ const GenerationContributionForm = (props) => { }) }} /> - {/*TODO: POSAR ELS ESTILS CORRECTAMENT*/} { const classes = useStyles() const { t, i18n } = useTranslation() const { language } = useParams() - const [activeStep, setActiveStep] = useState(0) const [sending, setSending] = useState(false) const [completed, setCompleted] = useState(false) const [error, setError] = useState(false) const [result, setResult] = useState({}) + useEffect(() => { i18n.changeLanguage(language) }, [language, i18n]) @@ -75,7 +70,9 @@ const GenerationContribution = (props) => { phone1: '', phone2: '', language: `${i18n.language}_ES`, - has_generation_enabled_zone: true + has_generation_enabled_zone: true, + postal_code_checked: false, + generation_zone_checked: false }, payment: { amount: '', @@ -86,6 +83,7 @@ const GenerationContribution = (props) => { number_of_actions: 0, annual_use: 0, privacy_policy_accepted: false, + privacy_policy_accepted_responsible_declaration: false, percent_over_annual_use: 0 } @@ -124,10 +122,65 @@ const GenerationContribution = (props) => { }) }) }), + Yup.object().shape({ + member: Yup.object().shape({ + name: Yup.string().required(t('NO_NAME')), + surname1: Yup.string().when('isphisical', { + is: true, + then: Yup.string().required(t('NO_SURNAME1')) + }), + proxyname: Yup.string().when('isphisical', { + is: false, + then: Yup.string().required(t('NO_PROXY_NAME')) + }), + proxynif: Yup.string().when('isphisical', { + is: false, + then: Yup.string().required(t('NO_PROXY_NIF')) + }), + proxynif_valid: Yup.bool().when('isphisical', { + is: false, + then: Yup.bool().required(t('FILL_NIF')).oneOf([true], t('FILL_NIF')) + }), + address: Yup.string().required(t('NO_ADDRESS')), + postal_code: Yup.string() + .matches(/^\d*$/, t('NO_POSTALCODE')) + .required(t('NO_POSTALCODE')), + state: Yup.object().shape({ + id: Yup.number().required(t('NO_STATE')) + }), + city: Yup.object().shape({ + id: Yup.number().required(t('NO_CITY')) + }), + email: Yup.string().required(t('NO_EMAIL')).email(t('NO_EMAIL')), + email2: Yup.string().test( + 'repeatEmail', + t('NO_REPEATED_EMAIL'), + function () { + return this.parent.email === this.parent.email2 + } + ), + phone1: Yup.string().min(9, t('NO_PHONE')).required(t('NO_PHONE')), + phone2: Yup.string().min(9, t('NO_PHONE')), + language: Yup.string().required(t('NO_LANGUAGE')) + }), + legal_person_accepted: Yup.bool().test({ + name: 'isTheMemberVat', + message: t('ACCEPT_LEGAL_PERSON'), + test: function () { + return !( + this.parent.member.isphisical === false && + this.parent.legal_person_accepted !== true + ) + } + }), + privacy_policy_accepted: Yup.bool() + .required(t('UNACCEPTED_PRIVACY_POLICY')) + .oneOf([true], t('UNACCEPTED_PRIVACY_POLICY')) + }), Yup.object().shape({ annual_use: Yup.number() .required( - t('GENERATION_ANNUAL_USE_HELPER_MIN', { + t('GENERATION_ANNUAL_USE_MIN', { generationMinAnnualUse: new Intl.NumberFormat('ca').format( contributionParams?.generationMinAnnualUse ) @@ -188,65 +241,75 @@ const GenerationContribution = (props) => { }) }), Yup.object().shape({ - privacy_policy_accepted: Yup.bool() + privacy_policy_accepted_responsible_declaration: Yup.bool() .required(t('HAY QUE ACEPTAR LA POLÍTICA DE PRIVACIDAD')) .oneOf([true], t('PRIVATE_POLICY')) }) ] - const nextStep = (props) => { - let next = activeStep + 1 - const last = MAX_STEP_NUMBER - //This part of code i for the no partners - /* if (activeStep === 0 && props?.values?.member?.is_member) { - next++ - } */ + const nextStep = useCallback( + (props) => { + let next = activeStep + 1 + const last = MAX_STEP_NUMBER + if (activeStep === 0 && props?.values?.member?.is_member) { + next++ + } - setActiveStep(Math.min(next, last)) + setActiveStep(Math.min(next, last)) - props.submitForm().then(() => { - if (props.isValid) { - setActiveStep(Math.min(next, last)) + props.submitForm().then(() => { + if (props.isValid) { + setActiveStep(Math.min(next, last)) + props.validateForm() + props.setTouched({}) + } + }) + }, + [activeStep] + ) + + const prevStep = useCallback( + (props) => { + const prev = activeStep - 1 + if (activeStep === 2 && props?.values?.member?.is_member) { + setActiveStep(Math.max(activeStep - 2, 0)) + } else { + setActiveStep(Math.max(0, prev)) + } + if (completed) { + setCompleted(false) + setError(false) + } + props.submitForm().then(() => { props.validateForm() props.setTouched({}) - } - }) - } - - const prevStep = (props) => { - const prev = activeStep - 1 - /*if (activeStep === 2 && props?.values?.member?.is_member) { - setActiveStep(Math.max(activeStep - 2, 0)) - } else {*/ - setActiveStep(Math.max(0, prev)) - //} - - if (completed) { - setCompleted(false) - setError(false) - } - props.submitForm().then(() => { - props.validateForm() - props.setTouched({}) - }) - } + }) + }, + [activeStep, completed] + ) - const getNextButton = useCallback((canNextStep, formikProps) => { - console.log(formikProps) - return canNextStep ? ( - nextStep(formikProps)} - title={t('SEGUENT_PAS')} - /> - ) : ( - window.location.href = "/"} - title={t('EXIT')} - /> - ) - },[nextStep,t]) + const getNextButton = useCallback( + (nextStepChecked, canNextStep, formikProps) => { + return canNextStep ? ( + nextStep(formikProps)} + title={t('SEGUENT_PAS')} + /> + ) : ( + (window.location.href = '/')} + title={t('EXIT')} + /> + ) + }, + [nextStep, t] + ) const handlePost = async (values) => { setSending(true) @@ -288,79 +351,86 @@ const GenerationContribution = (props) => { ? error?.response?.data?.data : { code: 'UNEXPECTED' } setError(errorResp) - }) + }) setSending(false) setActiveStep(MAX_STEP_NUMBER) setCompleted(true) } return ( - {}} - enableReinitialize - initialValues={initialValues} - validationSchema={validationSchemas[activeStep]} - validateOnMount={true}> - {(formikProps) => ( -
- - - {activeStep === 0 && ( - - )} - {activeStep === 1 && ( - - )} - {activeStep === 2 && } + {}} + enableReinitialize + initialValues={initialValues} + validationSchema={validationSchemas[activeStep]} + validateOnMount={true}> + {(formikProps) => ( + + + + {activeStep === 0 && ( + + )} + {activeStep === 1 && ( + + )} + {activeStep === 2 && ( + + )} + {activeStep === 3 && } - {completed && ( - - {error ? ( - - ) : ( - - )} - - )} + {completed && ( + + {error ? ( + + ) : ( + + )} + + )} - -
- {result?.investment === undefined && ( - prevStep(formikProps)} - title={t('PAS_ANTERIOR')} - /> - )} - {activeStep < MAX_STEP_NUMBER - 1 - ? getNextButton(formikProps.values.member.has_generation_enabled_zone,formikProps) - : !completed && ( - - ) : ( - - ) - } - disabled={sending || !formikProps.isValid} - onClick={() => handlePost(formikProps.values)} - title={t('SEND')} - /> - )} -
-
-
-
- - )} -
+ +
+ {result?.investment === undefined && ( + prevStep(formikProps)} + title={t('PAS_ANTERIOR')} + /> + )} + {activeStep < MAX_STEP_NUMBER - 1 + ? getNextButton( + formikProps.values.member.generation_zone_checked, + formikProps.values.member.has_generation_enabled_zone, + formikProps + ) + : !completed && ( + + ) : ( + + ) + } + disabled={sending || !formikProps.isValid} + onClick={() => handlePost(formikProps.values)} + title={t('SEND')} + /> + )} +
+
+
+
+ + )} +
) } diff --git a/src/containers/Generation/GenerationForm/GenerationMemberIdFields.js b/src/containers/Generation/GenerationForm/GenerationMemberIdFields.js index 833bf1e5..2fda2b59 100644 --- a/src/containers/Generation/GenerationForm/GenerationMemberIdFields.js +++ b/src/containers/Generation/GenerationForm/GenerationMemberIdFields.js @@ -1,9 +1,7 @@ import React, { useEffect, useState } from 'react' import { useLocation } from 'react-router-dom' - import { useTranslation } from 'react-i18next' import { makeStyles } from '@material-ui/core/styles' - import CircularProgress from '@material-ui/core/CircularProgress' import Grid from '@material-ui/core/Grid' import InputAdornment from '@material-ui/core/InputAdornment' @@ -33,8 +31,16 @@ const GenerationMemberIdFields = (props) => { const classes = useStyles() const query = useQuery() - const { values, handleBlur, handleChange, errors, setErrors, touched, setFieldValue } = - props + const { + values, + handleBlur, + handleChange, + errors, + setErrors, + touched, + setFieldValue, + isTesting = false + } = props const [isLoading, setLoading] = useState(false) const [error, setError] = useState(false) @@ -48,6 +54,8 @@ const GenerationMemberIdFields = (props) => { useEffect(() => { const checkIsMember = async () => { + setFieldValue('member.generation_zone_checked', false) + setFieldValue('member.has_generation_enabled_zone', true) setLoading(true) try { await checkMemberVat(values.member.vat) @@ -76,9 +84,16 @@ const GenerationMemberIdFields = (props) => { }) setFieldValue('member.checked', true) setFieldValue('member.has_generation_enabled_zone', res.data) - setErrors({'member':{'has_generation_enabled_zone':false}}) + setFieldValue('member.generation_zone_checked', true) + setErrors({ member: { has_generation_enabled_zone: false } }) } catch (error) { - setErrors({'member':{'has_generation_enabled_zone':t('GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED')}}) + setErrors({ + member: { + has_generation_enabled_zone: t( + 'GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED' + ) + } + }) } setLoading(false) } @@ -86,13 +101,14 @@ const GenerationMemberIdFields = (props) => { if ( values?.member?.number && values?.member?.vat && - values.member.vat.length >= 9 + values.member.vat.length >= 9 && + !isTesting ) { checkIsMember() } else { setFieldValue('member.checked', false) } - }, [values.member.number, values.member.vat, setFieldValue,setErrors]) + }, [t, values.member.number, values.member.vat, setFieldValue, setErrors]) useEffect(() => { let hash = query.get('h') @@ -106,7 +122,7 @@ const GenerationMemberIdFields = (props) => { } catch (error) { console.error('Invalid hash code') } - }, [query.get('h'), values, setFieldValue]) + }, [values, setFieldValue, query]) return ( @@ -161,7 +177,7 @@ const GenerationMemberIdFields = (props) => { } /> - + { const mockSetFieldValue = jest.fn() const getById = queryByAttribute.bind(null, 'id') - test('Should call setFieldValue when change vat', async () => { + test('Should call setFieldValue when change vat', async () => { const dom = render( @@ -47,6 +47,8 @@ describe('Generation Form Review', () => { } /> @@ -59,5 +61,5 @@ describe('Generation Form Review', () => { fireEvent.change(vatTextField, { target: { value: VAT } }) }) expect(mockSetFieldValue).toHaveBeenCalledWith('member.vat', VAT) - }) + }) }) diff --git a/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.js b/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.js index d254851c..f9ea3c1f 100644 --- a/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.js +++ b/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.js @@ -1,14 +1,13 @@ import React from 'react' import { Alert, AlertTitle } from '@material-ui/lab' import { Grid, Typography } from '@material-ui/core' - import { useTranslation } from 'react-i18next' import { makeStyles } from '@material-ui/core/styles' import Box from '@material-ui/core/Box' import StepHeader from '../../../components/StepHeader' import Chooser from '../../../components/Chooser' import GenerationMemberIdFields from './GenerationMemberIdFields' -import VATField from '../../../components/VATField' +import GenerationNoMemberIdFields from './GenerationNoMemberIdFields' const useStyles = makeStyles((theme) => ({ title: { @@ -30,11 +29,8 @@ const GenerationMemberIdentifier = (props) => { const { values, - handleBlur, errors, - touched, setFieldValue, - setFieldTouched, resetForm, title = t('CONTRIBUTION') } = props @@ -44,17 +40,6 @@ const GenerationMemberIdentifier = (props) => { setFieldValue('member.is_member', !!event?.option) } - const onChangeVAT = (params) => { - const { vat, isPhisical, valid } = params - setFieldValue('member.isphisical', isPhisical, false) - setFieldValue('member.vatvalid', valid, false) - setFieldValue('member.exists', false, false) - setFieldValue('member.vat', vat) - if (vat !== '') { - setFieldTouched('member.vat', true) - } - } - return ( <> @@ -100,49 +85,7 @@ const GenerationMemberIdentifier = (props) => { ) : ( <> - - - - - - - - - - - + )} {!values?.member?.has_generation_enabled_zone ? ( @@ -160,30 +103,41 @@ const GenerationMemberIdentifier = (props) => { }) }} /> - {} + {!values?.member?.is_member ? ( + + ) : null} - - - - - ) : null} - - {errors?.member?.has_generation_enabled_zone ? ( - - + {values?.member?.is_member ? ( + - + + ) : null} +
+ ) : null} + + {errors?.member?.has_generation_enabled_zone ? ( + + + + ) : null} diff --git a/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.test.js b/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.test.js index 29d11fca..22269e00 100644 --- a/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.test.js +++ b/src/containers/Generation/GenerationForm/GenerationMemberIdentifier.test.js @@ -6,7 +6,6 @@ import { fireEvent, getByText } from '@testing-library/react' -import { act } from 'react-dom/test-utils' import { BrowserRouter as Router, Route, Routes } from 'react-router-dom' jest.mock('react-i18next', () => ({ @@ -29,36 +28,19 @@ describe('Generation Form Review', () => { } } - const mockValuesNoMember = { + const mockValuesNotEnabledZone = { member: { - is_member: false - } - } - - const mockErrorsVat = { - member:{ - vat: "VAT_HAS_AN_ERROR" - } - } - - const mockErrorsVatValid = { - member:{ - vatvalid: "VAT IS NOT VALID" + is_member: true, + has_generation_enabled_zone: false } } - const mockErrorsMemberExists = { - member:{ - exists: "MEMBER_ALREADY_EXISTS" + const mockEnabledZonneError = { + member: { + has_generation_enabled_zone: 'ENABLED_ZONE_ERROR' } } - const mockTouched = { - member:{ - vat:true - } - } - const VAT = '40323835M' const getById = queryByAttribute.bind(null, 'id') const mockSetFieldValue = jest.fn() const mocksetFieldTouched = jest.fn() @@ -88,53 +70,7 @@ describe('Generation Form Review', () => { expect(mockSetFieldValue).toHaveBeenCalledWith('member.is_member', false) }) - test('Should call setFieldTouched when change the value of vat', async () => { - const dom = render( - - ) - - const vatTextField = getById(dom.container, 'vat') - act(() => { - fireEvent.change(vatTextField, { target: { value: VAT } }) - }) - expect(mocksetFieldTouched).toHaveBeenCalledWith('member.vat', true) - }) - - test('Should show the input to fill in the partner number if is member', async () => { - const dom = render( - - - - } - /> - - - ) - - const GenerationMemberIdentifierInputBox = getById( - dom.container, - 'box_member_identifier' - ) - expect( - getByText(GenerationMemberIdentifierInputBox, 'CONTRIBUTION_MEMBER_INDENTIFIER') - ).toBeInTheDocument() - }) - - test('Should show the input to fill in the nif of the new person', async () => { - + test('Should show warning text when zone is not enabled', async () => { const dom = render( @@ -144,41 +80,8 @@ describe('Generation Form Review', () => { element={ - } - /> - - - ) - - const newMemberInputBox = getById( - dom.container, - 'box_no_member_identifier' - ) - expect( - getByText(newMemberInputBox, 'CONTRIBUTION_MEMBER_VAT') - ).toBeInTheDocument() - }) - - test('Should show error if vat has an error', async () => { - - const dom = render( - - - } /> @@ -186,20 +89,16 @@ describe('Generation Form Review', () => { ) - const newMemberVatInputBox = getById( - dom.container, - 'box_no_member_vat_input' - ) + const infoNoEnabledZone = getById(dom.container, 'grid_not_enabled_zone') expect( - getByText(newMemberVatInputBox, mockErrorsVat.member.vat) + getByText( + infoNoEnabledZone, + 'GENERATION_FORM_INFO_ZONE_NOT_ENABLED_TITLE' + ) ).toBeInTheDocument() }) - test('Should show error if vat is not valid', async () => { - - const mockValuesNoMemberVatNoValid = JSON.parse(JSON.stringify(mockValuesNoMember)) - mockValuesNoMemberVatNoValid.member.vatvalid=false - + test('Should show error when the call to check zone fails', async () => { const dom = render( @@ -209,11 +108,9 @@ describe('Generation Form Review', () => { element={ } /> @@ -221,17 +118,13 @@ describe('Generation Form Review', () => { ) - const newMemberVatInputBox = getById( - dom.container, - 'box_no_member_vat_input' - ) + const errorEnabledZone = getById(dom.container, 'grid_error_enabled_zone') expect( - getByText(newMemberVatInputBox, mockErrorsVatValid.member.vatvalid) + getByText(errorEnabledZone, 'GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED') ).toBeInTheDocument() }) - test('Should show error when member vat already exists', async () => { - + test('Should show the input to fill in the partner number if is member', async () => { const dom = render( @@ -241,11 +134,9 @@ describe('Generation Form Review', () => { element={ } /> @@ -253,42 +144,15 @@ describe('Generation Form Review', () => { ) - const newMemberVatInputBox = getById( - dom.container, - 'box_no_member_vat_input' - ) - expect( - getByText(newMemberVatInputBox, mockErrorsMemberExists.member.exists) - ).toBeInTheDocument() - }) - - test('Should show info of no enabled zone', async () => { - const mockValuesNotEnabledZone = JSON.parse(JSON.stringify(mockValues)) - mockValuesNotEnabledZone.member.has_generation_enabled_zone = false - const dom = render( - - - - } - /> - - - ) - - const infoNotEnabledZone = getById( + const GenerationMemberIdentifierInputBox = getById( dom.container, - 'grid_not_enabled_zone' + 'box_member_identifier' ) expect( - getByText(infoNotEnabledZone, "GENERATION_FORM_INFO_ZONE_NOT_ENABLED_TITLE") + getByText( + GenerationMemberIdentifierInputBox, + 'CONTRIBUTION_MEMBER_INDENTIFIER' + ) ).toBeInTheDocument() }) - }) diff --git a/src/containers/Generation/GenerationForm/GenerationNoMemberIdFields.js b/src/containers/Generation/GenerationForm/GenerationNoMemberIdFields.js new file mode 100644 index 00000000..5b6e0738 --- /dev/null +++ b/src/containers/Generation/GenerationForm/GenerationNoMemberIdFields.js @@ -0,0 +1,195 @@ +import React, { useState, useEffect, useCallback } from 'react' +import { Alert } from '@material-ui/lab' +import { Typography, TextField } from '@material-ui/core' +import InputAdornment from '@material-ui/core/InputAdornment' +import { useTranslation } from 'react-i18next' +import { makeStyles } from '@material-ui/core/styles' +import Box from '@material-ui/core/Box' +import VATField from '../../../components/VATField' +import CircularProgress from '@material-ui/core/CircularProgress' +import CheckOutlinedIcon from '@material-ui/icons/CheckOutlined' +import { checkIsPostalCodeFromGenerationEnabledZone } from '../../../services/api' + +const useStyles = makeStyles((theme) => ({ + title: { + fontSize: '1rem', + marginTop: '16px', + fontWeight: 500 + }, + titleWithMargin: { + marginBottom: theme.spacing(1) + }, + titleWithMarginPlus: { + marginBottom: theme.spacing(3) + }, + helperText: { + color: "#f44336", + marginRight: "14px", + fontSize: "0.75rem", + marginTop: "3px", + textAlign: "left", + lineHeight: "1.66", + letterSpacing: "0.03333em", + fontWeight: 400 + } +})) + +const GenerationNoMemberIdFields = (props) => { + const { t } = useTranslation() + const classes = useStyles() + const [isLoading, setIsLoading] = useState(false) + + const { + values, + handleBlur, + errors, + touched, + setFieldValue, + setErrors, + setFieldTouched, + isTesting = false + } = props + + const onChangeVAT = (params) => { + const { vat, isPhisical, valid, isMember } = params + setFieldValue('member.isphisical', isPhisical, false) + setFieldValue('member.vatvalid', valid, false) + setFieldValue('member.exists', isMember, false) + setFieldValue('member.vat', vat) + if (vat !== '') { + setFieldTouched('member.vat', true) + } + } + + const onChangePostalCode = (event) => { + if (values?.member?.postal_code_checked) { + setFieldValue('member.postal_code_checked', false) + } + setFieldValue('member.postal_code', event.target.value) + } + + const checkPostalCode = useCallback(async () => { + setIsLoading(true) + try { + let result = await checkIsPostalCodeFromGenerationEnabledZone({ + postalCode: values?.member?.postal_code + }) + setFieldValue('member.has_generation_enabled_zone', result.data) + setFieldValue('member.generation_zone_checked', true) + setFieldValue('member.postal_code_checked', true) + setIsLoading(false) + } catch (error) { + setErrors({ + member: { + postal_code: t( + 'GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED' + ) + } + }) + setIsLoading(false) + } + }, [values?.member?.postal_code, setFieldValue, setErrors, t]) + + useEffect(() => { + if (values?.member?.postal_code?.length === 5 && !isTesting) { + checkPostalCode() + } + }, [checkPostalCode, values?.member?.postal_code]) + + return ( + <> + + + + : "" + } + InputProps={{ + endAdornment: ( + + {isLoading && } + {!isLoading && values?.member?.postal_code_checked && ( + + )} + + ) + }} + /> + + + {values?.member?.has_generation_enabled_zone && + values.member.postal_code_checked ? ( + <> + + + + + + + + + + + + + ) : null} + + ) +} + +export default GenerationNoMemberIdFields diff --git a/src/containers/Generation/GenerationForm/GenerationNoMemberIdFields.test.js b/src/containers/Generation/GenerationForm/GenerationNoMemberIdFields.test.js new file mode 100644 index 00000000..224e59f9 --- /dev/null +++ b/src/containers/Generation/GenerationForm/GenerationNoMemberIdFields.test.js @@ -0,0 +1,91 @@ +import React from 'react' +import GenerationNoMemberIdFields from './GenerationNoMemberIdFields' +import { + render, + queryByAttribute, + fireEvent +} from '@testing-library/react' +import { act } from 'react-dom/test-utils' + + +jest.mock('react-i18next', () => ({ + // this mock makes sure any components using the translate hook can use it without a warning being shown + useTranslation: () => { + return { + t: (str) => str, + i18n: { + changeLanguage: () => new Promise(() => {}) + } + } + } +})) + +describe('Generation Form Review', () => { + + const mockValuesPostalCode = { + member: { + is_member: true, + has_generation_enabled_zone: false, + postal_code: '25225' + } + } + + const mockValuesEnabeldAndCheckedZone = { + member: { + is_member: false, + postal_code_checked: true, + has_generation_enabled_zone: true + } + } + + const VAT = '40323835M' + const POSTAL_CODE = '25290' + const getById = queryByAttribute.bind(null, 'id') + const mockSetFieldValue = jest.fn() + const mocksetFieldTouched = jest.fn() + + test('Should call setFieldValue when change postal code', async () => { + + + const dom = render( + + ) + + const postalCodeTextField = getById(dom.container, 'input_postalcode') + act(() => { + fireEvent.change(postalCodeTextField, { target: { value: POSTAL_CODE } }) + }) + + expect(mockSetFieldValue).toHaveBeenCalledWith( + 'member.postal_code', + POSTAL_CODE + ) + }) + + test('Should call setFieldValue when change vat', async () => { + const dom = render( + + ) + + const vatTextField = getById(dom.container, 'vat') + act(() => { + fireEvent.change(vatTextField, { target: { value: VAT } }) + }) + + expect(mockSetFieldValue).toHaveBeenCalledWith('member.vat', VAT) + }) +}) diff --git a/src/containers/Generation/GenerationForm/GenerationReview.js b/src/containers/Generation/GenerationForm/GenerationReview.js index 26557f4e..61e77a55 100644 --- a/src/containers/Generation/GenerationForm/GenerationReview.js +++ b/src/containers/Generation/GenerationForm/GenerationReview.js @@ -63,7 +63,7 @@ const Review = (props) => { const handleClickPrivacyPolicy = (event) => { event.preventDefault() - setFieldValue('privacy_policy_accepted', !values?.privacy_policy_accepted) + setFieldValue('privacy_policy_accepted_responsible_declaration', !values?.privacy_policy_accepted_responsible_declaration) } const ReviewField = useCallback(({ label, value }) => { @@ -205,7 +205,7 @@ const Review = (props) => { control={ { } } + test('Should call setFieldValue when check is clicked', () => { const dom = render() @@ -71,4 +72,5 @@ describe('Generation Form Review', () => { expect(personalData).toBeInTheDocument() }) + }) \ No newline at end of file diff --git a/src/i18n/locale-ca.json b/src/i18n/locale-ca.json index 99267f53..4f220577 100644 --- a/src/i18n/locale-ca.json +++ b/src/i18n/locale-ca.json @@ -648,21 +648,21 @@ "GENERATION_INVESTMENTS_ASSIGNMENT_VALIDATION_SUCCESS":"El canvi s’ha registrat correctament i serà efectiu en 2 dies hàbils.", "GENERATION_FORM_TITLE":"Formulari de participació Generation kWh", "GENERATION_FORM_ANNUAL_USE_TITLE":"Ús elèctric anual", - "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Introdueix la quantitat d’electricitat que fas servir anualment (p.e. 2500).", + "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Introdueix la quantitat d’electricitat que fas servir anualment.", "GENERATION_FORM_ANNUAL_USE_INPUT_LABEL":"Consum anual en kWh", - "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"Per exemple 2500", + "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"*Per exemple 2500", "GENERATION_FORM_ACTIONS_INPUT_TITLE":"Quantes accions energètiques voldries?*", "GENERATION_FORM_ACTIONS_INPUT_LABEL":"Accions energètiques", "GENERATION_FORM_ACTIONS_INPUT_HELP_TEXT":"Per exemple 2 accions corresponen a: 200€", "GENERATION_FORM_ACTIONS_DESC_TEXT":"Cada acció energètica representa un préstec de 100€ que fas a la cooperativa. A cada acció energètica li corresponen aproximadament 170 kWh cada any, provinents de les plantes vinculades al Generation kWh. Més informació.", "GENERATION_FORM_ACTIONS_URL_INFO_ACTION":"https://ca.support.somenergia.coop/article/582-que-representa-una-accio-energetica", - "GENERATION_FORM_ACTION_MAX_ACTIONS_INFO":"Màxim 49 accions energètiques. Per a valors superiors, posa’t en contacte amb nosaltres a generationkwh@somenergia.coop", + "GENERATION_FORM_ACTION_MAX_ACTIONS_INFO":"*Màxim 49 accions energètiques. Per a valors superiors, posa’t en contacte amb nosaltres a generationkwh@somenergia.coop", "GENERATION_FORM_PROD_ANNUAL":"Autoproducció assolida anualment", "GENERATION_FORM_PERCENT_ANNUAL_USE_TITLE":"Percentatge de producció sobre el teu ús total", "GENERATION_FORM_PERCENT_ANNUAL_USE_INFO":"Pots autoproduir el que vulguis però recorda que la nostra recomanació és fer-ho al voltant del 70% de l’ús elèctric total.", "GENERATION_FORM_PERCENT_ANNUAL_USE_URL_INFO":"https://ca.support.somenergia.coop/article/584-hi-ha-una-quantitat-minima-o-maxima-a-aportar", "GENERATION_FORM_REVIEW_DESC":"

Gairebé hem acabat!

Revisa les dades introduïdes, accepta les clàusules legals i ja podràs signar el contracte i el permís per girar el rebut bancari de la teva inscripció al Generation kWh.

", - "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOM ENERGIA, SCCL. (F55091367), Pic de Peguera, 11, 17003 de Girona, somenergia@delegado-datos.com. FINALITAT: Gestionar i tramitar la contractació del servei Generation kWh; gestionar la facturació dels consums segons la tarifa Generation kWh; tramitar l\"assignació de la tarifa Generation kWh als tercers designats pel client. LEGITIMACIÓ: Relació contractual. CESSIONS: No estan previstes cessions, excepte les legalment previstes. CONSERVACIÓ: Fins a la vigència del contracte de subministrament i, durant els terminis exigits per llei per a atendre eventuals responsabilitats. DRETS: Pot exercir el seu dret d\"accés, rectificació, supressió, portabilitat, limitació i oposició dirigint-se a les dades de la persona responsable. En cas de divergències, pot presentar una reclamació davant l\"Agència de Protecció de Dades (www.aepd.es). IMPORTANT: Declaro responsablement que disposo del consentiment de les terceres persones a les quals assignaré la tarifa Generation kWh, per a cedir les seves dades personals a SOM ENERGIA necessaris per a l\"assignació i contractació de la tarifa Generation kWh.", + "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOM ENERGIA, SCCL. (F55091367), Pic de Peguera, 11, 17003 de Girona, somenergia@delegado-datos.com. FINALITAT: Gestionar i tramitar la contractació del servei Generation kWh; gestionar la facturació dels consums segons la tarifa Generation kWh; tramitar l\"assignació de la tarifa Generation kWh als tercers designats pel client. LEGITIMACIÓ: Relació contractual. CESSIONS: No estan previstes cessions, excepte les legalment previstes. CONSERVACIÓ: Fins a la vigència del contracte de subministrament i, durant els terminis exigits per llei per a atendre eventuals responsabilitats. DRETS: Pot exercir el seu dret d\"accés, rectificació, supressió, portabilitat, limitació i oposició dirigint-se a les dades de la persona responsable. En cas de divergències, pot presentar una reclamació davant l\"Agència de Protecció de Dades (www.aepd.es). IMPORTANT: Declaro responsablement que disposo del consentiment de les terceres persones a les quals assignaré la tarifa Generation kWh, per a cedir les seves dades personals a SOM ENERGIA necessaris per a l\"assignació i contractació de la tarifa Generation kWh.", "GENERATION_FORM_TERMS_RESPONSIBLE_STATEMENT":"Accepto la política de privacitat i la declaració responsable", "GENERATION_FORM_URL_PRIVACY_POLICY":"https://www.somenergia.coop/ca/politica-de-privacitat/", "GENERATION_FORM_REVIEW_SECONDARY_TEXT":"

Tingues en compte que la signatura del contracte implica l’acceptació de les condicions contractuals i, per tant, el càrrec de l’import del préstec al compte bancari que has indicat.

Quan acabis la signatura dels documents, t’enviarem per correu electrònic les Condicions generals i les Condicions particulars del teu contracte de préstec al Generation kWh perquè en tinguis una còpia. 

Moltes gràcies pel teu suport al canvi de model energètic!

", @@ -671,5 +671,10 @@ "GENERATION_FORM_INFO_NOT_VALID_DATA_OF_PARTNER":"Si et sembla que tenim malament les teves dades de residència, escriu-nos a generationkwh@somenergia.coop", "GENERATION_FORM_HELP_CENTER_URL":"https://ca.support.somenergia.coop/category/580-generation-kwh", "GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED":"No hem pogut validar les dades, posa't en contacte amb generationkwh@somenergia.coop perquè et puguem donar un cop de mà", - "GENERATION_FORM_CONTRIBUTION_MEMBER_IDENTIFIER_DESC":"Tingues en compte que per poder participar en el Generation kWh és necessari que siguis soci o sòcia de la cooperativa." + "GENERATION_FORM_MEMBER_IDENTIFIER_DESC":"Tingues en compte que per poder participar en el Generation kWh és necessari que siguis soci o sòcia de la cooperativa.", + "GENERATION_FORM__MEMBER_WARNING":"

Ja pots participar al Generation kWh perquè està oberta la possibilitat a la teva zona!

Ara, a part de la quantitat amb què decideixis participar en el Generation kWh, per ser soci/sòcia has de fer una aportació al capital social de 100 €, que es tornen en el supòsit que algun dia et vulguis donar de baixa.

", + "GENERATION_FORM__NO_MEMBER_TO_MEMBER_FORM":"Tot i així, si encara vols fer el pas de fer-te soci/sòcia, pots fer-ho a través d'aquest formulari.", + "GENERATION_FORM__MEMBER_FORM_URL":"https://www.somenergia.coop/ca/fes-te-n-soci-a/", + "GENERATION_ACTIONS_HELPER_MIN":"Un mínim d'una aportació", + "GENERATION_ANNUAL_USE_MIN":"Ha de ser un valor major que zero" } diff --git a/src/i18n/locale-es.json b/src/i18n/locale-es.json index 7ad77380..fdd8cccd 100644 --- a/src/i18n/locale-es.json +++ b/src/i18n/locale-es.json @@ -648,21 +648,21 @@ "GENERATION_INVESTMENTS_ASSIGNMENT_VALIDATION_SUCCESS":"El cambio se ha registrado correctamente y será efectivo en 2 días hábiles.", "GENERATION_FORM_TITLE":"Formulario de participación Generation kWh", "GENERATION_FORM_ANNUAL_USE_TITLE":"Uso eléctrico anual", - "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Introduce la cantidad de electricidad que usas (p.e. 2500).", + "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Introduce la cantidad de electricidad que usas.", "GENERATION_FORM_ANNUAL_USE_INPUT_LABEL":"Consumo anual en kWh", - "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"Por ejemplo 2500", + "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"*Por ejemplo 2500", "GENERATION_FORM_ACTIONS_INPUT_TITLE":"¿Cuántas acciones energéticas querrías?*", "GENERATION_FORM_ACTIONS_INPUT_LABEL":"Acciones energéticas", "GENERATION_FORM_ACTIONS_INPUT_HELP_TEXT":"Por ejemplo 2 acciones corresponden a: 200€", "GENERATION_FORM_ACTIONS_DESC_TEXT":"Cada acción energética representa un préstamo de 100€ que realizas en la cooperativa. A cada acción energética le corresponden aproximadamente 170 kWh al año, provenientes de las plantas vinculadas al Generation kWh. Más información. ", "GENERATION_FORM_ACTIONS_URL_INFO_ACTION":"https://es.support.somenergia.coop/article/589-que-representa-una-accion-energetica", - "GENERATION_FORM_ACTION_MAX_ACTIONS_INFO":"Máximo 49 acciones energéticas. Para valores superiores, ponte en contacto con nosotros en generationkwh@somenergia.coop", + "GENERATION_FORM_ACTION_MAX_ACTIONS_INFO":"*Máximo 49 acciones energéticas. Para valores superiores, ponte en contacto con nosotros en generationkwh@somenergia.coop", "GENERATION_FORM_PROD_ANNUAL":"Autoproducción alcanzada anualmente", "GENERATION_FORM_PERCENT_ANNUAL_USE_TITLE":"Porcentaje de producción sobre tu uso total", "GENERATION_FORM_PERCENT_ANNUAL_USE_INFO":"Puedes autoproducir lo que quieras pero recuerda que nuestra recomendación es hacerlo en torno al 70% del uso eléctrico total.", "GENERATION_FORM_PERCENT_ANNUAL_USE_URL_INFO":"https://es.support.somenergia.coop/article/591-existe-una-cantidad-minima-y-maxima-a-aportar", "GENERATION_FORM_REVIEW_DESC":"

¡Casi hemos terminado!

Revisa los datos introducidos, acepta las cláusulas legales y ya podrás firmar el contrato y el permiso para girar el recibo bancario de tu inscripción en el Generation kWh.

", - "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOMOS ENERGÍA, SCCL. (F55091367), Pico de Peguera, 11, 17003 de Girona, soma energía@delegado -datos.com FINALIDAD: Gestionar y tramitar la contratación del servicio Generation kWh; gestionar la facturación de los consumos según la tarifa Generation kWh; tramitar la asignación de la tarifa Generation kWh a los terceros designados por el cliente. LEGITIMACIÓN: Relación contractual. CESIONES: No están previstas cesiones, excepto las legalmente previstas. CONSERVACIÓN: Hasta la vigencia del contrato de suministro y, durante los plazos exigidos por ley para atender eventuales responsabilidades. DERECHOS: Puede ejercer su derecho de acceso, rectificación, supresión, portabilidad, limitación y oposición dirigiéndose a los datos de la persona responsable. En caso de divergencias, puede presentar una reclamación ante el \"Agencia de Protección de Datos (www.aepd.es). IMPORTANTE: Declaro responsablemente que dispongo del consentimiento de las terceras personas a las que asignaré la tarifa Generation kWh, para ceder sus datos personales a SOMOS ENERGÍA necesarios para la asignación y contratación de la tarifa Generation kWh.", + "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOM ENERGIA, SCCL. (F55091367), Pic de Peguera, 11, 17003 de Girona, somenergia@delegado-datos.com FINALIDAD: Gestionar y tramitar la contratación del servicio Generation kWh; gestionar la facturación de los consumos según la tarifa Generation kWh; tramitar la asignación de la tarifa Generation kWh a los terceros designados por el cliente. LEGITIMACIÓN: Relación contractual. CESIONES: No están previstas cesiones, excepto las legalmente previstas. CONSERVACIÓN: Hasta la vigencia del contrato de suministro y, durante los plazos exigidos por ley para atender eventuales responsabilidades. DERECHOS: Puede ejercer su derecho de acceso, rectificación, supresión, portabilidad, limitación y oposición dirigiéndose a los datos de la persona responsable. En caso de divergencias, puede presentar una reclamación ante la \"Agencia de Protección de Datos (www.aepd.es). IMPORTANTE: Declaro responsablemente que dispongo del consentimiento de las terceras personas a las que asignaré la tarifa Generation kWh, para ceder sus datos personales a SOM ENERGIA necesarios para la asignación y contratación de la tarifa Generation kWh.", "GENERATION_FORM_TERMS_RESPONSIBLE_STATEMENT":"Acepto la política de privacidad y la declaración responsable", "GENERATION_FORM_URL_PRIVACY_POLICY":"https://www.somenergia.coop/es/politica-de-privacidad/", "GENERATION_FORM_REVIEW_SECONDARY_TEXT":"

Ten en cuenta que la firma del contrato implica la aceptación de las condiciones contractuales y, por tanto, el cargo del importe del préstamo en la cuenta bancaria que has indicado.

Cuando acabes la firma de los documentos, te enviaremos por correo electrónico las Condiciones generales y las Condiciones particulares de tu contrato de préstamo al Generation kWh para que tengas una copia.

¡Muchas gracias por tu apoyo al cambio de modelo energético!

", @@ -671,5 +671,11 @@ "GENERATION_FORM_INFO_NOT_VALID_DATA_OF_PARTNER":"Si crees que tenemos mal tus datos de residencia, escríbenos a generationkwh@somenergia.coop", "GENERATION_FORM_HELP_CENTER_URL":"https://es.support.somenergia.coop/category/580-generation-kwh", "GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED":"No hemos podido validar los datos, ponte en contacto con generationkwh@somenergia.coop para que podamos echarte una mano", - "GENERATION_FORM_CONTRIBUTION_MEMBER_IDENTIFIER_DESC":"Ten en cuenta que para poder participar en el Generation kWh es necesario que seas socio o socia de la cooperativa." + "GENERATION_FORM_CONTRIBUTION_MEMBER_IDENTIFIER_DESC":"Ten en cuenta que para poder participar en el Generation kWh es necesario que seas socio o socia de la cooperativa.", + "GENERATION_CONTRIBUTION_MEMBER_WARNING":"

Ya puedes participar en Generation kWh porque está abierta la posibilidad a tu zona!

Ahora, aparte de la cantidad con la que decidas participar en el Generation kWh, para ser socio/a tienes que hacer una aportación al capital social de 100 €, que se devuelven en el supuesto de que algún día quieras darte de baja.

", + "GENERATION_CONTRIBUTION_NO_MEMBER_TO_MEMBER_FORM":"Sin embargo, si todavía quieres dar el paso de hacerte socio/socia, puedes hacerlo a través de este formulario.", + "GENERATION_CONTRIBUTION_MEMBER_FORM_URL":"https://www.somenergia.coop/es/hazte-socio-a/", + "GENERATION_ACTIONS_HELPER_MIN":"Un mínimo de una aportación", + "GENERATION_ANNUAL_USE_MIN":"Debe ser un valor mayor que cero" + } diff --git a/src/i18n/locale-eu.json b/src/i18n/locale-eu.json index 08143cd9..b75b92b5 100644 --- a/src/i18n/locale-eu.json +++ b/src/i18n/locale-eu.json @@ -647,21 +647,21 @@ "GENERATION_INVESTMENTS_ASSIGNMENT_VALIDATION_SUCCESS":"Aldaketa erregistratu dugu eta 2 egun baliodunen buruan burutuko dugu.", "GENERATION_FORM_TITLE":"Generation kWh proiektuan parte hartzeko formularioa", "GENERATION_FORM_ANNUAL_USE_TITLE":"Urteko elektrizitate-erabilera", - "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Adierazi urtean zenbat elektrizitate erabiltzen duzun (adibidez, 2.500).", + "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Adierazi urtean zenbat elektrizitate erabiltzen duzun.", "GENERATION_FORM_ANNUAL_USE_INPUT_LABEL":"Urteko kontsumoa kWh-tan", - "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"Adibidez 2500", + "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"*Adibidez 2500", "GENERATION_FORM_ACTIONS_INPUT_TITLE":"Zenbat akzio energetiko nahi dituzu?*", "GENERATION_FORM_ACTIONS_INPUT_LABEL":"Ekintza energetikoak", "GENERATION_FORM_ACTIONS_INPUT_HELP_TEXT":"Adibidez, 2 akzio hauei dagozkie: 200€", "GENERATION_FORM_ACTIONS_DESC_TEXT":"Akzio energetiko bakoitza Kooperatibari egiten diozun 100 euroko mailegu bat da. Akzio energetiko bakoitzari, gutxi gorabehera, Generation kWh proiektuari lotutako instalazioetatik datozen 170 kWh dagozkio urteko. Informazio gehiago. ", "GENERATION_FORM_ACTIONS_URL_INFO_ACTION":"https://eu.support.somenergia.coop/article/602--generation-kwh-zer-da-akzio-energetiko-bat?utm_source=linkidiomes&utm_medium=cda&utm_campaign=euskara", - "GENERATION_FORM_ACTION_MAX_ACTIONS_INFO":"Gehienez, 49 akzio energetiko. Akzio gehiago nahi badituzu, idatzi generationkwh@somenergia.coop helbidera.", + "GENERATION_FORM_ACTION_MAX_ACTIONS_INFO":"*Gehienez, 49 akzio energetiko. Akzio gehiago nahi badituzu, idatzi generationkwh@somenergia.coop helbidera.", "GENERATION_FORM_PROD_ANNUAL":"Urtean autoproduzitutako elektrizitatea", "GENERATION_FORM_PERCENT_ANNUAL_USE_TITLE":"Ekoizpenaren ehunekoa zure erabilera osoaren gainean", "GENERATION_FORM_PERCENT_ANNUAL_USE_INFO":"Nahi adina elektrizitate autoproduzitu dezakezu, baina guk, gehienez, erabiltzen duzun elektrizitatearen % 70 autoproduzitzea gomendatzen dizugu.", "GENERATION_FORM_PERCENT_ANNUAL_USE_URL_INFO":"https://es.support.somenergia.coop/article/591-existe-una-cantidad-minima-y-maxima-a-aportar", "GENERATION_FORM_REVIEW_DESC":"

Gutxi falta zaigu!

Berrikusi emandako datuak eta onartu lege-klausulak. Horrela, Generation kWh proiektuan izena emateko kontratua eta banku-ordainagiria igortzeko baimena sinatu ahalko dituzu.

", - "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOMOS ENERGÍA, SCCL. (F55091367), Pico de Peguera, 11, 17003 de Girona, soma energía@delegado -datos.com FINALIDAD: Gestionar y tramitar la contratación del servicio Generation kWh; gestionar la facturación de los consumos según la tarifa Generation kWh; tramitar la asignación de la tarifa Generation kWh a los terceros designados por el cliente. LEGITIMACIÓN: Relación contractual. CESIONES: No están previstas cesiones, excepto las legalmente previstas. CONSERVACIÓN: Hasta la vigencia del contrato de suministro y, durante los plazos exigidos por ley para atender eventuales responsabilidades. DERECHOS: Puede ejercer su derecho de acceso, rectificación, supresión, portabilidad, limitación y oposición dirigiéndose a los datos de la persona responsable. En caso de divergencias, puede presentar una reclamación ante el \"Agencia de Protección de Datos (www.aepd.es). IMPORTANTE: Declaro responsablemente que dispongo del consentimiento de las terceras personas a las que asignaré la tarifa Generation kWh, para ceder sus datos personales a SOMOS ENERGÍA necesarios para la asignación y contratación de la tarifa Generation kWh.", + "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOMOS ENERGÍA, SCCL. (F55091367), de Peguera, 11, 17003 de Girona, soma energía@delegado -datos.com FINALIDAD: Gestionar y tramitar la contratación del servicio Generation kWh; gestionar la facturación de los consumos según la tarifa Generation kWh; tramitar la asignación de la tarifa Generation kWh a los terceros designados por el cliente. LEGITIMACIÓN: Relación contractual. CESIONES: No están previstas cesiones, excepto las legalmente previstas. CONSERVACIÓN: Hasta la vigencia del contrato de suministro y, durante los plazos exigidos por ley para atender eventuales responsabilidades. DERECHOS: Puede ejercer su derecho de acceso, rectificación, supresión, portabilidad, limitación y oposición dirigiéndose a los datos de la persona responsable. En caso de divergencias, puede presentar una reclamación ante el \"Agencia de Protección de Datos (www.aepd.es). IMPORTANTE: Declaro responsablemente que dispongo del consentimiento de las terceras personas a las que asignaré la tarifa Generation kWh, para ceder sus datos personales a SOMOS ENERGÍA necesarios para la asignación y contratación de la tarifa Generation kWh.", "GENERATION_FORM_TERMS_RESPONSIBLE_STATEMENT":"Acepto la política de privacidad y la declaración responsable", "GENERATION_FORM_URL_PRIVACY_POLICY":"https://www.somenergia.coop/es/politica-de-privacidad/", "GENERATION_FORM_REVIEW_SECONDARY_TEXT":"

Gogoan izan kontratua sinatzean kontratuaren baldintzak onartzen dituzula eta, ondorioz, maileguaren zenbatekoa adierazi duzun banku-kontuan kobratzea onartzen duzula.

Dokumentuak sinatzen amaitzen duzunean, Generation kWh proiekturako mailegu-kontratuaren Baldintza orokorren eta Baldintza berezien kopia bana bidaliko dizugu posta elektronikoz.

Eskerrik asko eredu energetikoa aldatzen laguntzeagatik!

", @@ -670,5 +670,9 @@ "GENERATION_FORM_INFO_NOT_VALID_DATA_OF_PARTNER":"Uste baduzu zure bizilekuaren gaineko datuak ez direla zuzenak, bidali mezu bat generationkwh@somenergia.coop helbidera.", "GENERATION_FORM_HELP_CENTER_URL":"https://eu.support.somenergia.coop/category/580-generation-kwh", "GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED":"Ezin izan ditugu datuak balioztatu, mesedez jarri harremanetan generationkwh@somenergia.coop, esku bat eman diezazugun.", - "GENERATION_FORM_CONTRIBUTION_MEMBER_IDENTIFIER_DESC":"Kontuan hartu Generation kWh proiektuan parte hartzeko Kooperatibako bazkide izan behar duzula." + "GENERATION_FORM_CONTRIBUTION_MEMBER_IDENTIFIER_DESC":"Kontuan hartu Generation kWh proiektuan parte hartzeko Kooperatibako bazkide izan behar duzula.", + "GENERATION_CONTRIBUTION_NO_MEMBER_TO_MEMBER_FORM":"Sin embargo, si todavía quieres dar el paso de hacerte socio/socia, puedes hacerlo a través de este formulario.", + "GENERATION_CONTRIBUTION_MEMBER_FORM_URL":"https://www.somenergia.coop/es/hazte-socio-a/", + "GENERATION_ACTIONS_HELPER_MIN":"Akzio bat gutxienez", + "GENERATION_ANNUAL_USE_MIN":"Zero baino balio handiagoa izan behar du" } diff --git a/src/i18n/locale-gl.json b/src/i18n/locale-gl.json index a6aced42..643f0117 100644 --- a/src/i18n/locale-gl.json +++ b/src/i18n/locale-gl.json @@ -641,9 +641,9 @@ "GENERATION_INVESTMENTS_ASSIGNMENT_VALIDATION_SUCCESS":"A mudanza rexistrouse correctamente e será efectiva en 2 días hábiles.", "GENERATION_FORM_TITLE":"Formulario de participación para o Generation kWh", "GENERATION_FORM_ANNUAL_USE_TITLE":"Uso eléctrico anual", - "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Introduce a cantidade de electricidade que utilizas anualmente (p. ex., 2500).", + "GENERATION_FORM_ANNUAL_USE_INPUT_TITLE":"Introduce a cantidade de electricidade que utilizas anualmente.", "GENERATION_FORM_ANNUAL_USE_INPUT_LABEL":"Consumo anual en kWh", - "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"Por exemplo 2500", + "GENERATION_FORM_ANNUAL_USE_INPUT_HELP_TEXT":"*Por exemplo 2500", "GENERATION_FORM_ACTIONS_INPUT_TITLE":"Cantas accións enerxéticas quererías?*", "GENERATION_FORM_ACTIONS_INPUT_LABEL":"Accións enerxéticas", "GENERATION_FORM_ACTIONS_INPUT_HELP_TEXT":"Por exemplo, corresponden dúas accións: 200€", @@ -655,7 +655,7 @@ "GENERATION_FORM_PERCENT_ANNUAL_USE_INFO":"Podes autoproducir o que queiras, mais lembra que a nosa recomendación é facelo como máximo arredor do 70 % do uso eléctrico total.", "GENERATION_FORM_PERCENT_ANNUAL_USE_URL_INFO":"https://gl.support.somenergia.coop/article/606-existe-una-cantidad-minima-y-maxima-a-aportar-gl?utm_source=linkidiomes&utm_medium=cda&utm_campaign=galego", "GENERATION_FORM_REVIEW_DESC":"

Case rematamos!

Revisa os datos introducidos, acepta as cláusulas legais e poderás asinar o contrato e a autorización para xirar o recibo bancario da túa inscrición no Generation kWh.

", - "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOMOS ENERGÍA, SCCL. (F55091367), Pico de Peguera, 11, 17003 de Girona, soma energía@delegado -datos.com FINALIDAD: Gestionar y tramitar la contratación del servicio Generation kWh; gestionar la facturación de los consumos según la tarifa Generation kWh; tramitar la asignación de la tarifa Generation kWh a los terceros designados por el cliente. LEGITIMACIÓN: Relación contractual. CESIONES: No están previstas cesiones, excepto las legalmente previstas. CONSERVACIÓN: Hasta la vigencia del contrato de suministro y, durante los plazos exigidos por ley para atender eventuales responsabilidades. DERECHOS: Puede ejercer su derecho de acceso, rectificación, supresión, portabilidad, limitación y oposición dirigiéndose a los datos de la persona responsable. En caso de divergencias, puede presentar una reclamación ante el \"Agencia de Protección de Datos (www.aepd.es). IMPORTANTE: Declaro responsablemente que dispongo del consentimiento de las terceras personas a las que asignaré la tarifa Generation kWh, para ceder sus datos personales a SOMOS ENERGÍA necesarios para la asignación y contratación de la tarifa Generation kWh.", + "GENERATION_FORM_REVIEW_RESPONSIBLE_STATEMENT":"RESPONSABLE: SOMOS ENERGÍA, SCCL. (F55091367), Pic de Peguera, 11, 17003 de Girona, soma energía@delegado -datos.com FINALIDAD: Gestionar y tramitar la contratación del servicio Generation kWh; gestionar la facturación de los consumos según la tarifa Generation kWh; tramitar la asignación de la tarifa Generation kWh a los terceros designados por el cliente. LEGITIMACIÓN: Relación contractual. CESIONES: No están previstas cesiones, excepto las legalmente previstas. CONSERVACIÓN: Hasta la vigencia del contrato de suministro y, durante los plazos exigidos por ley para atender eventuales responsabilidades. DERECHOS: Puede ejercer su derecho de acceso, rectificación, supresión, portabilidad, limitación y oposición dirigiéndose a los datos de la persona responsable. En caso de divergencias, puede presentar una reclamación ante el \"Agencia de Protección de Datos (www.aepd.es). IMPORTANTE: Declaro responsablemente que dispongo del consentimiento de las terceras personas a las que asignaré la tarifa Generation kWh, para ceder sus datos personales a SOMOS ENERGÍA necesarios para la asignación y contratación de la tarifa Generation kWh.", "GENERATION_FORM_TERMS_RESPONSIBLE_STATEMENT":"Acepto a política de privacidad e a declaración responsable", "GENERATION_FORM_URL_PRIVACY_POLICY":"https://www.somenergia.coop/es/politica-de-privacidad/", "GENERATION_FORM_REVIEW_SECONDARY_TEXT":"

Ten en conta que a sinatura do contrato implica a aceptación das condicións contractuais e, polo tanto, o cargo do importe do préstamo na conta bancaria que indicaches.

Cando finalices a sinatura dos documentos, enviarémosche por correo electrónico as Condicións xerais e as Condicións particulares do teu contrato de préstamo para o Generation kWh, para que teñas unha copia.

Moitas grazas polo teu apoio ao cambio de modelo enerxético!

", @@ -664,5 +664,9 @@ "GENERATION_FORM_INFO_NOT_VALID_DATA_OF_PARTNER":"Se cres que temos mal os teus datos de residencia, escríbenos a generationkwh@somenergia.coop", "GENERATION_FORM_HELP_CENTER_URL":"https://es.support.somenergia.coop/category/580-generation-kwh", "GENERATION_FORM_DATA_COULD_NOT_BE_VALIDATED":"No hemos podido validar los datos, ponte en contacto con generationkwh@somenergia.coop para que podamos echarte una mano", - "GENERATION_FORM_CONTRIBUTION_MEMBER_IDENTIFIER_DESC":"Ten en conta que para poder participar no Generation kWh é preciso que sexas socio ou socia da cooperativa." + "GENERATION_FORM_CONTRIBUTION_MEMBER_IDENTIFIER_DESC":"Ten en conta que para poder participar no Generation kWh é preciso que sexas socio ou socia da cooperativa.", + "GENERATION_CONTRIBUTION_NO_MEMBER_TO_MEMBER_FORM":"Sin embargo, si todavía quieres dar el paso de hacerte socio/socia, puedes hacerlo a través de este formulario.", + "GENERATION_CONTRIBUTION_MEMBER_FORM_URL":"https://www.somenergia.coop/es/hazte-socio-a/", + "GENERATION_ACTIONS_HELPER_MIN":"Un mínimo dunha acción", + "GENERATION_ANNUAL_USE_MIN":"Debe ser un valor maior que cero" } diff --git a/src/services/api.js b/src/services/api.js index 8ba0b086..f325766f 100644 --- a/src/services/api.js +++ b/src/services/api.js @@ -414,12 +414,21 @@ export const generationChangeContractPriority = async (data, token) => { }) } -export const checkIsFromGenerationEnabledZone = async (data, token) => { +export const checkIsFromGenerationEnabledZone = async (data) => { const {memberNumber,memberVat} = data return axios({ method: 'GET', - url: `${API_BASE_URL}/data/generationkwh/can_join/${memberNumber}/${memberVat}`, - headers: { Authorization: token } + url: `${API_BASE_URL}/data/generationkwh/can_join/${memberNumber}/${memberVat}` + }).then((response) => { + return response?.data + }) +} + +export const checkIsPostalCodeFromGenerationEnabledZone = async (data) => { + const {postalCode} = data + return axios({ + method: 'GET', + url: `${API_BASE_URL}/data/generationkwh/can_join/${postalCode}` }).then((response) => { return response?.data })