From 37a29392e048ed2988d185bd613fcebde1a58f36 Mon Sep 17 00:00:00 2001 From: mtpc4s9 Date: Thu, 27 Nov 2025 18:24:56 +0700 Subject: [PATCH] Nov 27th 2025 --- addons/zoo/__init__.py | 4 +- addons/zoo/__manifest__.py | 5 + .../zoo/__pycache__/__init__.cpython-312.pyc | Bin 164 -> 229 bytes addons/zoo/controllers/__init__.py | 1 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 174 bytes .../__pycache__/main.cpython-312.pyc | Bin 0 -> 2114 bytes addons/zoo/controllers/main.py | 33 +++ addons/zoo/data/product_food_import.csv | 21 ++ addons/zoo/data/zoo_animal_import.csv | 31 +++ addons/zoo/data/zoo_cage_import.csv | 16 ++ addons/zoo/data/zoo_creature_import.csv | 11 + addons/zoo/models/__init__.py | 4 +- .../__pycache__/__init__.cpython-312.pyc | Bin 358 -> 439 bytes .../__pycache__/zoo_animal.cpython-312.pyc | Bin 5321 -> 7655 bytes .../zoo_animal_meal.cpython-312.pyc | Bin 0 -> 6685 bytes .../__pycache__/zoo_cage.cpython-312.pyc | Bin 1306 -> 2131 bytes .../__pycache__/zoo_creature.cpython-312.pyc | Bin 1262 -> 2065 bytes .../__pycache__/zoo_diet_plan.cpython-312.pyc | Bin 4706 -> 4706 bytes .../zoo_health_record.cpython-312.pyc | Bin 5326 -> 5323 bytes .../zoo_husbandry_task.cpython-312.pyc | Bin 0 -> 7796 bytes addons/zoo/models/zoo_animal.py | 156 +++++++++--- addons/zoo/models/zoo_animal_meal.py | 175 ++++++++++++++ addons/zoo/models/zoo_cage.py | 48 +++- addons/zoo/models/zoo_creature.py | 37 ++- addons/zoo/models/zoo_health_record.py | 2 +- addons/zoo/models/zoo_husbandry_task.py | 175 ++++++++++++++ addons/zoo/security/ir.model.access.csv | 10 +- addons/zoo/views/zoo_animal_meal_views.xml | 200 ++++++++++++++++ addons/zoo/views/zoo_animal_views.xml | 44 +++- addons/zoo/views/zoo_cage_views.xml | 110 +++++++-- addons/zoo/views/zoo_creature_views.xml | 65 ++++- addons/zoo/views/zoo_diet_plans.xml | 6 +- addons/zoo/views/zoo_husbandry_task_views.xml | 222 ++++++++++++++++++ addons/zoo/wizard/__init__.py | 3 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 245 bytes .../animal_feeding.cpython-312.pyc | Bin 0 -> 5199 bytes .../__pycache__/cage_update.cpython-312.pyc | Bin 0 -> 1835 bytes .../__pycache__/toy_add.cpython-312.pyc | Bin 0 -> 1352 bytes addons/zoo/wizard/animal_feeding.py | 131 +++++++++++ addons/zoo/wizard/animal_feeding_views.xml | 55 +++++ addons/zoo/wizard/cage_update.py | 34 +++ addons/zoo/wizard/cage_update_views.xml | 36 +++ addons/zoo/wizard/toy_add.py | 21 ++ addons/zoo/wizard/toy_add_views.xml | 33 +++ addons/zoo_plus/__init__.py | 1 + addons/zoo_plus/__manifest__.py | 21 ++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 169 bytes addons/zoo_plus/models/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 221 bytes .../__pycache__/zoo_animal.cpython-312.pyc | Bin 0 -> 3046 bytes .../zoo_animal_backup.cpython-312.pyc | Bin 0 -> 1000 bytes addons/zoo_plus/models/zoo_animal.py | 63 +++++ addons/zoo_plus/models/zoo_animal_backup.py | 17 ++ addons/zoo_plus/my_client.py | 18 ++ addons/zoo_plus/security/ir.model.access.csv | 2 + addons/zoo_plus/static/description/icon.png | Bin 0 -> 26926 bytes etc/odoo.conf | 2 +- 57 files changed, 1743 insertions(+), 72 deletions(-) create mode 100644 addons/zoo/controllers/__init__.py create mode 100644 addons/zoo/controllers/__pycache__/__init__.cpython-312.pyc create mode 100644 addons/zoo/controllers/__pycache__/main.cpython-312.pyc create mode 100644 addons/zoo/controllers/main.py create mode 100644 addons/zoo/data/product_food_import.csv create mode 100644 addons/zoo/data/zoo_animal_import.csv create mode 100644 addons/zoo/data/zoo_cage_import.csv create mode 100644 addons/zoo/data/zoo_creature_import.csv create mode 100644 addons/zoo/models/__pycache__/zoo_animal_meal.cpython-312.pyc create mode 100644 addons/zoo/models/__pycache__/zoo_husbandry_task.cpython-312.pyc create mode 100644 addons/zoo/models/zoo_animal_meal.py create mode 100644 addons/zoo/models/zoo_husbandry_task.py create mode 100644 addons/zoo/views/zoo_animal_meal_views.xml create mode 100644 addons/zoo/views/zoo_husbandry_task_views.xml create mode 100644 addons/zoo/wizard/__init__.py create mode 100644 addons/zoo/wizard/__pycache__/__init__.cpython-312.pyc create mode 100644 addons/zoo/wizard/__pycache__/animal_feeding.cpython-312.pyc create mode 100644 addons/zoo/wizard/__pycache__/cage_update.cpython-312.pyc create mode 100644 addons/zoo/wizard/__pycache__/toy_add.cpython-312.pyc create mode 100644 addons/zoo/wizard/animal_feeding.py create mode 100644 addons/zoo/wizard/animal_feeding_views.xml create mode 100644 addons/zoo/wizard/cage_update.py create mode 100644 addons/zoo/wizard/cage_update_views.xml create mode 100644 addons/zoo/wizard/toy_add.py create mode 100644 addons/zoo/wizard/toy_add_views.xml create mode 100644 addons/zoo_plus/__init__.py create mode 100644 addons/zoo_plus/__manifest__.py create mode 100644 addons/zoo_plus/__pycache__/__init__.cpython-312.pyc create mode 100644 addons/zoo_plus/models/__init__.py create mode 100644 addons/zoo_plus/models/__pycache__/__init__.cpython-312.pyc create mode 100644 addons/zoo_plus/models/__pycache__/zoo_animal.cpython-312.pyc create mode 100644 addons/zoo_plus/models/__pycache__/zoo_animal_backup.cpython-312.pyc create mode 100644 addons/zoo_plus/models/zoo_animal.py create mode 100644 addons/zoo_plus/models/zoo_animal_backup.py create mode 100644 addons/zoo_plus/my_client.py create mode 100644 addons/zoo_plus/security/ir.model.access.csv create mode 100644 addons/zoo_plus/static/description/icon.png diff --git a/addons/zoo/__init__.py b/addons/zoo/__init__.py index 9a7e03e..fab5aef 100644 --- a/addons/zoo/__init__.py +++ b/addons/zoo/__init__.py @@ -1 +1,3 @@ -from . import models \ No newline at end of file +from . import models +from . import wizard +from . import controllers \ No newline at end of file diff --git a/addons/zoo/__manifest__.py b/addons/zoo/__manifest__.py index 3696fd5..b60f800 100644 --- a/addons/zoo/__manifest__.py +++ b/addons/zoo/__manifest__.py @@ -33,6 +33,11 @@ 'views/zoo_creature_views.xml', 'views/zoo_cage_views.xml', 'views/zoo_health_records.xml', + 'views/zoo_animal_meal_views.xml', 'views/zoo_diet_plans.xml', + 'wizard/toy_add_views.xml', + 'wizard/cage_update_views.xml', + 'wizard/animal_feeding_views.xml', + 'views/zoo_husbandry_task_views.xml' ], } \ No newline at end of file diff --git a/addons/zoo/__pycache__/__init__.cpython-312.pyc b/addons/zoo/__pycache__/__init__.cpython-312.pyc index e93f347d48a2fe4518de2c302b4df613d1c5eac3..9680bceae509569b3a3d5ea116f6471f167fc204 100644 GIT binary patch delta 185 zcmZ3&_>__NG%qg~0}$wSDP}rP)pRI+HYzGMU{*JQlKmYbiFno|s7m1kBZ7Nr1L+{yWQB}Mr;IjKd(ewr+|7>byI zii=o41S^nO$?zFSGW=51&&?~*Ppv2^O4Lo9n5CcqauCSeVm=`8ftit!@h*c15Zz;t JEaCtP0RU6EDro=! delta 96 zcmaFLxP+1SG%qg~0|+dW$rPE$E2$#@WKU;EVMt-jVaR2SVq|2fWYT1Q$p{qIWW2?e po1c=JQ|zb7bc>;gd19}H6bDcOBv}k%d|+l|WW2{9Qp5)2006St5{m!; diff --git a/addons/zoo/controllers/__init__.py b/addons/zoo/controllers/__init__.py new file mode 100644 index 0000000..deec4a8 --- /dev/null +++ b/addons/zoo/controllers/__init__.py @@ -0,0 +1 @@ +from . import main \ No newline at end of file diff --git a/addons/zoo/controllers/__pycache__/__init__.cpython-312.pyc b/addons/zoo/controllers/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c5adc98e86a34ee82961e48b899b2ba093b3c93 GIT binary patch literal 174 zcmX@j%ge<81TVW3GlhWkV-N=hn4pZ$0zk%eh7^Vr#vF!R#wbQchDs()=9i2>VNJ$c zEV+r9d48Hqw-}0;fg&pzK7;iA($&w+E74D_C@D(RO-xD2&nwoi%FowN&d)0;%FoG3 yEh^TJkI&4@EQycTE2#X%VUwGmQks)$SHuC-4KlhI#Q4C>$jEq)L8yog$N>O>wkY-h literal 0 HcmV?d00001 diff --git a/addons/zoo/controllers/__pycache__/main.cpython-312.pyc b/addons/zoo/controllers/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..812362b92c96721da2723633ea87d7c8fe43c25b GIT binary patch literal 2114 zcmah}&2JM&6rb5o+p&`vCkjmnBt?Ln$}v?{iMAvq$_M2uv=C^s1+5m(B-mN+hS@cc z$dQ5+2}eByP64SBhhBn$)ExN}klI76SaKLr6$vifprIE|omqQrXd`tFZ+`RMn>RCW ze((JjiG%P6CunZ7D&;%Nv1rufkO~{Ix2>DtxrL3&U9)_l( zDW0#YsoosW0s_E+%q~B0ea4|xSXpTeNLm0|SOCWXk{19{FvzsmJ$;nfe#Dps)8 zGy~)6E4~lpTeIhZD|lW^WNOIQ0I*usk=8uO_{puCfvflnKPl(g z2|IcQ{_Dw}E{u-EWg1F5Y0Gg9D}`wQ87_9yS%w^!OmIZ_8wh{ILr5WV`1QNq#gkdf zP2!s_F%kwsw&f&eZ9AE=EtlA)iHVcU8fmL{dWJSL<#kM4-H%NoECi>KbDW8J@KgWwn}rq%MHf zs)MG?1mZ!eXtq7@?TOizq%ocLvS3*0tYIdPrcpnYuDb3tl`PxB6!wh7B`Ucy)0j#| z&b>;dluaBa9Ws%6p8@=5`Hi;kv2-s3*T2$^Jed>S8awjP=fWIBa8AmLdFdmzJL6}g z7K!nziZj9YlvT)Io`)0SWIdjomx-O1GhPGuaEHr()Ems+=;QkQNb+yR?9Fw(k3QJH zL)q8&Bl%}(PH|iOotZWt)#tq8p9Vp_+A_QA9zMz|NO`3Cb$0%Lywj}7yzdw7EzO@%ai2m1)m5C3M%U}YpC`wCSiv4t?9!3m6!&Wq~R6Yd15!s^b=Iq?YLKS)Jv zU8iE&a;fCxkj>24AgQaQgBiW5A-tQBPA>NH4XSS1lanm8dcz=A+M1-hvc?qFGmdTP z1Uu8LFmYUE;jlSDI1#8Yb%S(sAZKlaO{x&gNQkJ&+#Sx6uF4=`?$kVqUA^)?{mP7< zMzd`dy7&Iu5M}PpFHFpXmyNAUQ;SmtaVye%XV*{P7lh5`Jq39)+H&W@-S*{uclT{X zKQ2e(#b|tGXl?%*S^0Xs=c|qA(Sq`{A^Lpx-Uki$8@AdGtsMNd=V4E&?eop{t_O+x ziLK7Wno>S|ta$iXsdL~>P>wYg2H%E3q-E*s;@NwHrEu3)ti2pd6k~~%)Z_i7SpRys z|7A^e<#DVO>st@^5zf(3mY0C8^Ka618q#%^kDSSISl6%R46|yHY-HPnKaa8k$hnv# z7=8%6AYPUTr?e+HaC(_o0Go2~_V}&w+xjhiz4eo|gO9I28C<{k3F@@>%uhXX?aKS_(FIiqZ0pYs&XQ50tDH|oc2gT z_(jM8E_i)bo)8+Wwdl&VKjS8z5AP}O0!J%p=qFz?9dGu|5EHLO2;no(@F)20577Ax zG%@@FG;W4E3Wv&}j$)|e-ZvYe1M})%k_21dhNG~*Ft#+lI9`r)7bD$&1E%m!`3I}W B$UOi6 literal 0 HcmV?d00001 diff --git a/addons/zoo/controllers/main.py b/addons/zoo/controllers/main.py new file mode 100644 index 0000000..6ba3f08 --- /dev/null +++ b/addons/zoo/controllers/main.py @@ -0,0 +1,33 @@ +import odoo +from odoo.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT +from odoo.http import request +import datetime +import json + +import logging +_logger = logging.getLogger(__name__) + +def convert_datetime(d): + if d: + return d.strftime(DEFAULT_SERVER_DATETIME_FORMAT) if isinstance(d, datetime.datetime) else d.strftime(DEFAULT_SERVER_DATE_FORMAT) + else: + return False + +class ZooAPI(odoo.http.Controller): + @odoo.http.route('/api/zoo/animal/', type='http', auth='none', cors='*', csrf=False) + def get_animal_by_id(self, id, **kw): + env = request.env + id = int(id) + model = "zoo.animal" + record = env[model].sudo().search([('id', '=', id)]) + if record: + res = { + "name": record.name, + "dob": convert_datetime(d=record.dob), + "gender": record.gender, + "feed_time": convert_datetime(d=record.feed_time), + } + _logger.warning(res) + return request.make_json_response(res, status=200) + else: + return request.make_json_response({}, status=200) \ No newline at end of file diff --git a/addons/zoo/data/product_food_import.csv b/addons/zoo/data/product_food_import.csv new file mode 100644 index 0000000..64bab00 --- /dev/null +++ b/addons/zoo/data/product_food_import.csv @@ -0,0 +1,21 @@ +name,default_code,type,list_price,standard_price,uom_id/id,categ_id/id,description +Beef (Raw),FOOD001,consu,15.50,12.00,uom.product_uom_kgm,product.product_category_all,Fresh raw beef for carnivores +Chicken (Raw),FOOD002,consu,8.75,6.50,uom.product_uom_kgm,product.product_category_all,Fresh raw chicken meat +Fish (Whole),FOOD003,consu,12.00,9.00,uom.product_uom_kgm,product.product_category_all,Fresh whole fish for aquatic animals +Pork (Raw),FOOD004,consu,10.50,8.00,uom.product_uom_kgm,product.product_category_all,Fresh pork meat +Deer Meat,FOOD005,consu,18.00,14.00,uom.product_uom_kgm,product.product_category_all,Premium deer meat for large carnivores +Grass Hay,FOOD006,consu,3.50,2.00,uom.product_uom_kgm,product.product_category_all,Dried grass hay for herbivores +Alfalfa,FOOD007,consu,4.25,2.50,uom.product_uom_kgm,product.product_category_all,High quality alfalfa +Fresh Vegetables,FOOD008,consu,5.00,3.50,uom.product_uom_kgm,product.product_category_all,Mixed fresh vegetables +Fruits (Mixed),FOOD009,consu,6.50,4.50,uom.product_uom_kgm,product.product_category_all,Assorted fresh fruits +Bamboo,FOOD010,consu,7.00,5.00,uom.product_uom_kgm,product.product_category_all,Fresh bamboo shoots and stalks +Fish Pellets,FOOD011,consu,4.50,3.00,uom.product_uom_kgm,product.product_category_all,Specialized fish food pellets +Bird Seed Mix,FOOD012,consu,3.00,2.00,uom.product_uom_kgm,product.product_category_all,Mixed seeds for birds +Insects (Live),FOOD013,consu,12.50,9.00,uom.product_uom_kgm,product.product_category_all,Live insects for insectivores +Rabbit (Whole),FOOD014,consu,9.00,7.00,uom.product_uom_kgm,product.product_category_all,Whole rabbit for medium carnivores +Squid,FOOD015,consu,11.00,8.50,uom.product_uom_kgm,product.product_category_all,Fresh squid for marine animals +Krill,FOOD016,consu,14.00,11.00,uom.product_uom_kgm,product.product_category_all,Frozen krill for aquatic animals +Lettuce,FOOD017,consu,2.50,1.50,uom.product_uom_kgm,product.product_category_all,Fresh lettuce leaves +Carrots,FOOD018,consu,2.00,1.20,uom.product_uom_kgm,product.product_category_all,Fresh carrots +Sweet Potato,FOOD019,consu,3.00,2.00,uom.product_uom_kgm,product.product_category_all,Fresh sweet potatoes +Apples,FOOD020,consu,4.00,3.00,uom.product_uom_kgm,product.product_category_all,Fresh apples diff --git a/addons/zoo/data/zoo_animal_import.csv b/addons/zoo/data/zoo_animal_import.csv new file mode 100644 index 0000000..d1f8908 --- /dev/null +++ b/addons/zoo/data/zoo_animal_import.csv @@ -0,0 +1,31 @@ +name,description,dob,gender,weight,nickname,is_alive,is_purchased,purchase_price,creature_id/name,cage_id/name +Simba,Majestic lion with golden mane,2018-05-15,male,190.5,King,True,True,15000.0,Lion,Savanna Habitat +Nala,Beautiful lioness and pride leader,2019-03-20,female,130.0,Queen,True,True,12000.0,Lion,Savanna Habitat +Shere Khan,Bengal tiger with striking orange stripes,2017-08-10,male,220.0,Khan,True,True,25000.0,Tiger,Rainforest Pavilion +Rajah,Playful tiger cub learning to hunt,2022-11-05,female,45.5,Raja,True,False,0.0,Tiger,Rainforest Pavilion +Dumbo,Gentle giant elephant with big ears,2015-01-12,male,5400.0,Big Ears,True,True,50000.0,Elephant,Safari Plains +Ellie,Young elephant loves to play in water,2020-06-30,female,2800.0,Ellie,True,False,0.0,Elephant,Safari Plains +Melman,Tall giraffe with beautiful spots,2016-07-22,male,1200.0,Mel,True,True,18000.0,Giraffe,Savanna Habitat +Gloria,Graceful giraffe mother,2018-09-15,female,950.0,Glori,True,True,16000.0,Giraffe,Savanna Habitat +Marty,Striped zebra always energetic,2019-04-08,male,350.0,Stripey,True,True,8000.0,Zebra,Safari Plains +Zara,Young zebra with perfect stripes,2021-12-20,female,280.0,Z,True,False,0.0,Zebra,Safari Plains +Skipper,Penguin leader of the colony,2020-02-14,male,5.5,Skip,True,True,3000.0,Penguin,Penguin Cove +Kowalski,Smart penguin loves fish,2020-02-14,male,5.2,Kowl,True,True,3000.0,Penguin,Penguin Cove +Private,Young penguin still learning,2021-08-01,male,4.8,Priv,True,False,0.0,Penguin,Penguin Cove +Rico,Tough penguin protects the group,2020-02-14,male,5.7,Ric,True,True,3000.0,Penguin,Penguin Cove +Aurora,Beautiful white polar bear female,2016-11-30,female,450.0,Rory,True,True,35000.0,Polar Bear,Polar Pavilion +Blizzard,Large male polar bear king of arctic,2015-09-18,male,550.0,Bliz,True,True,40000.0,Polar Bear,Arctic Zone +Flipper,Friendly dolphin loves to jump,2019-05-25,male,180.0,Flip,True,True,20000.0,Dolphin,Aquatic Center +Echo,Dolphin with beautiful voice,2020-07-12,female,165.0,Echi,True,True,18000.0,Dolphin,Tropical Reef +Jaws,Impressive great white shark,2014-03-03,male,900.0,Big J,True,True,45000.0,Shark,Aquatic Center +Marina,Graceful reef shark,2018-10-20,female,220.0,Mari,True,True,15000.0,Shark,Tropical Reef +Freedom,Majestic bald eagle symbol of liberty,2017-06-04,male,6.5,Free,True,True,5000.0,Eagle,Bird Sanctuary +Liberty,Female eagle partner of Freedom,2018-04-15,female,5.8,Libby,True,True,4500.0,Eagle,Bird Sanctuary +Zeus,Powerful golden eagle,2016-01-20,male,7.2,Z-man,True,True,6000.0,Eagle,Bird Sanctuary +Spirit,Young eagle learning to fly,2022-05-10,male,4.5,Spir,True,False,0.0,Eagle,Mountain Ridge +Leo,Strong second alpha lion,2019-08-22,male,185.0,Leo,True,True,14000.0,Lion,Savanna Habitat +Elsa,Brave lioness hunter,2020-10-11,female,125.0,Ice Queen,True,True,11000.0,Lion,Desert Dome +Tony,Young energetic tiger,2021-03-15,male,95.0,T-Rex,True,False,0.0,Tiger,Rainforest Pavilion +Shira,Rare beautiful white tiger,2018-12-25,female,140.0,Snow,True,True,30000.0,Tiger,Primate Paradise +Trunks,Adorable baby elephant,2023-02-28,male,800.0,Trunk,True,False,0.0,Elephant,Safari Plains +Patches,Cute giraffe calf with unique spots,2023-01-05,female,320.0,Patchy,True,False,0.0,Giraffe,Savanna Habitat diff --git a/addons/zoo/data/zoo_cage_import.csv b/addons/zoo/data/zoo_cage_import.csv new file mode 100644 index 0000000..4ecc23e --- /dev/null +++ b/addons/zoo/data/zoo_cage_import.csv @@ -0,0 +1,16 @@ +name,capacity,location,cage_type,area,description,active +Savanna Habitat,10,North Wing,outdoor,500.5,Large outdoor habitat for African animals,True +Rainforest Pavilion,8,East Wing,indoor,350.0,Climate-controlled rainforest environment,True +Arctic Zone,6,South Wing,outdoor,400.0,Cold climate habitat with ice features,True +Aquatic Center,15,West Wing,aquarium,600.0,Large aquarium for marine life,True +Bird Sanctuary,20,Central Area,aviary,450.0,Open-air aviary with netting,True +Desert Dome,5,North Wing,indoor,300.0,Heated desert environment,True +Primate Paradise,12,East Wing,outdoor,380.0,Multi-level jungle gym for primates,True +Reptile House,10,South Wing,indoor,250.0,Temperature-controlled reptile habitat,True +Polar Pavilion,4,West Wing,indoor,320.0,Frozen tundra simulation,True +Safari Plains,25,Central Area,outdoor,800.0,Large plains for grazing animals,True +Tropical Reef,20,East Wing,aquarium,550.0,Coral reef ecosystem,True +Mountain Ridge,8,North Wing,outdoor,420.0,Rocky mountain terrain,True +Nocturnal Gallery,6,South Wing,indoor,180.0,Dark environment for nocturnal animals,True +Penguin Cove,15,West Wing,outdoor,400.0,Icy pool for penguins,True +Butterfly Garden,30,Central Area,aviary,200.0,Glass dome for butterflies,True diff --git a/addons/zoo/data/zoo_creature_import.csv b/addons/zoo/data/zoo_creature_import.csv new file mode 100644 index 0000000..0147577 --- /dev/null +++ b/addons/zoo/data/zoo_creature_import.csv @@ -0,0 +1,11 @@ +name,environment,is_rare +Lion,ground,False +Tiger,forest,True +Elephant,ground,False +Giraffe,ground,False +Zebra,ground,False +Penguin,cool,False +Polar Bear,cool,True +Dolphin,ocean,False +Shark,sea,True +Eagle,sky,False diff --git a/addons/zoo/models/__init__.py b/addons/zoo/models/__init__.py index fcf0e96..09e5407 100644 --- a/addons/zoo/models/__init__.py +++ b/addons/zoo/models/__init__.py @@ -3,4 +3,6 @@ from . import zoo_creature from . import zoo_cage from . import zoo_health_record from . import zoo_diet_plan -from . import zoo_diet_line \ No newline at end of file +from . import zoo_diet_line +from . import zoo_animal_meal +from . import zoo_husbandry_task \ No newline at end of file diff --git a/addons/zoo/models/__pycache__/__init__.cpython-312.pyc b/addons/zoo/models/__pycache__/__init__.cpython-312.pyc index 08027211acd86cb12fcdf0eb32331fecb08e1acf..cf9c9766d710c03ea7bc31a8d9e935868c62e46c 100644 GIT binary patch delta 165 zcmaFHw4IsvG%qg~0}zOwQq6ogkyny2Wum&TObSB^dk#Y`dlWk(1CY%DWOGDuFfvqf zYI04iNYl||yv1LYpC6x?mzkTG6Q7%!m;)3N0tsc57AGa0MdwqT&ixG&6Wr4&8W=2NFy9^R{8Kmwqh}~t7zsn#EMzZ%96pDC(DgcEB BENuV) delta 113 zcmdna{EUhBG%qg~0}%YoSIAs6kynz@XQH|jm{=sH#k0CgAz$Oa`>;^W0CO8BN*=!=JQg_M3GY$r0uV$Py zaoE^dZB?jt1=h61>Cc9TK9I7~rixUl(mwRDRi(<{2anuU%iBKm#p!PQ&`MR$9sk9N zlhzN%*XMrUx#!&boqPQU-3JvL7kLP%V;IXS1O}peTUkOlqVuL(r^DkP zApn$)ZfN2w=LTUkop?;g!Wo1$?S=A(5DnQVKNBr0)To ze*z|hl~tIv>+hJp<0`%$JS5CT!gWBnc7nyDCl8LE6iHi=?Aa%Kc5W4qjqD#AIUq;A zu=_rB=ld55$G=mshw`QngfLhtygI%}diF`ruIDq~Bi{izROMVQ9Dk=^zp|J&U8#`@ zgsUZ~@H`1PPaP;tZVVNxy1~X7mMf7F7WSNl0;4eoPHr*E@TfJl-bNREjJhDmQLV-G z|H~dp4&5njGD*u6YJ0oE?5N6)QcZLzAlm3=cYu03#?n0U zg7TzJsP+%d^U)jeRcIwXz!7j_sUJ;HQUE$FX|mQD(z?$t8I4P^TAVEviLx;!K+U3D zDh+y&#V?<)wMlhtP(;0B1zW{bZt6b|q$0cFlEHb9*6d zEwi8`$XDc+u1b}HNUbVF*;V@A7eE)l6eP%vBU8TsxC`iK(=z~$Qg^k_Dp-;xmAX6O_R78FpY z(pxjZvH>$vTdHj$OYCSw-4O_2G-WQL``o#HYxCa5z1(tIG?>6|uw(jFOY+oZyrMG!`q|T z(Y$LA9t3a@c39)?#@*cM0^!L_9a`L5k?oc2O1}G4!7`k=bV#~^kv@|>lkXlD4QLlk zR^XZ4Tl3qYY$)G7STGM|<_;~rKuly4kKYmr2cWF3%q7TGV}rd3Yy@&P(clEPhLZNi z?#)>qIv+Um-Z9bO2fuwFudo2VwiUY}k+6zJRGZO}NneEG8rv=!D4>wtnHgYo9nX0l z4m=omye66{k)VLl)ty&ZfzdkHD`MHaIn_hr0r5B_#d1O{8zg<>iglj!g)I0a} z&U`=AXcmn=(cnUhgrzIMyiEscx zjj4>n56Lc^5`Is*gtq9hS&8ZV<^c~JP0d<*`+_L?U920_RrtKFHo45pGJFUGsm*HtfuXSk{V&ldcwGPh delta 1277 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 NX{V} zd@W@#g|9M}AD^a0n8S##4nVWvo{3mYgPu$TbF4@5kERHWvE=~S7hkeH6 Fe*kFhRlNWJ literal 0 HcmV?d00001 diff --git a/addons/zoo/models/__pycache__/zoo_cage.cpython-312.pyc b/addons/zoo/models/__pycache__/zoo_cage.cpython-312.pyc index 5d3e1c53fafee9ea7251ff0953967e7d4a6683fe..ac56f3b607dbf0d6a53f483138d678b741c416c3 100644 GIT binary patch literal 2131 zcmah~&2JM&6rZ)%yX)9aY?9a^fv}VhWuZwZRjaB*m1rm*DufCm4wlMl@l2A1{V=oZ z2%8AG5{Fo-6nY|@hhLx|$PG4^?kb<6d&=oAE~sP1QNPdGqEs^WK~H zF+XK8eF(r=L-AoM$5bVj1h>^i_aM;KwrL9SGk+*mQ@#*1+Y#n2UmV^0x|6Y0Lz zIk-P>##?+bA&@d46aRx$s*0ih$&VRvrno*PPQa7}n>aXNajR^X_OC|>Y!+kpp2Te= zs3>7njA5x5$FZV}<6JXQ?)Uc|YVlac39M|XT^lulJahn3!^y3_%~)%v*!Q0|rnb_X zU0HKS&vHpE z$$5Pa*!fzPPrARLhf74~Xdcxdq_(%nG)f*;Y)UYbmxxnl+N@Q!N_JSS9ll{bvfYZS zdlmN{q5Qn%*{i7pVob3;?E91{*Tf7G)vts?q~2^X zAk(ae6^q&xmuVN<96xI<+ZL@d<)WC|p3GOvgyuk@5f^HhiphdiaYC8`VTIdskrGRv za9{su)JBE(78lr_9`MVF?vjwufTb>xphWF5x4Bm6S@gaTXfK8KGI`Z@wE*|;jdfmo zs}5i-ZzmcrcW`UlqV^ZXO}EWlbltrc_CROlxd}Q$e8A|W5JTQi9^5x-(yK( zSP1XO5|yb#zXExRqIACgMKpM{em%+z z)-S(F{vgT?N10>IL@a&0erZQT+40rowI_`y8^tIy(Tq#kGxe)G3d)Xw z_;KU$#+hFRChJ$n!)?u+mMhe+?F^yx2q>9p%&f0O z83V3Lp9KvH8XSLi`uW-K&Tf1iWln>5aH9Sti2IMM-dVfbxV!O5lpO+bf4+Vh>=~b2 zzw^?3VMf}iNXtb7Cz`4}u58Pr^nAz9w|Zr})1cjNVf){`68b>mJ};|x299HSE79#2 zs=#I60l^Y0Sl!aPxTL@h9e_&$ZoiwRswpGQMxcf8y6L9vd^@-47~D`B<9m8Hx#z9m zf!;;%e+QBi5KzJCk}m=;vRPDXEi2$X#Wvq*BD{Q=cB|cm=qN1bj5Iw8GacvT7$-U> z$2k#YpxuC+Jnwsi@@7p>aKej%PIAJpq#tl1g76{dKI#yT2)+Ws)6U>&cdmZ@P5;r= zg*Ct7|L|!vFbv@xDAcb&)YFAlBK|ynj^_>}NkJq@Pa2AB$mYMf+ET{#%o!?^ectVO z+ZGm6{*kl94gQt3N5Nt_Q1 delta 468 zcmcaCFpG=tG%qg~0}vb%lFxj{G?7n&(P^T(GfO3lChNo*niFL?8I2~MHf34Ewwh@& z8>1pCdkV)I&dEBA%FJAAxF-iOs&exzVoc#p;akJMnt5^yP=!E>AW+3BMrBr^HQcKi zCtqPylod{41w)aZWzN6fYtGl+#r0>67=eI55th{EtPxeuK*uZp#Lj8~m~z zW&L%Xbqk^{m<3+p4{GqZ!7l|As_v{_pml{`7swY-n80>jK;fc*!Y2k+CAJS-4E$0H zEWdEG3hFg@e&Au?k?1h%x9PN*QFFn_?+Uj+&{QGW32M`|Cu%QlcSjZhlH>PO4pz0g%fG l#KqD;;sY}yBja-hm5U52Uswbftvk~Cb2@XrG60!i%>Zx5iK74j diff --git a/addons/zoo/models/__pycache__/zoo_creature.cpython-312.pyc b/addons/zoo/models/__pycache__/zoo_creature.cpython-312.pyc index 63b578dc7fb65078bc49814f33b9b292a64dd6d0..e54c863eb7d19d460381370674488b0e845ec0ae 100644 GIT binary patch delta 1118 zcmZuwOK;Oy6u!0-_m!vfXh_q>4UkcwlbNYROM!`mC_&7W_iEZ1MVZ_iaOK$1wWCp^ zLX3n&k&sA~MY|l$3RKpt_ydRyRfTF0;7?=XV(-kg*KzU6y1GH8decJoZ@?b8N}ho^m zlwbCo>3;RD8$_;J!%kxoZfGUv`aq753m$t!yLm9{Xcf()zhIm<8GWC%$}F=0{%`FK zVU;QDqxUCVXa!}Miy6-1WTMbn5LupYE;Y(pE{(`#i>IWdQmol(QEWfre)=;DZhdl5 zRnIt=nf>lyrh%p%0%M>z(fCKi49%_OU!@NJTi!{}Zl!0pQ^(ixFFnZ*93Z>ELl-lV zc8t5#=od6_UeU>QLg@*Btf31O>AHSq=9=mCsn*md1a43N1#qD(RR910 delta 284 zcmbOz@Q#!3G%qg~0}$9s$!GdAPvko}QI?Zw55vSqdsr$3HH9YYFzGTfPEKOF!6yh* zrO9-Qt+=EpGcSFzD|0lv22jXPlW+1q);i%^T#0#^xrsUPnJL9989sx|oNUah&(95H z6oCjlN`tv&TW<+jay~1bK;Ql~RVS?Cn`HAu?a!$xzh|jnpnAzx6WHY&pJ;>V{ zWR(qwumuvoIBatBQ%ZAE?TQ?MTt*-+Rsa$om>C%vpEKxPWzf6NVD^PYlrf8Og4%SQ Mi8@~yKy0uH0NpZ9_W%F@ diff --git a/addons/zoo/models/__pycache__/zoo_diet_plan.cpython-312.pyc b/addons/zoo/models/__pycache__/zoo_diet_plan.cpython-312.pyc index b543a88f8c8eb26980ac15f9d8e13c5c08b65e60..c404c2b3274d7ffe7bd1a19b756d32898a46af98 100644 GIT binary patch delta 18 YcmaE)@<@gAG%qg~0}xEx$QdaF05yXIzyJUM delta 18 YcmaE)@<@gAG%qg~0}$wKcJmrxB}M>R Cb`9A8 delta 51 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.animal.meal.form.view + zoo.animal.meal + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + zoo.animal.meal.list.view + zoo.animal.meal + + + + + + + + + + + + + + + + + + + + + + + + zoo.animal.meal.kanban.view + zoo.animal.meal + + + + + + + + + + + + + + +
+
+
+ + + +
+
+ +
+
+ +
+
+
+ Species
+ +
+
+
+ +
+
+ Total Food
+ + + +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ + + + Animal Meals + ir.actions.act_window + zoo.animal.meal + list,form,kanban + + +

+ Create a new Batch Feeding Record +

+

+ Track feeding sessions for multiple animals of the same species. +

+
+
+ + + + + +
+
\ No newline at end of file diff --git a/addons/zoo/views/zoo_animal_views.xml b/addons/zoo/views/zoo_animal_views.xml index 392dca9..25046d3 100644 --- a/addons/zoo/views/zoo_animal_views.xml +++ b/addons/zoo/views/zoo_animal_views.xml @@ -9,7 +9,7 @@
-