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> |
|