Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 190 KiB |
Before Width: | Height: | Size: 283 KiB |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 190 KiB |
After Width: | Height: | Size: 301 KiB |
@ -1,51 +0,0 @@ |
|||
/** @odoo-module */ |
|||
|
|||
import { registry } from '@web/core/registry'; |
|||
|
|||
import { formView } from '@web/views/form/form_view'; |
|||
import { FormController } from '@web/views/form/form_controller'; |
|||
import { FormRenderer } from '@web/views/form/form_renderer'; |
|||
const { useListener } = require("@web/core/utils/hooks"); |
|||
import rpc from 'web.rpc'; |
|||
import { patch } from "@web/core/utils/patch"; |
|||
|
|||
patch(FormRenderer.prototype, 'FormRender',{ |
|||
setup() { |
|||
this._super(); |
|||
}, |
|||
async OnClickOpenCamera() { |
|||
// opening the camera for capture the image
|
|||
var player = document.getElementById('player'); |
|||
var captureButton = document.getElementById('capture'); |
|||
var camera = document.getElementById('camera'); |
|||
player.classList.remove('d-none'); |
|||
captureButton.classList.remove('d-none'); |
|||
camera.classList.add('d-none'); |
|||
let stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false }); |
|||
player.srcObject = stream; |
|||
}, |
|||
async OnClickCaptureImage() { |
|||
// Capture the image from webcam and close the webcam
|
|||
var context = snapshot.getContext('2d'); |
|||
var canvas = document.getElementById('snapshot') |
|||
var save_image = document.getElementById('save_image') |
|||
var image = document.getElementById('image'); |
|||
var video = document.getElementById('video') |
|||
var camera = document.getElementById('camera'); |
|||
save_image.classList.remove('d-none'); |
|||
context.drawImage(player, 0, 0, 320, 240); |
|||
image.value = context.canvas.toDataURL(); |
|||
canvas.classList.remove('d-none'); |
|||
this.url = context.canvas.toDataURL() |
|||
}, |
|||
async OnClickSaveImage(){ |
|||
// Saving the image to that field
|
|||
rpc.query({ |
|||
model: 'image.capture', |
|||
method: 'action_save_image', |
|||
args: [[], this.props.record.data, this.url], |
|||
}).then(function(results){ |
|||
location.reload(); |
|||
}) |
|||
} |
|||
}); |
@ -1,43 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!--Image Capture view and action--> |
|||
<record id="image_capture_action" model="ir.actions.act_window"> |
|||
<field name="name">Image Capture</field> |
|||
<field name="res_model">image.capture</field> |
|||
<field name="view_mode">form</field> |
|||
</record> |
|||
|
|||
<record id="image_capture_view_form" model="ir.ui.view"> |
|||
<field name="name">image.capture.view.form</field> |
|||
<field name="model">image.capture</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<sheet> |
|||
<group> |
|||
<field name="model_name" invisible="True"/> |
|||
<field name="record_id" invisible="True"/> |
|||
<field name="field_name" invisible="True"/> |
|||
</group> |
|||
<video id="player" controls="true" class="d-none" |
|||
autoplay="true" style="width: 320px;padding: 20px;"/> |
|||
<canvas class="d-none" id="snapshot" width="320" |
|||
height="240" style="width: 320px;padding: 20px;"/> |
|||
<input type="hidden" name="image" id="image"/> |
|||
</sheet> |
|||
<footer> |
|||
<div id="camera" class="btn btn-primary" |
|||
t-on-click="OnClickOpenCamera">Open Camera |
|||
</div> |
|||
<div id="capture" class="btn btn-primary d-none" |
|||
t-on-click="OnClickCaptureImage">Capture |
|||
</div> |
|||
<div id="save_image" class="btn btn-primary d-none" |
|||
t-on-click="OnClickSaveImage">Save Image |
|||
</div> |
|||
<button string="Cancel" class="btn btn-default" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |