Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
CiviCRM Core
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container registry
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Development
CiviCRM Core
Commits
1283a565
Commit
1283a565
authored
11 years ago
by
eileen
Browse files
Options
Downloads
Patches
Plain Diff
CRM-13148 partial move of js functions out of the tpl into the js file
parent
111f65f4
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
CRM/Batch/Form/Entry.php
+1
-0
1 addition, 0 deletions
CRM/Batch/Form/Entry.php
templates/CRM/Batch/Form/Entry.js
+222
-0
222 additions, 0 deletions
templates/CRM/Batch/Form/Entry.js
templates/CRM/Batch/Form/Entry.tpl
+0
-221
0 additions, 221 deletions
templates/CRM/Batch/Form/Entry.tpl
with
223 additions
and
221 deletions
CRM/Batch/Form/Entry.php
+
1
−
0
View file @
1283a565
...
...
@@ -107,6 +107,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form {
$this
->
_profileId
=
CRM_Batch_BAO_Batch
::
getProfileId
(
$this
->
_batchInfo
[
'type_id'
]);
}
CRM_Core_Resources
::
singleton
()
->
addScriptFile
(
'civicrm'
,
'templates/CRM/Batch/Form/Entry.js'
)
->
addSetting
(
array
(
'batch'
=>
array
(
'type_id'
=>
$this
->
_batchInfo
[
'type_id'
])))
->
addSetting
(
array
(
'setting'
=>
array
(
'monetaryThousandSeparator'
=>
CRM_Core_Config
::
singleton
()
->
monetaryThousandSeparator
)))
->
addSetting
(
array
(
'setting'
=>
array
(
'monetaryDecimalPoint'
=>
CRM_Core_Config
::
singleton
()
->
monetaryDecimalPoint
)));
...
...
This diff is collapsed.
Click to expand it.
templates/CRM/Batch/Form/Entry.js
+
222
−
0
View file @
1283a565
//@todo functions partially moved from tpl but still need an enclosure etc
function
setPaymentBlock
(
form
,
memType
)
{
var
rowID
=
form
.
closest
(
'
div.crm-grid-row
'
).
attr
(
'
entity_id
'
);
var
dataUrl
=
CRM
.
url
(
'
civicrm/ajax/memType
'
);
if
(
!
memType
)
{
memType
=
cj
(
'
select[id="field_
'
+
rowID
+
'
_membership_type_1"]
'
).
val
();
}
cj
.
post
(
dataUrl
,
{
mtype
:
memType
},
function
(
data
)
{
cj
(
'
#field_
'
+
rowID
+
'
_financial_type
'
).
val
(
data
.
financial_type_id
);
cj
(
'
#field_
'
+
rowID
+
'
_total_amount
'
).
val
(
data
.
total_amount
).
change
();
},
'
json
'
);
}
function
hideSendReceipt
()
{
cj
(
'
input[id*="][send_receipt]"]
'
).
each
(
function
()
{
showHideReceipt
(
cj
(
this
));
});
}
function
showHideReceipt
(
elem
)
{
var
rowID
=
elem
.
closest
(
'
div.crm-grid-row
'
).
attr
(
'
entity_id
'
);
if
(
elem
.
prop
(
'
checked
'
))
{
cj
(
'
.crm-batch-receipt_date-
'
+
rowID
).
hide
();
}
else
{
cj
(
'
.crm-batch-receipt_date-
'
+
rowID
).
show
();
}
}
function
validateRow
()
{
cj
(
'
.selector-rows
'
).
each
(
function
()
{
checkColumns
(
cj
(
this
));
});
}
function
checkColumns
(
parentRow
)
{
// show valid row icon if all required data is field
var
validRow
=
0
;
var
inValidRow
=
0
;
var
errorExists
=
false
;
var
rowID
=
parentRow
.
closest
(
'
div.crm-grid-row
'
).
attr
(
'
entity_id
'
);
parentRow
.
find
(
'
div .required
'
).
each
(
function
()
{
//special case to handle contact autocomplete select
var
fieldId
=
cj
(
this
).
attr
(
'
id
'
);
if
(
fieldId
.
substring
(
0
,
16
)
==
'
primary_contact_
'
)
{
// if display value is set then make sure we also check if contact id is set
if
(
!
cj
(
this
).
val
())
{
inValidRow
++
;
}
else
{
if
(
cj
(
this
).
val
()
&&
!
cj
(
'
input[name="primary_contact_select_id[
'
+
rowID
+
'
]"]
'
).
val
())
{
inValidRow
++
;
errorExists
=
true
;
}
}
}
else
{
if
(
!
cj
(
this
).
val
())
{
inValidRow
++
;
}
else
{
if
(
cj
(
this
).
hasClass
(
'
error
'
)
&&
!
cj
(
this
).
hasClass
(
'
valid
'
))
{
errorExists
=
true
;
}
else
{
validRow
++
;
}
}
}
});
// this means user has entered some data
if
(
errorExists
)
{
parentRow
.
find
(
"
div:first span
"
).
prop
(
'
class
'
,
'
batch-invalid
'
);
}
else
{
if
(
inValidRow
==
0
&&
validRow
>
0
)
{
parentRow
.
find
(
"
div:first span
"
).
prop
(
'
class
'
,
'
batch-valid
'
);
}
else
{
parentRow
.
find
(
"
div:first span
"
).
prop
(
'
class
'
,
'
batch-edit
'
);
}
}
}
function
calculateActualTotal
()
{
var
total
=
0
;
cj
(
'
input[id*="_total_amount"]
'
).
each
(
function
()
{
if
(
cj
(
this
).
val
())
{
total
+=
parseFloat
(
cj
(
this
).
val
());
}
});
cj
(
'
.batch-actual-total
'
).
html
(
formatMoney
(
total
));
}
//money formatting/localization
function
formatMoney
(
amount
)
{
var
c
=
2
;
var
t
=
CRM
.
setting
.
monetaryThousandSeparator
;
var
d
=
CRM
.
setting
.
monetaryDecimalPoint
;
var
n
=
amount
,
c
=
isNaN
(
c
=
Math
.
abs
(
c
))
?
2
:
c
,
d
=
d
==
undefined
?
"
,
"
:
d
,
t
=
t
==
undefined
?
"
.
"
:
t
,
s
=
n
<
0
?
"
-
"
:
""
,
i
=
parseInt
(
n
=
Math
.
abs
(
+
n
||
0
).
toFixed
(
c
))
+
""
,
j
=
(
j
=
i
.
length
)
>
3
?
j
%
3
:
0
;
return
s
+
(
j
?
i
.
substr
(
0
,
j
)
+
t
:
""
)
+
i
.
substr
(
j
).
replace
(
/
(\d{3})(?=\d)
/g
,
"
$1
"
+
t
)
+
(
c
?
d
+
Math
.
abs
(
n
-
i
).
toFixed
(
c
).
slice
(
2
)
:
""
);
}
/**
* This function is use to setdefault elements via ajax
*
* @param fname string field name
* @return void
*/
function
setFieldValue
(
fname
,
fieldValue
,
blockNo
)
{
var
elementId
=
cj
(
'
[name="field[
'
+
blockNo
+
'
][
'
+
fname
+
'
]"]
'
);
if
(
elementId
.
length
==
0
)
{
elementId
=
cj
(
'
input[type=checkbox][name^="field[
'
+
blockNo
+
'
][
'
+
fname
+
'
]"][type!=hidden]
'
);
}
// if element not found than return
if
(
elementId
.
length
==
0
)
{
return
;
}
//check if it is date element
var
isDateElement
=
elementId
.
attr
(
'
format
'
);
// check if it is wysiwyg element
var
editor
=
elementId
.
attr
(
'
editor
'
);
//get the element type
var
elementType
=
elementId
.
attr
(
'
type
'
);
// set the value for all the elements, elements needs to be handled are
// select, checkbox, radio, date fields, text, textarea, multi-select
// wysiwyg editor, advanced multi-select ( to do )
if
(
elementType
==
'
radio
'
)
{
if
(
fieldValue
)
{
elementId
.
filter
(
"
[value=
"
+
fieldValue
+
"
]
"
).
prop
(
"
checked
"
,
true
);
}
else
{
elementId
.
removeProp
(
'
checked
'
);
}
}
else
{
if
(
elementType
==
'
checkbox
'
)
{
// handle checkbox
elementId
.
removeProp
(
'
checked
'
);
if
(
fieldValue
)
{
cj
.
each
(
fieldValue
,
function
(
key
,
value
)
{
cj
(
'
input[name="field[
'
+
blockNo
+
'
][
'
+
fname
+
'
][
'
+
value
+
'
]"]
'
).
prop
(
'
checked
'
,
true
);
});
}
}
else
{
if
(
editor
)
{
switch
(
editor
)
{
case
'
ckeditor
'
:
var
elemtId
=
elementId
.
attr
(
'
id
'
);
oEditor
=
CKEDITOR
.
instances
[
elemtId
];
oEditor
.
setData
(
htmlContent
);
break
;
case
'
tinymce
'
:
var
elemtId
=
element
.
attr
(
'
id
'
);
tinyMCE
.
get
(
elemtId
).
setContent
(
htmlContent
);
break
;
case
'
joomlaeditor
'
:
// TO DO
case
'
drupalwysiwyg
'
:
// TO DO
default
:
elementId
.
val
(
fieldValue
);
}
}
else
{
elementId
.
val
(
fieldValue
);
}
}
}
// since we use different display field for date we also need to set it.
// also check for date time field and set the value correctly
if
(
isDateElement
&&
fieldValue
)
{
setDateFieldValue
(
fname
,
fieldValue
,
blockNo
)
}
}
function
setDateFieldValue
(
fname
,
fieldValue
,
blockNo
)
{
var
dateValues
=
fieldValue
.
split
(
'
'
);
var
actualDateElement
=
cj
(
'
#field_
'
+
blockNo
+
'
_
'
+
fname
);
var
date_format
=
actualDateElement
.
attr
(
'
format
'
);
var
altDateFormat
=
'
yy-mm-dd
'
;
var
actualDateValue
=
cj
.
datepicker
.
parseDate
(
altDateFormat
,
dateValues
[
0
]);
// format date according to display field
var
hiddenDateValue
=
cj
.
datepicker
.
formatDate
(
'
mm/dd/yy
'
,
actualDateValue
);
actualDateElement
.
val
(
hiddenDateValue
);
var
displayDateValue
=
actualDateElement
.
val
();
if
(
date_format
!=
'
mm/dd/yy
'
)
{
displayDateValue
=
cj
.
datepicker
.
formatDate
(
date_format
,
actualDateValue
);
}
cj
(
'
#field_
'
+
blockNo
+
'
_
'
+
fname
+
'
_display
'
).
val
(
displayDateValue
);
// need to fix time formatting
if
(
dateValues
[
1
])
{
cj
(
'
#field_
'
+
blockNo
+
'
_
'
+
fname
+
'
_time
'
).
val
(
dateValues
[
1
].
substr
(
0
,
5
));
}
}
This diff is collapsed.
Click to expand it.
templates/CRM/Batch/Form/Entry.tpl
+
0
−
221
View file @
1283a565
...
...
@@ -169,119 +169,6 @@ cj(function () {
});
function
setPaymentBlock
(
form
,
memType
)
{
var
rowID
=
form
.
closest
(
'
div.crm-grid-row
'
).
attr
(
'
entity_id
'
);
var
dataUrl
=
CRM
.
url
(
'
civicrm/ajax/memType
'
);
if
(
!
memType
)
{
memType
=
cj
(
'
select[id="field_
'
+
rowID
+
'
_membership_type_1"]
'
).
val
();
}
cj
.
post
(
dataUrl
,
{
mtype
:
memType
}
,
function
(
data
)
{
cj
(
'
#field_
'
+
rowID
+
'
_financial_type
'
).
val
(
data
.
financial_type_id
);
cj
(
'
#field_
'
+
rowID
+
'
_total_amount
'
).
val
(
data
.
total_amount
).
change
();
},
'
json
'
);
}
function
hideSendReceipt
()
{
cj
(
'
input[id*="][send_receipt]"]
'
).
each
(
function
()
{
showHideReceipt
(
cj
(
this
));
});
}
function
showHideReceipt
(
elem
)
{
var
rowID
=
elem
.
closest
(
'
div.crm-grid-row
'
).
attr
(
'
entity_id
'
);
if
(
elem
.
prop
(
'
checked
'
))
{
cj
(
'
.crm-batch-receipt_date-
'
+
rowID
).
hide
();
}
else
{
cj
(
'
.crm-batch-receipt_date-
'
+
rowID
).
show
();
}
}
function
validateRow
()
{
cj
(
'
.selector-rows
'
).
each
(
function
()
{
checkColumns
(
cj
(
this
));
});
}
function
checkColumns
(
parentRow
)
{
// show valid row icon if all required data is field
var
validRow
=
0
;
var
inValidRow
=
0
;
var
errorExists
=
false
;
var
rowID
=
parentRow
.
closest
(
'
div.crm-grid-row
'
).
attr
(
'
entity_id
'
);
parentRow
.
find
(
'
div .required
'
).
each
(
function
()
{
//special case to handle contact autocomplete select
var
fieldId
=
cj
(
this
).
attr
(
'
id
'
);
if
(
fieldId
.
substring
(
0
,
16
)
==
'
primary_contact_
'
)
{
// if display value is set then make sure we also check if contact id is set
if
(
!
cj
(
this
).
val
())
{
inValidRow
++
;
}
else
{
if
(
cj
(
this
).
val
()
&&
!
cj
(
'
input[name="primary_contact_select_id[
'
+
rowID
+
'
]"]
'
).
val
())
{
inValidRow
++
;
errorExists
=
true
;
}
}
}
else
{
if
(
!
cj
(
this
).
val
())
{
inValidRow
++
;
}
else
{
if
(
cj
(
this
).
hasClass
(
'
error
'
)
&&
!
cj
(
this
).
hasClass
(
'
valid
'
))
{
errorExists
=
true
;
}
else
{
validRow
++
;
}
}
}
});
// this means user has entered some data
if
(
errorExists
)
{
parentRow
.
find
(
"
div:first span
"
).
prop
(
'
class
'
,
'
batch-invalid
'
);
}
else
{
if
(
inValidRow
==
0
&&
validRow
>
0
)
{
parentRow
.
find
(
"
div:first span
"
).
prop
(
'
class
'
,
'
batch-valid
'
);
}
else
{
parentRow
.
find
(
"
div:first span
"
).
prop
(
'
class
'
,
'
batch-edit
'
);
}
}
}
function
calculateActualTotal
()
{
var
total
=
0
;
cj
(
'
input[id*="_total_amount"]
'
).
each
(
function
()
{
if
(
cj
(
this
).
val
())
{
total
+=
parseFloat
(
cj
(
this
).
val
());
}
});
cj
(
'
.batch-actual-total
'
).
html
(
formatMoney
(
total
));
}
//money formatting/localization
function
formatMoney
(
amount
)
{
var
c
=
2
;
var
t
=
CRM
.
setting
.
monetaryThousandSeparator
;
var
d
=
CRM
.
setting
.
monetaryDecimalPoint
;
var
n
=
amount
,
c
=
isNaN
(
c
=
Math
.
abs
(
c
))
?
2
:
c
,
d
=
d
==
undefined
?
"
,
"
:
d
,
t
=
t
==
undefined
?
"
.
"
:
t
,
s
=
n
<
0
?
"
-
"
:
""
,
i
=
parseInt
(
n
=
Math
.
abs
(
+
n
||
0
).
toFixed
(
c
))
+
""
,
j
=
(
j
=
i
.
length
)
>
3
?
j
%
3
:
0
;
return
s
+
(
j
?
i
.
substr
(
0
,
j
)
+
t
:
""
)
+
i
.
substr
(
j
).
replace
(
/
(\d
{
3
}
)(?=\d)
/g
,
"
$1
"
+
t
)
+
(
c
?
d
+
Math
.
abs
(
n
-
i
).
toFixed
(
c
).
slice
(
2
)
:
""
);
}
function
updateContactInfo
(
blockNo
,
prefix
)
{
var
contactHiddenElement
=
'
input[name="
'
+
prefix
+
'
contact_select_id[
'
+
blockNo
+
'
]"]
'
;
...
...
@@ -352,114 +239,6 @@ function updateContactInfo(blockNo, prefix) {
});
}
/**
* This function is use to setdefault elements via ajax
*
* @param fname string field name
* @return void
*/
function
setFieldValue
(
fname
,
fieldValue
,
blockNo
)
{
var
elementId
=
cj
(
'
[name="field[
'
+
blockNo
+
'
][
'
+
fname
+
'
]"]
'
);
if
(
elementId
.
length
==
0
)
{
elementId
=
cj
(
'
input[type=checkbox][name^="field[
'
+
blockNo
+
'
][
'
+
fname
+
'
]"][type!=hidden]
'
);
}
// if element not found than return
if
(
elementId
.
length
==
0
)
{
return
;
}
//check if it is date element
var
isDateElement
=
elementId
.
attr
(
'
format
'
);
// check if it is wysiwyg element
var
editor
=
elementId
.
attr
(
'
editor
'
);
//get the element type
var
elementType
=
elementId
.
attr
(
'
type
'
);
// set the value for all the elements, elements needs to be handled are
// select, checkbox, radio, date fields, text, textarea, multi-select
// wysiwyg editor, advanced multi-select ( to do )
if
(
elementType
==
'
radio
'
)
{
if
(
fieldValue
)
{
elementId
.
filter
(
"
[value=
"
+
fieldValue
+
"
]
"
).
prop
(
"
checked
"
,
true
);
}
else
{
elementId
.
removeProp
(
'
checked
'
);
}
}
else
{
if
(
elementType
==
'
checkbox
'
)
{
// handle checkbox
elementId
.
removeProp
(
'
checked
'
);
if
(
fieldValue
)
{
cj
.
each
(
fieldValue
,
function
(
key
,
value
)
{
cj
(
'
input[name="field[
'
+
blockNo
+
'
][
'
+
fname
+
'
][
'
+
value
+
'
]"]
'
).
prop
(
'
checked
'
,
true
);
});
}
}
else
{
if
(
editor
)
{
switch
(
editor
)
{
case
'
ckeditor
'
:
var
elemtId
=
elementId
.
attr
(
'
id
'
);
oEditor
=
CKEDITOR
.
instances
[
elemtId
];
oEditor
.
setData
(
htmlContent
);
break
;
case
'
tinymce
'
:
var
elemtId
=
element
.
attr
(
'
id
'
);
tinyMCE
.
get
(
elemtId
).
setContent
(
htmlContent
);
break
;
case
'
joomlaeditor
'
:
// TO DO
case
'
drupalwysiwyg
'
:
// TO DO
default
:
elementId
.
val
(
fieldValue
);
}
}
else
{
elementId
.
val
(
fieldValue
);
}
}
}
// since we use different display field for date we also need to set it.
// also check for date time field and set the value correctly
if
(
isDateElement
&&
fieldValue
)
{
setDateFieldValue
(
fname
,
fieldValue
,
blockNo
)
}
}
function
setDateFieldValue
(
fname
,
fieldValue
,
blockNo
)
{
var
dateValues
=
fieldValue
.
split
(
'
'
);
var
actualDateElement
=
cj
(
'
#field_
'
+
blockNo
+
'
_
'
+
fname
);
var
date_format
=
actualDateElement
.
attr
(
'
format
'
);
var
altDateFormat
=
'
yy-mm-dd
'
;
var
actualDateValue
=
cj
.
datepicker
.
parseDate
(
altDateFormat
,
dateValues
[
0
]);
// format date according to display field
var
hiddenDateValue
=
cj
.
datepicker
.
formatDate
(
'
mm/dd/yy
'
,
actualDateValue
);
actualDateElement
.
val
(
hiddenDateValue
);
var
displayDateValue
=
actualDateElement
.
val
();
if
(
date_format
!=
'
mm/dd/yy
'
)
{
displayDateValue
=
cj
.
datepicker
.
formatDate
(
date_format
,
actualDateValue
);
}
cj
(
'
#field_
'
+
blockNo
+
'
_
'
+
fname
+
'
_display
'
).
val
(
displayDateValue
);
// need to fix time formatting
if
(
dateValues
[
1
])
{
cj
(
'
#field_
'
+
blockNo
+
'
_
'
+
fname
+
'
_time
'
).
val
(
dateValues
[
1
].
substr
(
0
,
5
));
}
}
</script>
{/
literal
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment