@ -0,0 +1,20 @@ |
|||
Odoo Games - Sudoku v10 |
|||
======================= |
|||
The classic Sudoku game involves a grid of 81 squares. The grid is divided into nine blocks, |
|||
each containing nine squares. |
|||
The rules of the game are simple: |
|||
Each of the nine blocks has to contain all the numbers 1-9 within its squares. Each number can |
|||
only appear once in a row, column or box. |
|||
You can select the squares by clicking. Enter the numbers. |
|||
|
|||
Space button is use to erase the entry. |
|||
|
|||
Features |
|||
======== |
|||
|
|||
* We can play SUDOKU Game. |
|||
* Play only By the approval of HR Manager. |
|||
|
|||
Credits |
|||
======= |
|||
Nikhil Krishnan @ cybrosys, nikhil@cybrosys.in |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Nikhil krishnan(<https://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
import models |
@ -0,0 +1,52 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Nikhil krishnan(<https://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
{ |
|||
'name': 'Odoo Games - Sudoku', |
|||
'version': '10.0.1.0.0', |
|||
'summary': """Sudoku Game.""", |
|||
'description': """We can play SUDOKU.""", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'category': '', |
|||
'depends': ['base', 'hr'], |
|||
'license': 'LGPL-3', |
|||
'data': [ |
|||
'security/security_data.xml', |
|||
'security/ir.model.access.csv', |
|||
'views/game_approve_sequence.xml', |
|||
'views/game_template.xml', |
|||
'views/main_menu.xml', |
|||
'views/sudoku_menu.xml', |
|||
], |
|||
'demo': [], |
|||
'qweb': [ |
|||
"static/src/xml/sudoku.xml", |
|||
"static/src/xml/game.xml", |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,26 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Nikhil krishnan(<https://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
import game |
|||
|
@ -0,0 +1,81 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Nikhil krishnan(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from datetime import datetime |
|||
from odoo import models, fields, api |
|||
|
|||
|
|||
class EntertainmentGames(models.Model): |
|||
_name = 'employee.game.approve' |
|||
_inherit = ['ir.needaction_mixin'] |
|||
_order = 'sequence desc' |
|||
|
|||
name = fields.Char(string='Name', related='employee_id.name') |
|||
approve_datetime = fields.Datetime(string='Datetime', readonly=1) |
|||
employee_id = fields.Many2one('hr.employee', string='Employee', required=True) |
|||
user_id = fields.Many2one('res.users', string='User') |
|||
department_id = fields.Many2one('hr.department', string='Department', related='employee_id.department_id') |
|||
game_user = fields.Boolean(string='Is Game User') |
|||
state = fields.Selection([ |
|||
('draft', 'Requested'), |
|||
('approve', 'Approved'), |
|||
('cancel', 'Cancelled'), |
|||
], string='Status', readonly=True, copy=False, default='draft') |
|||
sequence = fields.Integer('Sequence') |
|||
|
|||
@api.model |
|||
def _needaction_domain_get(self): |
|||
return [('state', '=', 'draft')] |
|||
|
|||
def create_employee_game_approve(self, empl_id, user): |
|||
rec = self.search([('employee_id', '=', empl_id)]) |
|||
if rec: |
|||
seq = self.env['ir.sequence'].next_by_code('employee.game') |
|||
rec.write({'sequence': seq, 'state': 'draft', 'approve_datetime': datetime.now()}) |
|||
else: |
|||
vals = { |
|||
'employee_id': empl_id, |
|||
'user_id': user, |
|||
'approve_datetime': datetime.now(), |
|||
'sequence': self.env['ir.sequence'].next_by_code('employee.game') |
|||
} |
|||
self.create(vals) |
|||
|
|||
def approve(self): |
|||
group_game_approve = self.env.ref('game_sudoku.odoo_gamer_group', False) |
|||
group_game_approve.write({'users': [(4, self.user_id.id)]}) |
|||
|
|||
group_game_req = self.env.ref('game_sudoku.odoo_gamer_approve_req', False) |
|||
group_game_req.write({'users': [(3, self.user_id.id)]}) |
|||
|
|||
return self.write({'game_user': True, 'state': 'approve'}) |
|||
|
|||
def cancel(self): |
|||
group_game_approve = self.env.ref('game_sudoku.odoo_gamer_group', False) |
|||
group_game_approve.write({'users': [(3, self.user_id.id)]}) |
|||
|
|||
group_game_req = self.env.ref('game_sudoku.odoo_gamer_approve_req', False) |
|||
group_game_req.write({'users': [(4, self.user_id.id)]}) |
|||
|
|||
return self.write({'game_user': False, 'state': 'cancel'}) |
|
@ -0,0 +1,26 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
<record model="ir.module.category" id="module_category_game"> |
|||
<field name="name">Game</field> |
|||
<field name="sequence">10</field> |
|||
<field name="visible" eval="False" /> |
|||
</record> |
|||
|
|||
<record id="odoo_gamer_group" model="res.groups"> |
|||
<field name="name">Odoo Gamer</field> |
|||
<field name="category_id" ref="game_sudoku.module_category_game"/> |
|||
</record> |
|||
|
|||
<record id="odoo_gamer_approve_req" model="res.groups"> |
|||
<field name="name">Odoo Game Request</field> |
|||
<field name="category_id" ref="game_sudoku.module_category_game"/> |
|||
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> |
|||
<field name="users" eval="[(4, ref('base.user_root'))]"/> |
|||
</record> |
|||
|
|||
<record id="base.default_user" model="res.users"> |
|||
<field name="groups_id" eval="[(4,ref('game_sudoku.odoo_gamer_approve_req')),(4,ref('base.group_partner_manager'))]"/> |
|||
</record> |
|||
</data> |
|||
</odoo> |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 130 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 13 KiB |
@ -0,0 +1,192 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Odoo Games - Sudoku</h2> |
|||
<h3 class="oe_slogan">Brain-Teaser game.!!</h3> |
|||
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4> |
|||
<div> |
|||
<h4><p>Features:</p></h4> |
|||
<ul> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> We can play SUDOKU.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Play only By the approval of HR Manager.</li> |
|||
|
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">How to start the game.?</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="May i play.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class="oe_mt32"> |
|||
To start playing the game, user should click the button (<i class="fa fa-gamepad" style="color: #f9f9f9;background: #a3498b;"/>) |
|||
for send a request. |
|||
</p> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class="oe_mt32"> |
|||
Wait for the approval of HR manager. |
|||
</p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="Just wait for approval.png"> |
|||
</div> |
|||
<p class="oe_mt32"> |
|||
A record is generated. And from the record the HR manager can give approval to play the game. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan"> Admin, please check with the user form to enable the option " Odoo Game Request".</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="user group.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
Admin can directly give the permission to play the game. Just enable "Odoo Gamer" |
|||
<p>Ps:- if we directly give permission to play game, don't forget to remove Odoo Game Request"</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Approve the game request by HR Manager</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="Game Request.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<p class="oe_mt32"> |
|||
HR managers can see this request from the menu "Game Request" under Game. |
|||
</p> |
|||
<p class="oe_mt32"> |
|||
We can see 2 buttons here. |
|||
<p> |
|||
1.This icon( <i class="fa fa-check" aria-hidden="true"></i>) for approve the request |
|||
</p> |
|||
<p> |
|||
2. This icon (<i class="fa fa-times" aria-hidden="true"></i>) for avoid/cancel the request |
|||
</p> |
|||
</p> |
|||
<p class="oe_mt32"> |
|||
We can easily identify the states of the request by color. |
|||
|
|||
<ul> |
|||
<li>Red is in draft state.</li> |
|||
</ul> |
|||
<ul> |
|||
<li>Green is in approve state.</li> |
|||
</ul> |
|||
<ul> |
|||
<li>Grey is in cancel state.</li> |
|||
</ul> |
|||
</p> |
|||
</div> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="color code.png"> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">SUDOKU</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
Click on the "New Game" button to start the game. |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="Sudoku.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
Select your level of game. |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="Level.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
Let's play..!! |
|||
<p> |
|||
The classic Sudoku game involves a grid of 81 squares. |
|||
The grid is divided into nine blocks, each containing nine squares. |
|||
<p><b>The rules of the game are simple: </b></p> |
|||
<i>each of the nine blocks should contain all the numbers 1-9 within its squares. |
|||
Each number can appear only once in a row, column or box.</i> |
|||
</p> |
|||
<p><b>You can select the squares by clicking. Read the numbers from key boards.</b></p> |
|||
<p><b>Space button can be used to erase the entry.</b></p> |
|||
</div> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="sudoku 1.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">WON the game</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="won.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
<div> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 68 KiB |
@ -0,0 +1,283 @@ |
|||
|
|||
.o_entertainment_games_req_footer{ |
|||
display:none; |
|||
} |
|||
.sudokupage |
|||
{ |
|||
height: 650px; |
|||
width:100%; |
|||
background-color: #CDD5F4; |
|||
} |
|||
.sudokupage1 |
|||
{ |
|||
height: auto; |
|||
width:25%; |
|||
float: left; |
|||
margin-top: 250px; |
|||
} |
|||
.sudokupage2 |
|||
{ |
|||
height: 650px; |
|||
width:55%; |
|||
float: left; |
|||
background-color: #CDD5F4; |
|||
} |
|||
.sudokupage2 h3 |
|||
{ |
|||
color: red; |
|||
font-size: 28px; |
|||
} |
|||
.sudokupage2 h4 |
|||
{ |
|||
color: red; |
|||
font-size: 20px; |
|||
} |
|||
.sudokupage3 |
|||
{ |
|||
height: auto; |
|||
width:20%; |
|||
float:right; |
|||
background-color: #CDD5F4; |
|||
} |
|||
|
|||
.sudokunewbutton { |
|||
border-radius: 4px; |
|||
background-color: #4CAF50; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
|
|||
.sudokulevelbutton { |
|||
border-radius: 3px; |
|||
background-color: #4CAF50; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
.sudokulevelbuttonreset { |
|||
border-radius: 3px; |
|||
display: none; |
|||
background-color: #4CAF50; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
.sudokulevelbuttoncheck { |
|||
border-radius: 3px; |
|||
display: none; |
|||
background-color: #4CAF50; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
.sudokulevelbuttoncheckback { |
|||
border-radius: 3px; |
|||
display: none; |
|||
background-color: #4CAF50; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
.sudokulevelbuttonsolve { |
|||
border-radius: 3px; |
|||
display: none; |
|||
background-color: #4CAF50; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
.sudokulevelbutton1 { |
|||
border-radius: 3px; |
|||
background-color: #00b3b3; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
.sudokulevelbutton2 { |
|||
border-radius: 3px; |
|||
background-color: #00b3b3; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
.sudokulevelbutton3 { |
|||
border-radius: 3px; |
|||
background-color: #00b3b3; |
|||
border: none; |
|||
color: #FFFFFF; |
|||
text-align: center; |
|||
font-size: 22px; |
|||
padding: 15px; |
|||
width: 170px; |
|||
height:55px; |
|||
transition: all 0.5s; |
|||
cursor: pointer; |
|||
margin: 5px; |
|||
} |
|||
|
|||
.sudokulevelselection { |
|||
display: none; |
|||
position: fixed; |
|||
z-index: 1; |
|||
padding-top: 100px; |
|||
left: 0; |
|||
top: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
overflow: auto; /* Enable scroll if needed */ |
|||
background-color: rgb(0,0,0); /* Fallback color */ |
|||
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ |
|||
} |
|||
|
|||
|
|||
.sudokulevelselection-content { |
|||
position: relative; |
|||
background-color: #fefefe; |
|||
margin: auto; |
|||
padding: 0; |
|||
border: 1px solid #888; |
|||
width: 80%; |
|||
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); |
|||
-webkit-animation-name: animatetop; |
|||
-webkit-animation-duration: 0.4s; |
|||
animation-name: animatetop; |
|||
animation-duration: 0.4s |
|||
} |
|||
|
|||
@-webkit-keyframes animatetop { |
|||
from {top:-300px; opacity:0} |
|||
to {top:0; opacity:1} |
|||
} |
|||
|
|||
@keyframes animatetop { |
|||
from {top:-300px; opacity:0} |
|||
to {top:0; opacity:1} |
|||
} |
|||
|
|||
|
|||
.sudokulevelselectionclose { |
|||
color: white; |
|||
float: right; |
|||
font-size: 28px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.sudokulevelselection:hover, |
|||
.sudokulevelselection:focus { |
|||
color: #000; |
|||
text-decoration: none; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.sudokulevelselection-header { |
|||
padding: 2px 16px; |
|||
background-color: #5cb85c; |
|||
color: white; |
|||
} |
|||
|
|||
.sudokulevelselection-body {padding: 2px 16px;} |
|||
|
|||
.sudokulevelselection-footer { |
|||
padding: 2px 16px; |
|||
background-color: #5cb85c; |
|||
color: white; |
|||
} |
|||
|
|||
table.sudoright td {width: 50px; height:80px; |
|||
font-weight: bold; |
|||
text-align: center |
|||
} |
|||
table.sudoright { |
|||
margin-top: 120px; |
|||
} |
|||
table.sudoku td {width: 55px; height:55px; |
|||
border-width: 1px; |
|||
border-style: solid; |
|||
border-color: black; |
|||
font-weight: bold; |
|||
text-align: center |
|||
} |
|||
table.sudoku { |
|||
border-width: 3px; |
|||
border-style: solid; |
|||
border-color:black; |
|||
} |
|||
table.sudoku td[id^=cell_0] {border-bottom-width: 3px;border-bottom-style: double;} |
|||
table.sudoku td[id^=cell_1] {border-bottom-width: 3px;border-bottom-style: double;} |
|||
table.sudoku td[id^=cell_2] {border-bottom-width: 3px} |
|||
table.sudoku td[id^=cell_3] {border-bottom-width: 3px;border-bottom-style: double;} |
|||
table.sudoku td[id^=cell_4] {border-bottom-width: 3px;border-bottom-style: double;} |
|||
table.sudoku td[id^=cell_5] {border-bottom-width: 3px} |
|||
table.sudoku td[id^=cell_6] {border-bottom-width: 3px;border-bottom-style: double;} |
|||
table.sudoku td[id^=cell_7] {border-bottom-width: 3px;border-bottom-style: double;} |
|||
table.sudoku td[id$=_0] {border-right-width: 3px;border-right-style: double;} |
|||
table.sudoku td[id$=_1] {border-right-width: 3px;border-right-style: double;} |
|||
table.sudoku td[id$=_2] {border-right-width: 3px} |
|||
table.sudoku td[id$=_3] {border-right-width: 3px;border-right-style: double;} |
|||
table.sudoku td[id$=_4] {border-right-width: 3px;border-right-style: double;} |
|||
table.sudoku td[id$=_5] {border-right-width: 3px} |
|||
table.sudoku td[id$=_6] {border-right-width: 3px;border-right-style: double;} |
|||
table.sudoku td[id$=_7] {border-right-width: 3px;border-right-style: double;} |
|||
td.selected {background-color: rgb(100%, 70%, 0%)} |
|||
td.tofill {color: blue;background-color: #f2ffde } |
|||
td.filled {color: blue;background-color: #c0ff96} |
|||
td.green{color:green;background-color: #fff} |
|||
td.red{color:red;background-color:#FC9E9E;border-color: red;border-width: 1.5px} |
|||
td.notfill {color: green;font-style:bold;background-color: #cac5c3;} |
After Width: | Height: | Size: 46 KiB |
@ -0,0 +1,49 @@ |
|||
odoo.define('game_sudoku.models_entertainment_game', function (require) { |
|||
"use strict"; |
|||
|
|||
var core = require('web.core'); |
|||
var Model = require('web.Model'); |
|||
var Widget = require('web.Widget'); |
|||
|
|||
var QWeb = core.qweb; |
|||
var _t = core._t; |
|||
|
|||
var MyGame = Widget.extend({ |
|||
events: { |
|||
"click .o_entertainment_games_log_in_icon": function() { |
|||
this.$('.o_entertainment_games_log_in_icon').attr("disabled", "disabled"); |
|||
this.$('.o_entertainment_games_req_footer').css('display', 'block'); |
|||
this.game_request(); |
|||
}, |
|||
}, |
|||
game_request: function(){ |
|||
new Model("employee.game.approve") |
|||
.call("create_employee_game_approve", [1, this.employee.id, this.user]) |
|||
}, |
|||
|
|||
start: function () { |
|||
var self = this; |
|||
|
|||
var hr_employee = new Model('hr.employee'); |
|||
hr_employee.query(['attendance_state', 'name']) |
|||
.filter([['user_id', '=', self.session.uid]]) |
|||
.all() |
|||
.then(function (res) { |
|||
if (_.isEmpty(res) ) { |
|||
self.$('.o_hr_attendance_employee').append(_t("Error : Could not find employee linked to user")); |
|||
return; |
|||
} |
|||
self.employee = res[0]; |
|||
self.user = self.session.uid |
|||
self.$el.html(QWeb.render("EntertainmentGamesMainMenu", {widget: self})); |
|||
}); |
|||
|
|||
return this._super.apply(this, arguments); |
|||
}, |
|||
}); |
|||
|
|||
core.action_registry.add('entertainment_games_my_game', MyGame); |
|||
|
|||
return MyGame; |
|||
|
|||
}); |
@ -0,0 +1,119 @@ |
|||
.o_entertainment_games_log_in_icon { |
|||
font-size: 15em; |
|||
cursor: pointer; |
|||
margin: 20px 0px 20px 0px; |
|||
padding: 0px 15px 0px 15px; |
|||
border-radius: 10%; |
|||
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.6); |
|||
} |
|||
|
|||
.o_entertainment_games_kiosk_mode_container { |
|||
.o-flex-display(); |
|||
.o-flex-flow(column, nowrap); |
|||
.o-justify-content(center); |
|||
.o-align-items(center); |
|||
|
|||
@media (min-width: @screen-xs-max) { |
|||
background: url("../img/application-switcher-bg.jpg") no-repeat center center fixed; |
|||
background-size: cover; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
right: 0; |
|||
bottom: 0; |
|||
} |
|||
} |
|||
|
|||
/************** MIXINS for ANIMATIONS *************/ |
|||
.o-display-marked(@content, @top, @left, @color) { |
|||
position: absolute; |
|||
top: @top; |
|||
left: @left; |
|||
font-size: 150px; |
|||
font-family: "FontAwesome"; |
|||
content: @content; |
|||
color: @color; |
|||
animation: markAnim ease-in-out 10s; |
|||
animation-iteration-count: 5; |
|||
transform-origin: 50% 50%; |
|||
animation-fill-mode:forwards; /*when the spec is finished*/ |
|||
-webkit-animation: markAnim ease-in-out 10s; |
|||
-webkit-animation-iteration-count: 1; |
|||
-webkit-transform-origin: 50% 50%; |
|||
-webkit-animation-fill-mode:forwards; /*Chrome 16+, Safari 4+*/ |
|||
-moz-animation: markAnim ease-in-out 10s; |
|||
-moz-animation-iteration-count: 1; |
|||
-moz-transform-origin: 50% 50%; |
|||
-moz-animation-fill-mode:forwards; /*FF 5+*/ |
|||
-o-animation: markAnim ease-in-out 10s; |
|||
-o-animation-iteration-count: 1; |
|||
-o-transform-origin: 50% 50%; |
|||
-o-animation-fill-mode:forwards; /*Not implemented yet*/ |
|||
-ms-animation: markAnim ease-in-out 10s; |
|||
-ms-animation-iteration-count: 1; |
|||
-ms-transform-origin: 50% 50%; |
|||
-ms-animation-fill-mode:forwards; /*IE 10+*/ |
|||
|
|||
@media (max-width: 992px) { |
|||
left: 40%; |
|||
font-size: 30vw; |
|||
} |
|||
} |
|||
|
|||
.o_wow_thumbs:after { |
|||
.o-display-marked("You Won \A \f164 \00a0 - \f118", 20%, 40%, #21b799); |
|||
white-space: pre; |
|||
} |
|||
.o_lost_thumbs:after { |
|||
.o-display-marked("You Lost \A \f165 \00a0 - \f119", 20%, 40%, #b73720); |
|||
white-space: pre; |
|||
} |
|||
|
|||
|
|||
.o_entertainment_games_kiosk_mode { |
|||
width: 100%; |
|||
text-align: center; |
|||
position: relative; |
|||
background-color: #fff; |
|||
padding: 2em; |
|||
|
|||
h1 { |
|||
margin: 0 0 2rem 0; |
|||
} |
|||
|
|||
.message_demo_barcodes { |
|||
font-size: 0.9em; |
|||
margin: 0; |
|||
} |
|||
|
|||
img { |
|||
overflow:hidden; // prevent margins colapsing with h1 |
|||
margin-top: 3rem; |
|||
width: 200px; |
|||
} |
|||
|
|||
p { |
|||
text-align: left; |
|||
margin: 3rem 0; |
|||
} |
|||
|
|||
> button { |
|||
font-size: 1.2em; |
|||
margin-bottom: 2rem; |
|||
width: 100%; |
|||
} |
|||
|
|||
> button:last-child { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
@media (min-width: @screen-xs-max) { |
|||
flex: 0 0 auto; |
|||
width: 550px; |
|||
border-radius: 10px; |
|||
background-color: rgba(255,255,255,0.8); |
|||
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.6); |
|||
font-size: 1.2em; |
|||
padding: 3em; |
|||
} |
|||
} |
@ -0,0 +1,20 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<template xml:space="preserve"> |
|||
<t t-name="EntertainmentGamesMainMenu"> |
|||
<div class="o_entertainment_games_kiosk_mode_container"> |
|||
<div class="o_entertainment_games_kiosk_mode"> |
|||
<t t-if="widget.employee"> |
|||
<h1>Welcome <t t-esc="widget.employee.name"/></h1> |
|||
<h2>Click to start Games</h2> |
|||
<i class="fa fa-gamepad btn-primary o_entertainment_games_log_in_icon" style="color: #f9f9f9;background: #a3498b;"/> |
|||
<div class="o_entertainment_games_req_footer"> |
|||
<h3>Just wait for approval</h3> |
|||
</div> |
|||
</t> |
|||
<t t-if="!widget.employee"> |
|||
Error : Could not find employee linked to user. |
|||
</t> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</template> |
@ -0,0 +1,161 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<template xml:space="preserve"> |
|||
<t t-name="EntertainmentGamesSudoku"> |
|||
<div class="sudokupage" groups="hr.group_hr_user"> |
|||
<div class ="sudokupage1"> |
|||
|
|||
</div> |
|||
<div class="sudokupage2"> |
|||
<h3 align='center' class="sudo"> </h3> |
|||
<table align="center" class="sudoku" cellspacing="0"> |
|||
<tr> |
|||
<td id="cell_0_0">s</td> |
|||
<td id="cell_0_1">8</td> |
|||
<td id="cell_0_2"></td> |
|||
<td id="cell_0_3"></td> |
|||
<td id="cell_0_4">d</td> |
|||
<td id="cell_0_5">4</td> |
|||
<td id="cell_0_6"></td> |
|||
<td id="cell_0_7">k</td> |
|||
<td id="cell_0_8">1</td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_1_0"></td> |
|||
<td id="cell_1_1">1</td> |
|||
<td id="cell_1_2">d</td> |
|||
<td id="cell_1_3"></td> |
|||
<td id="cell_1_4">3</td> |
|||
<td id="cell_1_5">s</td> |
|||
<td id="cell_1_6"></td> |
|||
<td id="cell_1_7">7</td> |
|||
<td id="cell_1_8">u</td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_2_0">u</td> |
|||
<td id="cell_2_1">5</td> |
|||
<td id="cell_2_2"></td> |
|||
<td id="cell_2_3"></td> |
|||
<td id="cell_2_4"></td> |
|||
<td id="cell_2_5">S</td> |
|||
<td id="cell_2_6">9</td> |
|||
<td id="cell_2_7"></td> |
|||
<td id="cell_2_8"></td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_3_0"></td> |
|||
<td id="cell_3_1"></td> |
|||
<td id="cell_3_2">8</td> |
|||
<td id="cell_3_3"></td> |
|||
<td id="cell_3_4"></td> |
|||
<td id="cell_3_5">4</td> |
|||
<td id="cell_3_6">D</td> |
|||
<td id="cell_3_7"></td> |
|||
<td id="cell_3_8">o</td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_4_0">d</td> |
|||
<td id="cell_4_1"></td> |
|||
<td id="cell_4_2"></td> |
|||
<td id="cell_4_3"></td> |
|||
<td id="cell_4_4"> |
|||
<h4>SUDOKU</h4> |
|||
</td> |
|||
<td id="cell_4_5"></td> |
|||
<td id="cell_4_6">5</td> |
|||
<td id="cell_4_7"></td> |
|||
<td id="cell_4_8"></td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_5_0">o</td> |
|||
<td id="cell_5_1">5</td> |
|||
<td id="cell_5_2">k</td> |
|||
<td id="cell_5_3">6</td> |
|||
<td id="cell_5_4"></td> |
|||
<td id="cell_5_5">s</td> |
|||
<td id="cell_5_6">2</td> |
|||
<td id="cell_5_7"></td> |
|||
<td id="cell_5_8"></td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_6_0"></td> |
|||
<td id="cell_6_1">8</td> |
|||
<td id="cell_6_2"></td> |
|||
<td id="cell_6_3"></td> |
|||
<td id="cell_6_4">4</td> |
|||
<td id="cell_6_5"></td> |
|||
<td id="cell_6_6"></td> |
|||
<td id="cell_6_7">3</td> |
|||
<td id="cell_6_8"></td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_7_0">k</td> |
|||
<td id="cell_7_1">1</td> |
|||
<td id="cell_7_2"></td> |
|||
<td id="cell_7_3"></td> |
|||
<td id="cell_7_4">8</td> |
|||
<td id="cell_7_5"></td> |
|||
<td id="cell_7_6">k</td> |
|||
<td id="cell_7_7"></td> |
|||
<td id="cell_7_8">9</td> |
|||
</tr> |
|||
<tr> |
|||
<td id="cell_8_0">u</td> |
|||
<td id="cell_8_1">u</td> |
|||
<td id="cell_8_2">3</td> |
|||
<td id="cell_8_3">9</td> |
|||
<td id="cell_8_4">s</td> |
|||
<td id="cell_8_5"></td> |
|||
<td id="cell_8_6">5</td> |
|||
<td id="cell_8_7"></td> |
|||
<td id="cell_8_8"></td> |
|||
</tr> |
|||
</table> |
|||
</div> |
|||
<div class= "sudokupage3"> |
|||
<h2 id="demo"> </h2> |
|||
<form> |
|||
<table align="center" class="sudoright" cellspacing="20" style="margin top=10px:"> |
|||
<tr> |
|||
<td> |
|||
<input type="button" class="sudokunewbutton" value="New Game" /> |
|||
<div id="sudoku_level_selection_modal" class="sudokulevelselection"> |
|||
<div class="sudokulevelselection-content"> |
|||
<div class="sudokulevelselection-header"> |
|||
<span class="sudokulevelselectionclose">*</span> |
|||
<h2>Level of Mode</h2> |
|||
</div> |
|||
<div class="sudokulevelselection-body"> |
|||
<input type="button" class="sudokulevelbutton1" value="Easy" /> |
|||
<input type="button" class="sudokulevelbutton2" value="Medium" /> |
|||
<input type="button" class="sudokulevelbutton3" value="Hard" /> |
|||
</div> |
|||
<div class="sudokulevelselection-footer"> |
|||
<h3>Test Your Skill with Different Levels.</h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<input type="button" class="sudokulevelbuttonreset" value="Reset"/> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<input type="button" class="sudokulevelbuttoncheck" value="Check it"/> |
|||
<input type="button" class="sudokulevelbuttoncheckback" value="Redo"/> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> |
|||
<input type="button" class="sudokulevelbuttonsolve" value="Solution"/> |
|||
</td> |
|||
|
|||
</tr> |
|||
</table> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</template> |
@ -0,0 +1,9 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
<record id="sequence_game_approve_sequence" model="ir.sequence"> |
|||
<field name="name">Game Approve</field> |
|||
<field name="code">employee.game</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,13 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<template id="entertainment_games" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/game_sudoku/static/src/js/game.js"></script> |
|||
<script type="text/javascript" src="/game_sudoku/static/src/js/sudoku.js"></script> |
|||
<link rel="stylesheet" href="/game_sudoku/static/src/less/games.less"/> |
|||
<link rel="stylesheet" href="/game_sudoku/static/src/css/sudoku.css"/> |
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,49 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<record id="action_entertainment_games_request" model="ir.actions.client"> |
|||
<field name="name">Game Approval</field> |
|||
<field name="tag">entertainment_games_my_game</field> |
|||
<field name="target">main</field> |
|||
</record> |
|||
|
|||
<record id="game_approval_tree" model="ir.ui.view"> |
|||
<field name="name">employee.game.approve.tree</field> |
|||
<field name="model">employee.game.approve</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Game Approval" create="false" edit="false" |
|||
colors="red:state == 'draft';green:state == 'approve';grey:state == 'cancel';"> |
|||
<field name="name"/> |
|||
<field name="department_id"/> |
|||
<field name="approve_datetime"/> |
|||
<field name="game_user"/> |
|||
<field name="user_id" invisible="1"/> |
|||
<field name="state" invisible="1"/> |
|||
<button name="approve" string="Confirm" type="object" icon="fa-check" style="color:green" |
|||
attrs="{'invisible':[('state','!=', 'draft')]}"/> |
|||
<button name="cancel" string="Cancel" type="object" icon="fa-close" style="color:red" |
|||
attrs="{'invisible':[('state','=', 'cancel')]}"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_entertainment_games_approval_tree" model="ir.actions.act_window"> |
|||
<field name="name">Game Approval</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">employee.game.approve</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree</field> |
|||
<field name="view_id" ref="game_approval_tree"/> |
|||
</record> |
|||
|
|||
<menuitem id="entertainment_games_menu" name="Games" sequence="105" groups="base.group_user"/> |
|||
|
|||
<menuitem id="entertainment_games_approval_request_menu" name="May I Play?" sequence="1" |
|||
action="action_entertainment_games_request" parent="entertainment_games_menu" |
|||
groups="game_sudoku.odoo_gamer_approve_req"/> |
|||
|
|||
<menuitem id="entertainment_games_approval_menu" name="Game Request" sequence="2" |
|||
action="action_entertainment_games_approval_tree" parent="entertainment_games_menu" |
|||
groups="hr.group_hr_manager"/> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,14 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<record id="action_entertainment_games_sudoku" model="ir.actions.client"> |
|||
<field name="name">Sudoku</field> |
|||
<field name="tag">entertainment_games_sudoku</field> |
|||
<field name="target">main</field> |
|||
</record> |
|||
|
|||
<menuitem id="entertainment_games_sudoku_menu" name="Sudoku" sequence="5" |
|||
action="action_entertainment_games_sudoku" parent="entertainment_games_menu" |
|||
groups="game_sudoku.odoo_gamer_group"/> |
|||
</data> |
|||
</odoo> |